Program.cs 78 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034
  1. using System;
  2. using System.Collections;
  3. using System.Collections.Generic;
  4. using System.Diagnostics;
  5. using System.IO;
  6. using System.Runtime.InteropServices;
  7. using System.Security.Cryptography.X509Certificates;
  8. using Newtonsoft.Json;
  9. using Newtonsoft.Json.Linq;
  10. namespace ConsoleApp2
  11. {
  12. public class CommandInfo
  13. {
  14. public ushort ID { get; set; }
  15. public byte Type { get; set; }
  16. public ushort Command { get; set; }
  17. public List<ushort> Data { get; set; }
  18. }
  19. internal class Program
  20. {
  21. static UInt16 FuncionType = 0;
  22. #region CRC32校验
  23. static UInt32[] crc32_table = new UInt32[256]
  24. {
  25. 0x00000000, 0x04C11DB7, 0x09823B6E, 0x0D4326D9, 0x130476DC, 0x17C56B6B,
  26. 0x1A864DB2, 0x1E475005, 0x2608EDB8, 0x22C9F00F, 0x2F8AD6D6, 0x2B4BCB61,
  27. 0x350C9B64, 0x31CD86D3, 0x3C8EA00A, 0x384FBDBD, 0x4C11DB70, 0x48D0C6C7,
  28. 0x4593E01E, 0x4152FDA9, 0x5F15ADAC, 0x5BD4B01B, 0x569796C2, 0x52568B75,
  29. 0x6A1936C8, 0x6ED82B7F, 0x639B0DA6, 0x675A1011, 0x791D4014, 0x7DDC5DA3,
  30. 0x709F7B7A, 0x745E66CD, 0x9823B6E0, 0x9CE2AB57, 0x91A18D8E, 0x95609039,
  31. 0x8B27C03C, 0x8FE6DD8B, 0x82A5FB52, 0x8664E6E5, 0xBE2B5B58, 0xBAEA46EF,
  32. 0xB7A96036, 0xB3687D81, 0xAD2F2D84, 0xA9EE3033, 0xA4AD16EA, 0xA06C0B5D,
  33. 0xD4326D90, 0xD0F37027, 0xDDB056FE, 0xD9714B49, 0xC7361B4C, 0xC3F706FB,
  34. 0xCEB42022, 0xCA753D95, 0xF23A8028, 0xF6FB9D9F, 0xFBB8BB46, 0xFF79A6F1,
  35. 0xE13EF6F4, 0xE5FFEB43, 0xE8BCCD9A, 0xEC7DD02D, 0x34867077, 0x30476DC0,
  36. 0x3D044B19, 0x39C556AE, 0x278206AB, 0x23431B1C, 0x2E003DC5, 0x2AC12072,
  37. 0x128E9DCF, 0x164F8078, 0x1B0CA6A1, 0x1FCDBB16, 0x018AEB13, 0x054BF6A4,
  38. 0x0808D07D, 0x0CC9CDCA, 0x7897AB07, 0x7C56B6B0, 0x71159069, 0x75D48DDE,
  39. 0x6B93DDDB, 0x6F52C06C, 0x6211E6B5, 0x66D0FB02, 0x5E9F46BF, 0x5A5E5B08,
  40. 0x571D7DD1, 0x53DC6066, 0x4D9B3063, 0x495A2DD4, 0x44190B0D, 0x40D816BA,
  41. 0xACA5C697, 0xA864DB20, 0xA527FDF9, 0xA1E6E04E, 0xBFA1B04B, 0xBB60ADFC,
  42. 0xB6238B25, 0xB2E29692, 0x8AAD2B2F, 0x8E6C3698, 0x832F1041, 0x87EE0DF6,
  43. 0x99A95DF3, 0x9D684044, 0x902B669D, 0x94EA7B2A, 0xE0B41DE7, 0xE4750050,
  44. 0xE9362689, 0xEDF73B3E, 0xF3B06B3B, 0xF771768C, 0xFA325055, 0xFEF34DE2,
  45. 0xC6BCF05F, 0xC27DEDE8, 0xCF3ECB31, 0xCBFFD686, 0xD5B88683, 0xD1799B34,
  46. 0xDC3ABDED, 0xD8FBA05A, 0x690CE0EE, 0x6DCDFD59, 0x608EDB80, 0x644FC637,
  47. 0x7A089632, 0x7EC98B85, 0x738AAD5C, 0x774BB0EB, 0x4F040D56, 0x4BC510E1,
  48. 0x46863638, 0x42472B8F, 0x5C007B8A, 0x58C1663D, 0x558240E4, 0x51435D53,
  49. 0x251D3B9E, 0x21DC2629, 0x2C9F00F0, 0x285E1D47, 0x36194D42, 0x32D850F5,
  50. 0x3F9B762C, 0x3B5A6B9B, 0x0315D626, 0x07D4CB91, 0x0A97ED48, 0x0E56F0FF,
  51. 0x1011A0FA, 0x14D0BD4D, 0x19939B94, 0x1D528623, 0xF12F560E, 0xF5EE4BB9,
  52. 0xF8AD6D60, 0xFC6C70D7, 0xE22B20D2, 0xE6EA3D65, 0xEBA91BBC, 0xEF68060B,
  53. 0xD727BBB6, 0xD3E6A601, 0xDEA580D8, 0xDA649D6F, 0xC423CD6A, 0xC0E2D0DD,
  54. 0xCDA1F604, 0xC960EBB3, 0xBD3E8D7E, 0xB9FF90C9, 0xB4BCB610, 0xB07DABA7,
  55. 0xAE3AFBA2, 0xAAFBE615, 0xA7B8C0CC, 0xA379DD7B, 0x9B3660C6, 0x9FF77D71,
  56. 0x92B45BA8, 0x9675461F, 0x8832161A, 0x8CF30BAD, 0x81B02D74, 0x857130C3,
  57. 0x5D8A9099, 0x594B8D2E, 0x5408ABF7, 0x50C9B640, 0x4E8EE645, 0x4A4FFBF2,
  58. 0x470CDD2B, 0x43CDC09C, 0x7B827D21, 0x7F436096, 0x7200464F, 0x76C15BF8,
  59. 0x68860BFD, 0x6C47164A, 0x61043093, 0x65C52D24, 0x119B4BE9, 0x155A565E,
  60. 0x18197087, 0x1CD86D30, 0x029F3D35, 0x065E2082, 0x0B1D065B, 0x0FDC1BEC,
  61. 0x3793A651, 0x3352BBE6, 0x3E119D3F, 0x3AD08088, 0x2497D08D, 0x2056CD3A,
  62. 0x2D15EBE3, 0x29D4F654, 0xC5A92679, 0xC1683BCE, 0xCC2B1D17, 0xC8EA00A0,
  63. 0xD6AD50A5, 0xD26C4D12, 0xDF2F6BCB, 0xDBEE767C, 0xE3A1CBC1, 0xE760D676,
  64. 0xEA23F0AF, 0xEEE2ED18, 0xF0A5BD1D, 0xF464A0AA, 0xF9278673, 0xFDE69BC4,
  65. 0x89B8FD09, 0x8D79E0BE, 0x803AC667, 0x84FBDBD0, 0x9ABC8BD5, 0x9E7D9662,
  66. 0x933EB0BB, 0x97FFAD0C, 0xAFB010B1, 0xAB710D06, 0xA6322BDF, 0xA2F33668,
  67. 0xBCB4666D, 0xB8757BDA, 0xB5365D03, 0xB1F740B4
  68. };
  69. static UInt32 crc32_cal(byte[] pData, UInt16 Length)
  70. {
  71. UInt32 nReg;
  72. UInt32 nTemp = 0;
  73. UInt16 i, n;
  74. nReg = 0xFFFFFFFF;
  75. for (n = 0; n < Length; n++)
  76. {
  77. nReg ^= (UInt32)pData[n];
  78. for (i = 0; i < 4; i++)
  79. {
  80. nTemp = crc32_table[((nReg >> 24) & 0xFF)];
  81. nReg <<= 8;
  82. nReg ^= nTemp;
  83. }
  84. }
  85. return nReg;
  86. }
  87. #endregion
  88. #region 输入CmdCode,转换为String存储该条指令
  89. static string CmdCode_To_CmdSave(ushort ID, byte Type, byte[] Code)
  90. {
  91. string result = "";
  92. byte[] input = new byte[255];
  93. UInt32 crc_rel = 0;
  94. ushort DataLen = 0;
  95. input[0] = 0x55; input[1] = 0xAA; input[2] = (byte)(ID >> 8); input[3] = (byte)(ID & 0xFF); input[4] = Type;
  96. DataLen = (ushort)Code[1];
  97. input[5] = (byte)(DataLen + 2);
  98. for (int i = 0; i < DataLen + 2; i++)
  99. {
  100. input[6 + i] = Code[i];
  101. }
  102. crc_rel = crc32_cal(input, (ushort)(DataLen + 8));
  103. input[8 + DataLen] = (byte)(crc_rel >> 24);
  104. input[9 + DataLen] = (byte)(crc_rel >> 16);
  105. input[10 + DataLen] = (byte)(crc_rel >> 8);
  106. input[11 + DataLen] = (byte)crc_rel;
  107. input[12 + DataLen] = 0xF0;
  108. for (int i = 0; i < DataLen + 13; i++)
  109. {
  110. result += Convert.ToString(input[i], 16).PadLeft(2, '0').ToUpper() + " ";
  111. }
  112. return result;
  113. }
  114. #endregion
  115. static void Main(string[] args)
  116. {
  117. Console.WriteLine("欢迎使用 MOTINOVA E-Bike 驱动系统(Migic & Hub)参数生成软件 V2.1.0 20240313\r\n");
  118. //账户登录
  119. //Console.WriteLine("请输入使用密码:");
  120. //if (Console.ReadLine() != "123456")
  121. //{
  122. // Console.WriteLine("密码错误!");
  123. // Console.ReadKey();
  124. // return;
  125. //}
  126. //选择电机类型
  127. //Console.WriteLine("请输入电机类型:");
  128. //Console.WriteLine("F1:小牙盘 F2:大牙盘/轮毂 F3:通用指令");
  129. //ConsoleKey GetKey = Console.ReadKey().Key;
  130. //if (GetKey == ConsoleKey.F1) //小牙盘
  131. //{
  132. // FuncionType = 1;
  133. //}
  134. //else if (GetKey == ConsoleKey.F2) //大牙盘
  135. //{
  136. // FuncionType = 2;
  137. //}
  138. //else if (GetKey == ConsoleKey.F3) //通用指令
  139. //{
  140. // FuncionType = 3;
  141. //}
  142. //else
  143. //{
  144. // Console.WriteLine("请正确选择电机类型!");
  145. // Console.ReadKey();
  146. // return;
  147. //}
  148. FuncionType = 2;
  149. //输入文件
  150. //Console.WriteLine("请输入文件名称:");
  151. //string inputFilename = Console.ReadLine();
  152. //if (File.Exists(inputFilename + ".src"))//检查文件是否存在
  153. //{
  154. // Console.WriteLine("检查源文件成功!");
  155. // Console.WriteLine("文件名:" + inputFilename + ".src");
  156. //}
  157. //else if (File.Exists(inputFilename + ".json"))//检查文件是否存在
  158. //{
  159. // Console.WriteLine("检查源文件成功!");
  160. // Console.WriteLine("文件名:" + inputFilename + ".json");
  161. //}
  162. //else
  163. //{
  164. // Console.WriteLine("请检查源文件是否存在!");
  165. // Console.ReadKey();
  166. // return;
  167. //}
  168. //搜索路径下所有*.src文件
  169. //string pathName = Environment.GetCommandLineArgs()[1];
  170. //string[] srcFiles = Directory.GetFiles(Directory.GetCurrentDirectory() + "\\" + pathName, "*.src", SearchOption.TopDirectoryOnly);
  171. //转换指定文件
  172. //string srcFile = "D:\\笔记本20221223\\zhouxiong9\\Documents\\Tools\\motor-debug\\Welling_Motor_Debug_Tool\\bin\\Debug\\Format\\HUB_NM010-6G-36V-250W_Test_V1.0.0.0.0_20240304_Test_20240318.src";//Environment.GetCommandLineArgs()[1];
  173. string srcFile = Environment.GetCommandLineArgs()[1];
  174. //批量转换
  175. //foreach (var srcFile in srcFiles)
  176. {
  177. //显示文件名
  178. Console.WriteLine("[文件名]: " + Path.GetFileName(srcFile));
  179. //显示文件内容
  180. #if false
  181. do
  182. {
  183. StreamReader objReader = new StreamReader(srcFile);
  184. string sLine = "";
  185. ArrayList arrText = new ArrayList();//创建一个动态数组
  186. while (sLine != null)
  187. {
  188. sLine = objReader.ReadLine();
  189. arrText.Add(sLine);
  190. }
  191. objReader.Close();
  192. foreach (string sOutput in arrText)
  193. {
  194. Console.WriteLine(sOutput + "\r\n");
  195. }
  196. } while (false);
  197. #endif
  198. //开始转换
  199. do
  200. {
  201. StreamReader objReader = new StreamReader(srcFile);
  202. string sLine = "";
  203. ArrayList arrText = new ArrayList();//创建一个动态数组
  204. while (sLine != null)
  205. {
  206. sLine = objReader.ReadLine();
  207. arrText.Add(sLine);
  208. }
  209. objReader.Close();
  210. try
  211. {
  212. string filename = Path.GetDirectoryName(srcFile) + "\\" + Path.GetFileNameWithoutExtension(srcFile) + ".ttcfg";
  213. if (File.Exists(filename))//文件已存在,跳过
  214. {
  215. Console.WriteLine("文件已存在,跳过!\r\n");
  216. continue;
  217. }
  218. else//文件名有效,转换后的数据存在该文件中
  219. {
  220. //创建文件
  221. FileStream fs = File.Create(filename);
  222. fs.Close();
  223. //建立字典,存放并获取每个命令的行号
  224. Dictionary<string, int> DicRowNum = new Dictionary<string, int>();
  225. DicRowNum.Add("[型号]", 0);
  226. DicRowNum.Add("[SN号]", 0);
  227. DicRowNum.Add("[校验码]", 0);
  228. DicRowNum.Add("[自定义1]", 0);
  229. DicRowNum.Add("[自定义2]", 0);
  230. DicRowNum.Add("[自定义3]", 0);
  231. DicRowNum.Add("[生产信息]", 0);
  232. DicRowNum.Add("[马达信息]", 0);
  233. DicRowNum.Add("[整车参数]", 0);
  234. DicRowNum.Add("[控制参数]", 0);
  235. DicRowNum.Add("[力矩传感器参数]", 0);
  236. DicRowNum.Add("[其它传感器参数]", 0);
  237. DicRowNum.Add("[助力参数]", 0);
  238. DicRowNum.Add("[调试参数]", 0);
  239. Dictionary<string, int> __dict = new Dictionary<string, int>(DicRowNum);
  240. foreach (KeyValuePair<string, int> item in __dict)
  241. {
  242. foreach (string cmd in arrText)
  243. {
  244. if (cmd.Contains(item.Key))
  245. {
  246. DicRowNum[item.Key] = arrText.IndexOf(cmd);
  247. break;
  248. }
  249. }
  250. }
  251. //开始遍历,转换每条指令对应的数据
  252. using (StreamWriter file = new StreamWriter(filename))
  253. {
  254. foreach (string index in DicRowNum.Keys)
  255. {
  256. int rowNum = DicRowNum[index];
  257. //判断该命令是否打开
  258. if (arrText[rowNum].ToString().Split(',')[1] == "0")//该指令关闭
  259. {
  260. continue;
  261. }
  262. else//该指令打开
  263. {
  264. //写入命令功能
  265. file.WriteLine(index);
  266. var CmdCode = new byte[100];
  267. Array.Clear(CmdCode, 0, CmdCode.Length);
  268. switch (index)
  269. {
  270. case "[型号]":
  271. {
  272. CmdCode[0] = 0x22;
  273. CmdCode[1] = 0x10;
  274. string ModeString = arrText[rowNum + 1].ToString().Split(',')[1];
  275. for (ushort i = 0; i < ((ModeString.Length > 16) ? 16 : ModeString.Length); i++)
  276. {
  277. CmdCode[2 + i] = (byte)ModeString[i];
  278. }
  279. //写入文件
  280. file.WriteLine(CmdCode_To_CmdSave(0x751, 0x16, CmdCode));
  281. break;
  282. }
  283. case "[SN号]":
  284. {
  285. CmdCode[0] = 0x23;
  286. CmdCode[1] = 0x10;
  287. string SnString = arrText[rowNum + 1].ToString().Split(',')[1];
  288. for (ushort i = 0; i < ((SnString.Length > 16) ? 16 : SnString.Length); i++)
  289. {
  290. CmdCode[2 + i] = (byte)SnString[i];
  291. }
  292. //写入文件
  293. file.WriteLine(CmdCode_To_CmdSave(0x751, 0x16, CmdCode));
  294. break;
  295. }
  296. case "[校验码]":
  297. {
  298. CmdCode[0] = 0x11;
  299. CmdCode[1] = 0x08;
  300. string KeyString = arrText[rowNum + 1].ToString().Split(',')[1];
  301. for (ushort i = 0; i < ((KeyString.Length > 8) ? 8 : KeyString.Length); i++)
  302. {
  303. CmdCode[2 + i] = (byte)KeyString[i];
  304. }
  305. //写入文件
  306. file.WriteLine(CmdCode_To_CmdSave(0x751, 0x16, CmdCode));
  307. break;
  308. }
  309. case "[自定义1]":
  310. {
  311. CmdCode[0] = 0x14;
  312. CmdCode[1] = 0x10;
  313. string UserInfo1String = arrText[rowNum + 1].ToString().Split(',')[1];
  314. for (ushort i = 0; i < ((UserInfo1String.Length > 16) ? 16 : UserInfo1String.Length); i++)
  315. {
  316. CmdCode[2 + i] = (byte)UserInfo1String[i];
  317. }
  318. //写入文件
  319. file.WriteLine(CmdCode_To_CmdSave(0x751, 0x16, CmdCode));
  320. break;
  321. }
  322. case "[自定义2]":
  323. {
  324. CmdCode[0] = 0x16;
  325. CmdCode[1] = 0x10;
  326. string UserInfo1String = arrText[rowNum + 1].ToString().Split(',')[1];
  327. for (ushort i = 0; i < ((UserInfo1String.Length > 16) ? 16 : UserInfo1String.Length); i++)
  328. {
  329. CmdCode[2 + i] = (byte)UserInfo1String[i];
  330. }
  331. //写入文件
  332. file.WriteLine(CmdCode_To_CmdSave(0x751, 0x16, CmdCode));
  333. break;
  334. }
  335. case "[自定义3]":
  336. {
  337. CmdCode[0] = 0x18;
  338. CmdCode[1] = 0x10;
  339. string UserInfo1String = arrText[rowNum + 1].ToString().Split(',')[1];
  340. for (ushort i = 0; i < ((UserInfo1String.Length > 16) ? 16 : UserInfo1String.Length); i++)
  341. {
  342. CmdCode[2 + i] = (byte)UserInfo1String[i];
  343. }
  344. //写入文件
  345. file.WriteLine(CmdCode_To_CmdSave(0x751, 0x16, CmdCode));
  346. break;
  347. }
  348. case "[生产信息]":
  349. {
  350. CmdCode[0] = 0x24;
  351. CmdCode[1] = 0x20;
  352. string MAC_Info = arrText[rowNum + 1].ToString().Split(',')[1];
  353. for (ushort i = 0; i < ((MAC_Info.Length > 8) ? 8 : MAC_Info.Length); i++)
  354. {
  355. CmdCode[2 + i] = (byte)MAC_Info[i];
  356. }
  357. MAC_Info = arrText[rowNum + 2].ToString().Split(',')[1];
  358. for (ushort i = 0; i < ((MAC_Info.Length > 8) ? 8 : MAC_Info.Length); i++)
  359. {
  360. CmdCode[10 + i] = (byte)MAC_Info[i];
  361. }
  362. MAC_Info = arrText[rowNum + 3].ToString().Split(',')[1];
  363. for (ushort i = 0; i < ((MAC_Info.Length > 8) ? 8 : MAC_Info.Length); i++)
  364. {
  365. CmdCode[18 + i] = (byte)MAC_Info[i];
  366. }
  367. MAC_Info = arrText[rowNum + 4].ToString().Split(',')[1];
  368. for (ushort i = 0; i < ((MAC_Info.Length > 8) ? 8 : MAC_Info.Length); i++)
  369. {
  370. CmdCode[26 + i] = (byte)MAC_Info[i];
  371. }
  372. //写入文件
  373. file.WriteLine(CmdCode_To_CmdSave(0x751, 0x16, CmdCode));
  374. break;
  375. }
  376. case "[马达信息]":
  377. {
  378. CmdCode[0] = 0x3B;
  379. CmdCode[1] = 0x28;
  380. ushort uDataTemp;
  381. short sDataTemp;
  382. //存储标志
  383. uDataTemp = Convert.ToUInt16(arrText[rowNum + 1].ToString().Split(',')[1]);
  384. CmdCode[2] = (byte)(uDataTemp & 0xFF);
  385. CmdCode[3] = (byte)(uDataTemp >> 8);
  386. //极对数
  387. uDataTemp = Convert.ToUInt16(arrText[rowNum + 2].ToString().Split(',')[1]);
  388. CmdCode[4] = (byte)(uDataTemp & 0xFF);
  389. CmdCode[5] = (byte)(uDataTemp >> 8);
  390. //电阻
  391. uDataTemp = Convert.ToUInt16(arrText[rowNum + 3].ToString().Split(',')[1]);
  392. CmdCode[6] = (byte)(uDataTemp & 0xFF);
  393. CmdCode[7] = (byte)(uDataTemp >> 8);
  394. //d轴电感
  395. uDataTemp = Convert.ToUInt16(arrText[rowNum + 4].ToString().Split(',')[1]);
  396. CmdCode[8] = (byte)(uDataTemp & 0xFF);
  397. CmdCode[9] = (byte)(uDataTemp >> 8);
  398. //q轴电感
  399. uDataTemp = Convert.ToUInt16(arrText[rowNum + 5].ToString().Split(',')[1]);
  400. CmdCode[10] = (byte)(uDataTemp & 0xFF);
  401. CmdCode[11] = (byte)(uDataTemp >> 8);
  402. //永磁体磁链
  403. uDataTemp = Convert.ToUInt16(arrText[rowNum + 6].ToString().Split(',')[1]);
  404. CmdCode[12] = (byte)(uDataTemp & 0xFF);
  405. CmdCode[13] = (byte)(uDataTemp >> 8);
  406. //Id最大值
  407. uDataTemp = Convert.ToUInt16(arrText[rowNum + 7].ToString().Split(',')[1]);
  408. CmdCode[14] = (byte)(uDataTemp & 0xFF);
  409. CmdCode[15] = (byte)(uDataTemp >> 8);
  410. //Id最小值
  411. sDataTemp = Convert.ToInt16(arrText[rowNum + 8].ToString().Split(',')[1]);
  412. CmdCode[16] = (byte)(sDataTemp & 0xFF);
  413. CmdCode[17] = (byte)(sDataTemp >> 8);
  414. //额定转速
  415. uDataTemp = Convert.ToUInt16(arrText[rowNum + 9].ToString().Split(',')[1]);
  416. CmdCode[18] = (byte)(uDataTemp & 0xFF);
  417. CmdCode[19] = (byte)(uDataTemp >> 8);
  418. //额定功率
  419. uDataTemp = Convert.ToUInt16(arrText[rowNum + 10].ToString().Split(',')[1]);
  420. CmdCode[20] = (byte)(uDataTemp & 0xFF);
  421. CmdCode[21] = (byte)(uDataTemp >> 8);
  422. //额定电流
  423. uDataTemp = Convert.ToUInt16(arrText[rowNum + 11].ToString().Split(',')[1]);
  424. CmdCode[22] = (byte)(uDataTemp & 0xFF);
  425. CmdCode[23] = (byte)(uDataTemp >> 8);
  426. //额定电压
  427. uDataTemp = Convert.ToUInt16(arrText[rowNum + 12].ToString().Split(',')[1]);
  428. CmdCode[24] = (byte)(uDataTemp & 0xFF);
  429. CmdCode[25] = (byte)(uDataTemp >> 8);
  430. //惯量
  431. uDataTemp = Convert.ToUInt16(arrText[rowNum + 13].ToString().Split(',')[1]);
  432. CmdCode[26] = (byte)(uDataTemp & 0xFF);
  433. CmdCode[27] = (byte)(uDataTemp >> 8);
  434. //最大转矩
  435. uDataTemp = Convert.ToUInt16(arrText[rowNum + 14].ToString().Split(',')[1]);
  436. CmdCode[28] = (byte)(uDataTemp & 0xFF);
  437. CmdCode[29] = (byte)(uDataTemp >> 8);
  438. //预留1
  439. uDataTemp = Convert.ToUInt16(arrText[rowNum + 15].ToString().Split(',')[1]);
  440. CmdCode[30] = (byte)(uDataTemp & 0xFF);
  441. CmdCode[31] = (byte)(uDataTemp >> 8);
  442. //预留2
  443. uDataTemp = Convert.ToUInt16(arrText[rowNum + 16].ToString().Split(',')[1]);
  444. CmdCode[32] = (byte)(uDataTemp & 0xFF);
  445. CmdCode[33] = (byte)(uDataTemp >> 8);
  446. //预留3
  447. uDataTemp = Convert.ToUInt16(arrText[rowNum + 17].ToString().Split(',')[1]);
  448. CmdCode[34] = (byte)(uDataTemp & 0xFF);
  449. CmdCode[35] = (byte)(uDataTemp >> 8);
  450. //预留4
  451. uDataTemp = Convert.ToUInt16(arrText[rowNum + 18].ToString().Split(',')[1]);
  452. CmdCode[36] = (byte)(uDataTemp & 0xFF);
  453. CmdCode[37] = (byte)(uDataTemp >> 8);
  454. //预留5
  455. uDataTemp = Convert.ToUInt16(arrText[rowNum + 19].ToString().Split(',')[1]);
  456. CmdCode[38] = (byte)(uDataTemp & 0xFF);
  457. CmdCode[39] = (byte)(uDataTemp >> 8);
  458. //预留6
  459. uDataTemp = Convert.ToUInt16(arrText[rowNum + 20].ToString().Split(',')[1]);
  460. CmdCode[40] = (byte)(uDataTemp & 0xFF);
  461. CmdCode[41] = (byte)(uDataTemp >> 8);
  462. //写入文件
  463. file.WriteLine(CmdCode_To_CmdSave(0x751, 0x16, CmdCode));
  464. break;
  465. }
  466. case "[整车参数]":
  467. {
  468. CmdCode[0] = 0x3D;
  469. CmdCode[1] = 0x1C;
  470. ushort uDataTemp;
  471. short sDataTemp;
  472. //存储标志
  473. uDataTemp = Convert.ToUInt16(arrText[rowNum + 1].ToString().Split(',')[1]);
  474. CmdCode[2] = (byte)(uDataTemp & 0xFF);
  475. CmdCode[3] = (byte)(uDataTemp >> 8);
  476. //轮胎周长
  477. uDataTemp = Convert.ToUInt16(arrText[rowNum + 2].ToString().Split(',')[1]);
  478. CmdCode[4] = (byte)(uDataTemp & 0xFF);
  479. CmdCode[5] = (byte)(uDataTemp >> 8);
  480. //电控传动比
  481. uDataTemp = Convert.ToUInt16(arrText[rowNum + 3].ToString().Split(',')[1]);
  482. CmdCode[6] = (byte)(uDataTemp & 0xFF);
  483. CmdCode[7] = (byte)(uDataTemp >> 8);
  484. //助力最大限速
  485. uDataTemp = Convert.ToUInt16(arrText[rowNum + 4].ToString().Split(',')[1]);
  486. CmdCode[8] = (byte)(uDataTemp & 0xFF);
  487. CmdCode[9] = (byte)(uDataTemp >> 8);
  488. //推行限速
  489. uDataTemp = Convert.ToUInt16(arrText[rowNum + 5].ToString().Split(',')[1]);
  490. CmdCode[10] = (byte)(uDataTemp & 0xFF);
  491. CmdCode[11] = (byte)(uDataTemp >> 8);
  492. //前牙盘
  493. uDataTemp = Convert.ToUInt16(arrText[rowNum + 6].ToString().Split(',')[1]);
  494. CmdCode[12] = (byte)(uDataTemp & 0xFF);
  495. CmdCode[13] = (byte)(uDataTemp >> 8);
  496. //后牙盘
  497. uDataTemp = Convert.ToUInt16(arrText[rowNum + 7].ToString().Split(',')[1]);
  498. CmdCode[14] = (byte)(uDataTemp & 0xFF);
  499. CmdCode[15] = (byte)(uDataTemp >> 8);
  500. //助力方案1
  501. uDataTemp = Convert.ToUInt16(arrText[rowNum + 8].ToString().Split(',')[1]);
  502. CmdCode[16] = (byte)(uDataTemp & 0xFF);
  503. CmdCode[17] = (byte)(uDataTemp >> 8);
  504. //助力方案2
  505. uDataTemp = Convert.ToUInt16(arrText[rowNum + 9].ToString().Split(',')[1]);
  506. CmdCode[18] = (byte)(uDataTemp & 0xFF);
  507. CmdCode[19] = (byte)(uDataTemp >> 8);
  508. //前后灯参数
  509. uDataTemp = Convert.ToUInt16(arrText[rowNum + 10].ToString().Split(',')[1]);
  510. CmdCode[20] = (byte)(uDataTemp & 0xFF);
  511. CmdCode[21] = (byte)(uDataTemp >> 8);
  512. //周长微调
  513. sDataTemp = Convert.ToInt16(arrText[rowNum + 11].ToString().Split(',')[1]);
  514. CmdCode[22] = (byte)(sDataTemp & 0xFF);
  515. CmdCode[23] = (byte)(sDataTemp >> 8);
  516. //启动模式
  517. uDataTemp = Convert.ToUInt16(arrText[rowNum + 12].ToString().Split(',')[1]);
  518. CmdCode[24] = (byte)(uDataTemp & 0xFF);
  519. CmdCode[25] = (byte)(uDataTemp >> 8);
  520. //开关机时间
  521. uDataTemp = Convert.ToUInt16(arrText[rowNum + 13].ToString().Split(',')[1]);
  522. CmdCode[26] = (byte)(uDataTemp & 0xFF);
  523. CmdCode[27] = (byte)(uDataTemp >> 8);
  524. //预留1
  525. uDataTemp = Convert.ToUInt16(arrText[rowNum + 14].ToString().Split(',')[1]);
  526. CmdCode[28] = (byte)(uDataTemp & 0xFF);
  527. CmdCode[29] = (byte)(uDataTemp >> 8);
  528. //写入文件
  529. file.WriteLine(CmdCode_To_CmdSave(0x751, 0x16, CmdCode));
  530. break;
  531. }
  532. case "[控制参数]":
  533. {
  534. CmdCode[0] = 0x3F;
  535. CmdCode[1] = 0x22;
  536. ushort uDataTemp;
  537. short sDataTemp;
  538. //存储标志
  539. uDataTemp = Convert.ToUInt16(arrText[rowNum + 1].ToString().Split(',')[1]);
  540. CmdCode[2] = (byte)(uDataTemp & 0xFF);
  541. CmdCode[3] = (byte)(uDataTemp >> 8);
  542. //位置传感器零点
  543. uDataTemp = Convert.ToUInt16(arrText[rowNum + 2].ToString().Split(',')[1]);
  544. CmdCode[4] = (byte)(uDataTemp & 0xFF);
  545. CmdCode[5] = (byte)(uDataTemp >> 8);
  546. //位置传感器当前零点
  547. uDataTemp = Convert.ToUInt16(arrText[rowNum + 3].ToString().Split(',')[1]);
  548. CmdCode[6] = (byte)(uDataTemp & 0xFF);
  549. CmdCode[7] = (byte)(uDataTemp >> 8);
  550. //峰值电流
  551. uDataTemp = Convert.ToUInt16(arrText[rowNum + 4].ToString().Split(',')[1]);
  552. CmdCode[8] = (byte)(uDataTemp & 0xFF);
  553. CmdCode[9] = (byte)(uDataTemp >> 8);
  554. //过流保护阈值
  555. uDataTemp = Convert.ToUInt16(arrText[rowNum + 5].ToString().Split(',')[1]);
  556. CmdCode[10] = (byte)(uDataTemp & 0xFF);
  557. CmdCode[11] = (byte)(uDataTemp >> 8);
  558. //最高档过压保护阈值
  559. uDataTemp = Convert.ToUInt16(arrText[rowNum + 6].ToString().Split(',')[1]);
  560. CmdCode[12] = (byte)(uDataTemp & 0xFF);
  561. CmdCode[13] = (byte)(uDataTemp >> 8);
  562. //最高档欠压保护阈值
  563. uDataTemp = Convert.ToUInt16(arrText[rowNum + 7].ToString().Split(',')[1]);
  564. CmdCode[14] = (byte)(uDataTemp & 0xFF);
  565. CmdCode[15] = (byte)(uDataTemp >> 8);
  566. //超速保护阈值
  567. uDataTemp = Convert.ToUInt16(arrText[rowNum + 8].ToString().Split(',')[1]);
  568. CmdCode[16] = (byte)(uDataTemp & 0xFF);
  569. CmdCode[17] = (byte)(uDataTemp >> 8);
  570. //控制器过热保护阈值
  571. uDataTemp = Convert.ToUInt16(arrText[rowNum + 9].ToString().Split(',')[1]);
  572. CmdCode[18] = (byte)(uDataTemp & 0xFF);
  573. CmdCode[19] = (byte)(uDataTemp >> 8);
  574. //控制器过热恢复阈值
  575. uDataTemp = Convert.ToUInt16(arrText[rowNum + 10].ToString().Split(',')[1]);
  576. CmdCode[20] = (byte)(uDataTemp & 0xFF);
  577. CmdCode[21] = (byte)(uDataTemp >> 8);
  578. //控制器过热降额阈值
  579. sDataTemp = Convert.ToInt16(arrText[rowNum + 11].ToString().Split(',')[1]);
  580. CmdCode[22] = (byte)(sDataTemp & 0xFF);
  581. CmdCode[23] = (byte)(sDataTemp >> 8);
  582. //电机过热保护阈值
  583. uDataTemp = Convert.ToUInt16(arrText[rowNum + 12].ToString().Split(',')[1]);
  584. CmdCode[24] = (byte)(uDataTemp & 0xFF);
  585. CmdCode[25] = (byte)(uDataTemp >> 8);
  586. //电机过热恢复阈值
  587. uDataTemp = Convert.ToUInt16(arrText[rowNum + 13].ToString().Split(',')[1]);
  588. CmdCode[26] = (byte)(uDataTemp & 0xFF);
  589. CmdCode[27] = (byte)(uDataTemp >> 8);
  590. //电机过热降额阈值
  591. uDataTemp = Convert.ToUInt16(arrText[rowNum + 14].ToString().Split(',')[1]);
  592. CmdCode[28] = (byte)(uDataTemp & 0xFF);
  593. CmdCode[29] = (byte)(uDataTemp >> 8);
  594. //预留1
  595. uDataTemp = Convert.ToUInt16(arrText[rowNum + 15].ToString().Split(',')[1]);
  596. CmdCode[30] = (byte)(uDataTemp & 0xFF);
  597. CmdCode[31] = (byte)(uDataTemp >> 8);
  598. //预留2
  599. uDataTemp = Convert.ToUInt16(arrText[rowNum + 16].ToString().Split(',')[1]);
  600. CmdCode[32] = (byte)(uDataTemp & 0xFF);
  601. CmdCode[33] = (byte)(uDataTemp >> 8);
  602. //预留3
  603. uDataTemp = Convert.ToUInt16(arrText[rowNum + 17].ToString().Split(',')[1]);
  604. CmdCode[34] = (byte)(uDataTemp & 0xFF);
  605. CmdCode[35] = (byte)(uDataTemp >> 8);
  606. //写入文件
  607. file.WriteLine(CmdCode_To_CmdSave(0x751, 0x16, CmdCode));
  608. break;
  609. }
  610. case "[力矩传感器参数]":
  611. {
  612. CmdCode[0] = 0x47;
  613. CmdCode[1] = 0x2E;
  614. ushort uDataTemp;
  615. short sDataTemp;
  616. //存储标志
  617. uDataTemp = Convert.ToUInt16(arrText[rowNum + 1].ToString().Split(',')[1]);
  618. CmdCode[2] = (byte)(uDataTemp & 0xFF);
  619. CmdCode[3] = (byte)(uDataTemp >> 8);
  620. //出厂零点
  621. uDataTemp = Convert.ToUInt16(arrText[rowNum + 2].ToString().Split(',')[1]);
  622. CmdCode[4] = (byte)(uDataTemp & 0xFF);
  623. CmdCode[5] = (byte)(uDataTemp >> 8);
  624. //历史零点1
  625. uDataTemp = Convert.ToUInt16(arrText[rowNum + 3].ToString().Split(',')[1]);
  626. CmdCode[6] = (byte)(uDataTemp & 0xFF);
  627. CmdCode[7] = (byte)(uDataTemp >> 8);
  628. //历史零点2
  629. uDataTemp = Convert.ToUInt16(arrText[rowNum + 4].ToString().Split(',')[1]);
  630. CmdCode[8] = (byte)(uDataTemp & 0xFF);
  631. CmdCode[9] = (byte)(uDataTemp >> 8);
  632. //历史零点3
  633. uDataTemp = Convert.ToUInt16(arrText[rowNum + 5].ToString().Split(',')[1]);
  634. CmdCode[10] = (byte)(uDataTemp & 0xFF);
  635. CmdCode[11] = (byte)(uDataTemp >> 8);
  636. //最大零点
  637. uDataTemp = Convert.ToUInt16(arrText[rowNum + 6].ToString().Split(',')[1]);
  638. CmdCode[12] = (byte)(uDataTemp & 0xFF);
  639. CmdCode[13] = (byte)(uDataTemp >> 8);
  640. //最大转矩
  641. uDataTemp = Convert.ToUInt16(arrText[rowNum + 7].ToString().Split(',')[1]);
  642. CmdCode[14] = (byte)(uDataTemp & 0xFF);
  643. CmdCode[15] = (byte)(uDataTemp >> 8);
  644. //第一阶段加载值
  645. uDataTemp = Convert.ToUInt16(arrText[rowNum + 8].ToString().Split(',')[1]);
  646. CmdCode[16] = (byte)(uDataTemp & 0xFF);
  647. CmdCode[17] = (byte)(uDataTemp >> 8);
  648. //第一阶段采集值
  649. uDataTemp = Convert.ToUInt16(arrText[rowNum + 9].ToString().Split(',')[1]);
  650. CmdCode[18] = (byte)(uDataTemp & 0xFF);
  651. CmdCode[19] = (byte)(uDataTemp >> 8);
  652. //第二阶段加载值
  653. uDataTemp = Convert.ToUInt16(arrText[rowNum + 10].ToString().Split(',')[1]);
  654. CmdCode[20] = (byte)(uDataTemp & 0xFF);
  655. CmdCode[21] = (byte)(uDataTemp >> 8);
  656. //第二阶段采集值
  657. uDataTemp = Convert.ToUInt16(arrText[rowNum + 11].ToString().Split(',')[1]);
  658. CmdCode[22] = (byte)(uDataTemp & 0xFF);
  659. CmdCode[23] = (byte)(uDataTemp >> 8);
  660. //第三阶段加载值
  661. uDataTemp = Convert.ToUInt16(arrText[rowNum + 12].ToString().Split(',')[1]);
  662. CmdCode[24] = (byte)(uDataTemp & 0xFF);
  663. CmdCode[25] = (byte)(uDataTemp >> 8);
  664. //第三阶段采集值
  665. uDataTemp = Convert.ToUInt16(arrText[rowNum + 13].ToString().Split(',')[1]);
  666. CmdCode[26] = (byte)(uDataTemp & 0xFF);
  667. CmdCode[27] = (byte)(uDataTemp >> 8);
  668. //第四阶段加载值
  669. uDataTemp = Convert.ToUInt16(arrText[rowNum + 14].ToString().Split(',')[1]);
  670. CmdCode[28] = (byte)(uDataTemp & 0xFF);
  671. CmdCode[29] = (byte)(uDataTemp >> 8);
  672. //第四阶段采集值
  673. uDataTemp = Convert.ToUInt16(arrText[rowNum + 15].ToString().Split(',')[1]);
  674. CmdCode[30] = (byte)(uDataTemp & 0xFF);
  675. CmdCode[31] = (byte)(uDataTemp >> 8);
  676. //写入文件
  677. file.WriteLine(CmdCode_To_CmdSave(0x751, 0x16, CmdCode));
  678. break;
  679. }
  680. case "[其它传感器参数]":
  681. {
  682. CmdCode[0] = 0x42;
  683. CmdCode[1] = 0x0E;
  684. ushort uDataTemp;
  685. short sDataTemp;
  686. //存储标志
  687. uDataTemp = Convert.ToUInt16(arrText[rowNum + 1].ToString().Split(',')[1]);
  688. CmdCode[2] = (byte)(uDataTemp & 0xFF);
  689. CmdCode[3] = (byte)(uDataTemp >> 8);
  690. //踏频一圈脉冲数
  691. uDataTemp = Convert.ToUInt16(arrText[rowNum + 2].ToString().Split(',')[1]);
  692. CmdCode[4] = (byte)(uDataTemp & 0xFF);
  693. CmdCode[5] = (byte)(uDataTemp >> 8);
  694. //车速一圈脉冲数
  695. uDataTemp = Convert.ToUInt16(arrText[rowNum + 3].ToString().Split(',')[1]);
  696. CmdCode[6] = (byte)(uDataTemp & 0xFF);
  697. CmdCode[7] = (byte)(uDataTemp >> 8);
  698. //写入文件
  699. file.WriteLine(CmdCode_To_CmdSave(0x751, 0x16, CmdCode));
  700. break;
  701. }
  702. case "[助力参数]":
  703. {
  704. CmdCode[0] = 0x44;
  705. CmdCode[1] = 0x50;
  706. ushort uDataTemp;
  707. short sDataTemp;
  708. //存储标志
  709. uDataTemp = Convert.ToUInt16(arrText[rowNum + 1].ToString().Split(',')[1]);
  710. CmdCode[2] = (byte)(uDataTemp & 0xFF);
  711. CmdCode[3] = (byte)(uDataTemp >> 8);
  712. //空
  713. uDataTemp = Convert.ToUInt16(arrText[rowNum + 2].ToString().Split(',')[1]);
  714. CmdCode[4] = (byte)(uDataTemp & 0xFF);
  715. CmdCode[5] = (byte)(uDataTemp >> 8);
  716. //零速启动增益
  717. uDataTemp = Convert.ToUInt16(arrText[rowNum + 3].ToString().Split(',')[1]);
  718. CmdCode[6] = (byte)(uDataTemp & 0xFF);
  719. CmdCode[7] = (byte)(uDataTemp >> 8);
  720. //巡航启动增益
  721. uDataTemp = Convert.ToUInt16(arrText[rowNum + 4].ToString().Split(',')[1]);
  722. CmdCode[8] = (byte)(uDataTemp & 0xFF);
  723. CmdCode[9] = (byte)(uDataTemp >> 8);
  724. //助力启动阈值
  725. uDataTemp = Convert.ToUInt16(arrText[rowNum + 85].ToString().Split(',')[1]);
  726. CmdCode[46] = (byte)(uDataTemp & 0xFF);
  727. CmdCode[47] = (byte)(uDataTemp >> 8);
  728. //助力停止阈值
  729. uDataTemp = Convert.ToUInt16(arrText[rowNum + 86].ToString().Split(',')[1]);
  730. CmdCode[48] = (byte)(uDataTemp & 0xFF);
  731. CmdCode[49] = (byte)(uDataTemp >> 8);
  732. //启动时电流增长阶梯
  733. uDataTemp = Convert.ToUInt16(arrText[rowNum + 87].ToString().Split(',')[1]);
  734. CmdCode[50] = (byte)(uDataTemp & 0xFF);
  735. CmdCode[51] = (byte)(uDataTemp >> 8);
  736. //启动踏频脉冲数
  737. uDataTemp = Convert.ToUInt16(arrText[rowNum + 88].ToString().Split(',')[1]);
  738. CmdCode[52] = (byte)(uDataTemp & 0xFF);
  739. CmdCode[53] = (byte)(uDataTemp >> 8);
  740. //转矩滤波脉冲数
  741. uDataTemp = Convert.ToUInt16(arrText[rowNum + 89].ToString().Split(',')[1]);
  742. CmdCode[54] = (byte)(uDataTemp & 0xFF);
  743. CmdCode[55] = (byte)(uDataTemp >> 8);
  744. //待速转速
  745. uDataTemp = Convert.ToUInt16(arrText[rowNum + 90].ToString().Split(',')[1]);
  746. CmdCode[56] = (byte)(uDataTemp & 0xFF);
  747. CmdCode[57] = (byte)(uDataTemp >> 8);
  748. //待速最大电流
  749. uDataTemp = Convert.ToUInt16(arrText[rowNum + 91].ToString().Split(',')[1]);
  750. CmdCode[58] = (byte)(uDataTemp & 0xFF);
  751. CmdCode[59] = (byte)(uDataTemp >> 8);
  752. //限速启动阈值
  753. uDataTemp = Convert.ToUInt16(arrText[rowNum + 92].ToString().Split(',')[1]);
  754. CmdCode[60] = (byte)(uDataTemp & 0xFF);
  755. CmdCode[61] = (byte)(uDataTemp >> 8);
  756. //限速停止阈值
  757. uDataTemp = Convert.ToUInt16(arrText[rowNum + 93].ToString().Split(',')[1]);
  758. CmdCode[62] = (byte)(uDataTemp & 0xFF);
  759. CmdCode[63] = (byte)(uDataTemp >> 8);
  760. //踏频占比
  761. uDataTemp = Convert.ToUInt16(arrText[rowNum + 94].ToString().Split(',')[1]);
  762. CmdCode[64] = (byte)(uDataTemp & 0xFF);
  763. CmdCode[65] = (byte)(uDataTemp >> 8);
  764. //踏频助力Kp
  765. uDataTemp = Convert.ToUInt16(arrText[rowNum + 95].ToString().Split(',')[1]);
  766. CmdCode[66] = (byte)(uDataTemp & 0xFF);
  767. CmdCode[67] = (byte)(uDataTemp >> 8);
  768. //踏频助力加速限制
  769. sDataTemp = Convert.ToInt16(arrText[rowNum + 96].ToString().Split(',')[1]);
  770. CmdCode[68] = (byte)(sDataTemp & 0xFF);
  771. CmdCode[69] = (byte)(sDataTemp >> 8);
  772. //踏频助力退饱和步进
  773. sDataTemp = Convert.ToInt16(arrText[rowNum + 97].ToString().Split(',')[1]);
  774. CmdCode[70] = (byte)(sDataTemp & 0xFF);
  775. CmdCode[71] = (byte)(sDataTemp >> 8);
  776. //踏频助力电流步进
  777. sDataTemp = Convert.ToInt16(arrText[rowNum + 98].ToString().Split(',')[1]);
  778. CmdCode[72] = (byte)(sDataTemp & 0xFF);
  779. CmdCode[73] = (byte)(sDataTemp >> 8);
  780. //预留1
  781. uDataTemp = Convert.ToUInt16(arrText[rowNum + 99].ToString().Split(',')[1]);
  782. CmdCode[74] = (byte)(uDataTemp & 0xFF);
  783. CmdCode[75] = (byte)(uDataTemp >> 8);
  784. //预留2
  785. uDataTemp = Convert.ToUInt16(arrText[rowNum + 100].ToString().Split(',')[1]);
  786. CmdCode[76] = (byte)(uDataTemp & 0xFF);
  787. CmdCode[77] = (byte)(uDataTemp >> 8);
  788. //预留3
  789. uDataTemp = Convert.ToUInt16(arrText[rowNum + 101].ToString().Split(',')[1]);
  790. CmdCode[78] = (byte)(uDataTemp & 0xFF);
  791. CmdCode[79] = (byte)(uDataTemp >> 8);
  792. //预留4
  793. uDataTemp = Convert.ToUInt16(arrText[rowNum + 102].ToString().Split(',')[1]);
  794. CmdCode[80] = (byte)(uDataTemp & 0xFF);
  795. CmdCode[81] = (byte)(uDataTemp >> 8);
  796. //转矩曲线1-15,踏频曲线1-5,按照前5条同时写力矩和踏频,后9条写力矩和踏频5
  797. for (ushort i = 1; i <= 15; i++)
  798. {
  799. Int32 Data32;
  800. //转矩曲线编号
  801. uDataTemp = (ushort)(i);
  802. CmdCode[10] = (byte)(uDataTemp & 0xFF);
  803. CmdCode[11] = (byte)(uDataTemp >> 8);
  804. //踏频曲线编号
  805. uDataTemp = (ushort)(i <= 5 ? i : 5);
  806. CmdCode[12] = (byte)(uDataTemp & 0xFF);
  807. CmdCode[13] = (byte)(uDataTemp >> 8);
  808. //转矩曲线a
  809. Data32 = Convert.ToInt32(arrText[rowNum + (4 * i + 1)].ToString().Split(',')[1]);
  810. CmdCode[14] = (byte)(Data32 & 0xFF);
  811. CmdCode[15] = (byte)(Data32 >> 8);
  812. CmdCode[16] = (byte)(Data32 >> 16);
  813. CmdCode[17] = (byte)(Data32 >> 24);
  814. //转矩曲线b
  815. Data32 = Convert.ToInt32(arrText[rowNum + (4 * i + 2)].ToString().Split(',')[1]);
  816. CmdCode[18] = (byte)(Data32 & 0xFF);
  817. CmdCode[19] = (byte)(Data32 >> 8);
  818. CmdCode[20] = (byte)(Data32 >> 16);
  819. CmdCode[21] = (byte)(Data32 >> 24);
  820. //转矩曲线c
  821. Data32 = Convert.ToInt32(arrText[rowNum + (4 * i + 3)].ToString().Split(',')[1]);
  822. CmdCode[22] = (byte)(Data32 & 0xFF);
  823. CmdCode[23] = (byte)(Data32 >> 8);
  824. CmdCode[24] = (byte)(Data32 >> 16);
  825. CmdCode[25] = (byte)(Data32 >> 24);
  826. //转矩曲线d
  827. Data32 = Convert.ToInt32(arrText[rowNum + (4 * i + 4)].ToString().Split(',')[1]);
  828. CmdCode[26] = (byte)(Data32 & 0xFF);
  829. CmdCode[27] = (byte)(Data32 >> 8);
  830. CmdCode[28] = (byte)(Data32 >> 16);
  831. CmdCode[29] = (byte)(Data32 >> 24);
  832. if (i <= 5)
  833. {
  834. //踏频曲线a
  835. Data32 = Convert.ToInt32(arrText[rowNum + (4 * i + 61)].ToString().Split(',')[1]);
  836. CmdCode[30] = (byte)(Data32 & 0xFF);
  837. CmdCode[31] = (byte)(Data32 >> 8);
  838. CmdCode[32] = (byte)(Data32 >> 16);
  839. CmdCode[33] = (byte)(Data32 >> 24);
  840. //踏频曲线b
  841. Data32 = Convert.ToInt32(arrText[rowNum + (4 * i + 62)].ToString().Split(',')[1]);
  842. CmdCode[34] = (byte)(Data32 & 0xFF);
  843. CmdCode[35] = (byte)(Data32 >> 8);
  844. CmdCode[36] = (byte)(Data32 >> 16);
  845. CmdCode[37] = (byte)(Data32 >> 24);
  846. //踏频曲线c
  847. Data32 = Convert.ToInt32(arrText[rowNum + (4 * i + 63)].ToString().Split(',')[1]);
  848. CmdCode[38] = (byte)(Data32 & 0xFF);
  849. CmdCode[39] = (byte)(Data32 >> 8);
  850. CmdCode[40] = (byte)(Data32 >> 16);
  851. CmdCode[41] = (byte)(Data32 >> 24);
  852. //踏频曲线d
  853. Data32 = Convert.ToInt32(arrText[rowNum + (4 * i + 64)].ToString().Split(',')[1]);
  854. CmdCode[42] = (byte)(Data32 & 0xFF);
  855. CmdCode[43] = (byte)(Data32 >> 8);
  856. CmdCode[44] = (byte)(Data32 >> 16);
  857. CmdCode[45] = (byte)(Data32 >> 24);
  858. }
  859. //写入文件
  860. file.WriteLine("[曲线" + i.ToString() + "]");
  861. file.WriteLine(CmdCode_To_CmdSave(0x751, 0x16, CmdCode));
  862. }
  863. break;
  864. }
  865. case "[调试参数]":
  866. {
  867. CmdCode[0] = 0x46;
  868. CmdCode[1] = 0x3C;
  869. ushort uDataTemp;
  870. short sDataTemp;
  871. //存储标志
  872. uDataTemp = Convert.ToUInt16(arrText[rowNum + 1].ToString().Split(',')[1]);
  873. CmdCode[2] = (byte)(uDataTemp & 0xFF);
  874. CmdCode[3] = (byte)(uDataTemp >> 8);
  875. //运行模式
  876. uDataTemp = Convert.ToUInt16(arrText[rowNum + 2].ToString().Split(',')[1]);
  877. CmdCode[4] = (byte)(uDataTemp & 0xFF);
  878. CmdCode[5] = (byte)(uDataTemp >> 8);
  879. //位置获取模式
  880. uDataTemp = Convert.ToUInt16(arrText[rowNum + 3].ToString().Split(',')[1]);
  881. CmdCode[6] = (byte)(uDataTemp & 0xFF);
  882. CmdCode[7] = (byte)(uDataTemp >> 8);
  883. //采样模式
  884. uDataTemp = Convert.ToUInt16(arrText[rowNum + 4].ToString().Split(',')[1]);
  885. CmdCode[8] = (byte)(uDataTemp & 0xFF);
  886. CmdCode[9] = (byte)(uDataTemp >> 8);
  887. //旋转方向
  888. uDataTemp = Convert.ToUInt16(arrText[rowNum + 5].ToString().Split(',')[1]);
  889. CmdCode[10] = (byte)(uDataTemp & 0xFF);
  890. CmdCode[11] = (byte)(uDataTemp >> 8);
  891. //定位电流
  892. uDataTemp = Convert.ToUInt16(arrText[rowNum + 6].ToString().Split(',')[1]);
  893. CmdCode[12] = (byte)(uDataTemp & 0xFF);
  894. CmdCode[13] = (byte)(uDataTemp >> 8);
  895. //拖拽电压
  896. uDataTemp = Convert.ToUInt16(arrText[rowNum + 7].ToString().Split(',')[1]);
  897. CmdCode[14] = (byte)(uDataTemp & 0xFF);
  898. CmdCode[15] = (byte)(uDataTemp >> 8);
  899. //拖拽电流
  900. uDataTemp = Convert.ToUInt16(arrText[rowNum + 8].ToString().Split(',')[1]);
  901. CmdCode[16] = (byte)(uDataTemp & 0xFF);
  902. CmdCode[17] = (byte)(uDataTemp >> 8);
  903. //拖拽频率
  904. uDataTemp = Convert.ToUInt16(arrText[rowNum + 9].ToString().Split(',')[1]);
  905. CmdCode[18] = (byte)(uDataTemp & 0xFF);
  906. CmdCode[19] = (byte)(uDataTemp >> 8);
  907. //加速斜率
  908. uDataTemp = Convert.ToUInt16(arrText[rowNum + 10].ToString().Split(',')[1]);
  909. CmdCode[20] = (byte)(uDataTemp & 0xFF);
  910. CmdCode[21] = (byte)(uDataTemp >> 8);
  911. //减速斜率
  912. sDataTemp = Convert.ToInt16(arrText[rowNum + 11].ToString().Split(',')[1]);
  913. CmdCode[22] = (byte)(sDataTemp & 0xFF);
  914. CmdCode[23] = (byte)(sDataTemp >> 8);
  915. //转速环控制带宽
  916. uDataTemp = Convert.ToUInt16(arrText[rowNum + 12].ToString().Split(',')[1]);
  917. CmdCode[24] = (byte)(uDataTemp & 0xFF);
  918. CmdCode[25] = (byte)(uDataTemp >> 8);
  919. //转速环控制m
  920. uDataTemp = Convert.ToUInt16(arrText[rowNum + 13].ToString().Split(',')[1]);
  921. CmdCode[26] = (byte)(uDataTemp & 0xFF);
  922. CmdCode[27] = (byte)(uDataTemp >> 8);
  923. //电流环控制带宽
  924. uDataTemp = Convert.ToUInt16(arrText[rowNum + 14].ToString().Split(',')[1]);
  925. CmdCode[28] = (byte)(uDataTemp & 0xFF);
  926. CmdCode[29] = (byte)(uDataTemp >> 8);
  927. //电流环控制m
  928. uDataTemp = Convert.ToUInt16(arrText[rowNum + 15].ToString().Split(',')[1]);
  929. CmdCode[30] = (byte)(uDataTemp & 0xFF);
  930. CmdCode[31] = (byte)(uDataTemp >> 8);
  931. //磁链观测器带宽
  932. uDataTemp = Convert.ToUInt16(arrText[rowNum + 16].ToString().Split(',')[1]);
  933. CmdCode[32] = (byte)(uDataTemp & 0xFF);
  934. CmdCode[33] = (byte)(uDataTemp >> 8);
  935. //磁链观测器m
  936. uDataTemp = Convert.ToUInt16(arrText[rowNum + 17].ToString().Split(',')[1]);
  937. CmdCode[34] = (byte)(uDataTemp & 0xFF);
  938. CmdCode[35] = (byte)(uDataTemp >> 8);
  939. //锁相环带宽
  940. uDataTemp = Convert.ToUInt16(arrText[rowNum + 18].ToString().Split(',')[1]);
  941. CmdCode[36] = (byte)(uDataTemp & 0xFF);
  942. CmdCode[37] = (byte)(uDataTemp >> 8);
  943. //锁相环m
  944. uDataTemp = Convert.ToUInt16(arrText[rowNum + 19].ToString().Split(',')[1]);
  945. CmdCode[38] = (byte)(uDataTemp & 0xFF);
  946. CmdCode[39] = (byte)(uDataTemp >> 8);
  947. //惯量
  948. uDataTemp = Convert.ToUInt16(arrText[rowNum + 20].ToString().Split(',')[1]);
  949. CmdCode[40] = (byte)(uDataTemp & 0xFF);
  950. CmdCode[41] = (byte)(uDataTemp >> 8);
  951. //PWM最大占空比
  952. uDataTemp = Convert.ToUInt16(arrText[rowNum + 21].ToString().Split(',')[1]);
  953. CmdCode[42] = (byte)(uDataTemp & 0xFF);
  954. CmdCode[43] = (byte)(uDataTemp >> 8);
  955. //PWM七段式切五段式阈值
  956. uDataTemp = Convert.ToUInt16(arrText[rowNum + 22].ToString().Split(',')[1]);
  957. CmdCode[44] = (byte)(uDataTemp & 0xFF);
  958. CmdCode[45] = (byte)(uDataTemp >> 8);
  959. //功率限幅
  960. uDataTemp = Convert.ToUInt16(arrText[rowNum + 23].ToString().Split(',')[1]);
  961. CmdCode[46] = (byte)(uDataTemp & 0xFF);
  962. CmdCode[47] = (byte)(uDataTemp >> 8);
  963. //功率限幅Error
  964. uDataTemp = Convert.ToUInt16(arrText[rowNum + 24].ToString().Split(',')[1]);
  965. CmdCode[48] = (byte)(uDataTemp & 0xFF);
  966. CmdCode[49] = (byte)(uDataTemp >> 8);
  967. //功率限幅Kp
  968. uDataTemp = Convert.ToUInt16(arrText[rowNum + 25].ToString().Split(',')[1]);
  969. CmdCode[50] = (byte)(uDataTemp & 0xFF);
  970. CmdCode[51] = (byte)(uDataTemp >> 8);
  971. //功率限幅Ki
  972. uDataTemp = Convert.ToUInt16(arrText[rowNum + 26].ToString().Split(',')[1]);
  973. CmdCode[52] = (byte)(uDataTemp & 0xFF);
  974. CmdCode[53] = (byte)(uDataTemp >> 8);
  975. //预留1
  976. uDataTemp = Convert.ToUInt16(arrText[rowNum + 27].ToString().Split(',')[1]);
  977. CmdCode[54] = (byte)(uDataTemp & 0xFF);
  978. CmdCode[55] = (byte)(uDataTemp >> 8);
  979. //预留2
  980. uDataTemp = Convert.ToUInt16(arrText[rowNum + 28].ToString().Split(',')[1]);
  981. CmdCode[56] = (byte)(uDataTemp & 0xFF);
  982. CmdCode[57] = (byte)(uDataTemp >> 8);
  983. //预留3
  984. uDataTemp = Convert.ToUInt16(arrText[rowNum + 29].ToString().Split(',')[1]);
  985. CmdCode[58] = (byte)(uDataTemp & 0xFF);
  986. CmdCode[59] = (byte)(uDataTemp >> 8);
  987. //预留4
  988. uDataTemp = Convert.ToUInt16(arrText[rowNum + 30].ToString().Split(',')[1]);
  989. CmdCode[60] = (byte)(uDataTemp & 0xFF);
  990. CmdCode[61] = (byte)(uDataTemp >> 8);
  991. //写入文件
  992. file.WriteLine(CmdCode_To_CmdSave(0x751, 0x16, CmdCode));
  993. break;
  994. }
  995. default: break;
  996. }
  997. }
  998. }
  999. }
  1000. }
  1001. }
  1002. catch (Exception e)
  1003. {
  1004. Console.WriteLine(e);
  1005. Console.WriteLine("转换失败,输入任意键结束!");
  1006. Console.ReadKey();
  1007. return;
  1008. }
  1009. } while (false);
  1010. }
  1011. //输入任意字符退出
  1012. Console.WriteLine("转换完成,输入任意键结束!");
  1013. //Console.ReadKey();
  1014. }
  1015. }
  1016. }