Program.cs 94 KB

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