PLCManagementClass.cs 44 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156
  1. using CCDCount.DLL.AlarmTools;
  2. using CCDCount.DLL.Tools;
  3. using CCDCount.MODEL.PlcModel;
  4. using System;
  5. using System.Linq;
  6. using System.Runtime.Remoting.Messaging;
  7. using System.Security.Cryptography;
  8. using System.Threading.Tasks;
  9. namespace CCDCount.DLL
  10. {
  11. public class PLCManagementClass
  12. {
  13. private bool isConnect = false;
  14. public bool IsConnect
  15. {
  16. get
  17. {
  18. return isConnect?modbusTcpClient.IsTcpClientConnected():isConnect;
  19. }
  20. }
  21. public ModbusTcpClient modbusTcpClient = new ModbusTcpClient();
  22. public PLCManagementClass(string ipAddress)
  23. {
  24. ConnectModbus(ipAddress);
  25. }
  26. public void ConnectModbus(string ipAddress)
  27. {
  28. if (!modbusTcpClient.Connect(ipAddress))
  29. {
  30. //FaultLog.RecordErrorMessage($"Modbus通讯连接失败,目标IP:{ipAddress}");
  31. SystemAlarm.AlarmAlert(AlarmMessageList.PLC通讯连接失败, $"Modbus通讯连接失败,目标IP:{ipAddress}", "DLL:PLCManagementClass-ConnectModbus");
  32. isConnect = false;
  33. return;
  34. }
  35. isConnect = true;
  36. SystemAlarm.AlarmCancel(AlarmMessageList.PLC通讯连接失败);
  37. }
  38. /****************************************************动作操作*****************************************************************/
  39. ushort Mask1 = (ushort)(1 << 0);
  40. ushort Mask2 = (ushort)(1 << 8);
  41. /// <summary>
  42. /// 切换闸门点动
  43. /// </summary>
  44. /// <param name="value">闸门编号</param>
  45. public bool SwitchValveManualControl(int value)
  46. {
  47. bool result = false;
  48. if (value >= 0 && value <= 7)
  49. {
  50. var readmessage = modbusTcpClient.ReadHoldingRegisters(1, 400, 4, out ushort[] returnvalue);
  51. ushort sendmessage = returnvalue[value / 2];
  52. if (value % 2 == 0)
  53. {
  54. sendmessage = (ushort)(sendmessage ^ Mask1);
  55. }
  56. else
  57. {
  58. sendmessage = (ushort)(sendmessage ^ Mask2);
  59. }
  60. result = modbusTcpClient.WriteSingleRegister(slaveId: 1, registerAddress: (ushort)(400 + (value / 2)), value: sendmessage);
  61. }
  62. return result;
  63. }
  64. /// <summary>
  65. /// 传动轴运动切换
  66. /// </summary>
  67. /// <returns></returns>
  68. public bool SwitchScrewManualControl()
  69. {
  70. bool result = false;
  71. var readMessage = modbusTcpClient.ReadHoldingRegisters(1, 501, 1, out ushort[] returnvalue);
  72. ushort sendMessage = (ushort)(returnvalue[0] ^ Mask1);
  73. result = modbusTcpClient.WriteSingleRegister(slaveId: 1, registerAddress: 501, value: sendMessage);
  74. return result;
  75. }
  76. /// <summary>
  77. /// 传动轴回原点
  78. /// </summary>
  79. /// <returns></returns>
  80. public bool ScrewHomeToTrue()
  81. {
  82. bool result = modbusTcpClient.WriteSingleRegister(slaveId: 1, registerAddress: 505, value: 1);
  83. return result;
  84. }
  85. public bool ScrewJogFwdToTrue()
  86. {
  87. bool result = modbusTcpClient.WriteSingleRegister(slaveId: 1, registerAddress: 509, value: 1);
  88. return result;
  89. }
  90. public bool ScrewJogFwdToFalse()
  91. {
  92. bool result = modbusTcpClient.WriteSingleRegister(slaveId: 1, registerAddress: 509, value: 0);
  93. return result;
  94. }
  95. public bool ScrewJogRevToTrue()
  96. {
  97. bool result = modbusTcpClient.WriteSingleRegister(slaveId: 1, registerAddress: 513, value: 1);
  98. return result;
  99. }
  100. public bool ScrewJogRevToFalse()
  101. {
  102. bool result = modbusTcpClient.WriteSingleRegister(slaveId: 1, registerAddress: 513, value: 0);
  103. return result;
  104. }
  105. public bool FillingValveManualOpenToTrue()
  106. {
  107. bool result = modbusTcpClient.WriteSingleRegister(slaveId: 1, registerAddress: 517, value: 1);
  108. return result;
  109. }
  110. public bool FillingValveManualOpenToFalse()
  111. {
  112. bool result = modbusTcpClient.WriteSingleRegister(slaveId: 1, registerAddress: 517, value: 0);
  113. return result;
  114. }
  115. public bool FillingValveManualCloseToTrue()
  116. {
  117. bool result = modbusTcpClient.WriteSingleRegister(slaveId: 1, registerAddress: 521, value: 1);
  118. return result;
  119. }
  120. public bool FillingValveManualCloseToFalse()
  121. {
  122. bool result = modbusTcpClient.WriteSingleRegister(slaveId: 1, registerAddress: 521, value: 0);
  123. return result;
  124. }
  125. public bool FillingValveManualCache()
  126. {
  127. bool result = modbusTcpClient.WriteSingleRegister(slaveId: 1, registerAddress: 525, value: 1);
  128. return result;
  129. }
  130. public bool FillingValveJogFwdToTrue()
  131. {
  132. bool result = modbusTcpClient.WriteSingleRegister(slaveId: 1, registerAddress: 529, value: 1);
  133. return result;
  134. }
  135. public bool FillingValveJogFwdToFalse()
  136. {
  137. bool result = modbusTcpClient.WriteSingleRegister(slaveId: 1, registerAddress: 529, value: 0);
  138. return result;
  139. }
  140. public bool FillingValveJogRevToTrue()
  141. {
  142. bool result = modbusTcpClient.WriteSingleRegister(slaveId: 1, registerAddress: 533, value: 1);
  143. return result;
  144. }
  145. public bool FillingValveJogRevToFalse()
  146. {
  147. bool result = modbusTcpClient.WriteSingleRegister(slaveId: 1, registerAddress: 533, value: 0);
  148. return result;
  149. }
  150. public bool FillingValveHomeToTrue()
  151. {
  152. bool result = modbusTcpClient.WriteSingleRegister(slaveId: 1, registerAddress: 537, value: 1);
  153. return result;
  154. }
  155. public bool BeltsJogToTrue()
  156. {
  157. bool result = modbusTcpClient.WriteSingleRegister(slaveId: 1, registerAddress: 541, value: 1);
  158. return result;
  159. }
  160. public bool BeltsJogToFalse()
  161. {
  162. bool result = modbusTcpClient.WriteSingleRegister(slaveId: 1, registerAddress: 541, value: 0);
  163. return result;
  164. }
  165. public bool ShakeTableJogToTrue()
  166. {
  167. bool result = modbusTcpClient.WriteSingleRegister(slaveId: 1, registerAddress: 545, value: 1);
  168. return result;
  169. }
  170. public bool ShakeTableJogToFalse()
  171. {
  172. bool result = modbusTcpClient.WriteSingleRegister(slaveId: 1, registerAddress: 545, value: 0);
  173. return result;
  174. }
  175. /// <summary>
  176. /// 启动设置为True
  177. /// </summary>
  178. public bool MachineRunToTrue()
  179. {
  180. bool result = false;
  181. modbusTcpClient.ReadHoldingRegisters(slaveId: 1, startAddress: 1014, numRegisters: 1, out ushort[] returnValue);
  182. if (returnValue != null)
  183. {
  184. ushort SendMessage = returnValue[0];
  185. SendMessage |= (ushort)(1 << 0);
  186. result = modbusTcpClient.WriteSingleRegister(slaveId: 1, registerAddress: 1014, value: SendMessage);
  187. }
  188. return result;
  189. }
  190. /// <summary>
  191. /// 启动设置为False
  192. /// </summary>
  193. public bool MachineRunToFalse()
  194. {
  195. bool result = false;
  196. modbusTcpClient.ReadHoldingRegisters(slaveId: 1, startAddress: 1014, numRegisters: 1, out ushort[] returnValue);
  197. if (returnValue != null)
  198. {
  199. ushort SendMessage = returnValue[0];
  200. SendMessage |= (ushort)(0 << 0);
  201. result = modbusTcpClient.WriteSingleRegister(slaveId: 1, registerAddress: 1014, value: SendMessage);
  202. }
  203. return result;
  204. }
  205. /// <summary>
  206. /// 停止设置为True
  207. /// </summary>
  208. public bool MachineStopToTrue()
  209. {
  210. bool result = false;
  211. modbusTcpClient.ReadHoldingRegisters(slaveId: 1, startAddress: 1014, numRegisters: 1, out ushort[] returnValue);
  212. if (returnValue != null)
  213. {
  214. ushort SendMessage = returnValue[0];
  215. SendMessage |= (ushort)(1 << 1);
  216. result = modbusTcpClient.WriteSingleRegister(slaveId: 1, registerAddress: 1014, value: SendMessage);
  217. }
  218. return result;
  219. }
  220. /// <summary>
  221. /// 停止设置为False
  222. /// </summary>
  223. public bool MachineStopToFalse()
  224. {
  225. bool result = false;
  226. modbusTcpClient.ReadHoldingRegisters(slaveId: 1, startAddress: 1014, numRegisters: 1, out ushort[] returnValue);
  227. if (returnValue != null)
  228. {
  229. ushort SendMessage = returnValue[0];
  230. SendMessage |= (ushort)(0 << 1);
  231. result = modbusTcpClient.WriteSingleRegister(slaveId: 1, registerAddress: 1014, value: SendMessage);
  232. }
  233. return result;
  234. }
  235. /// <summary>
  236. /// 设备上升
  237. /// </summary>
  238. public bool MachineManualUpToTrue()
  239. {
  240. bool result = false;
  241. modbusTcpClient.ReadHoldingRegisters(slaveId: 1, startAddress: 1014, numRegisters: 1, out ushort[] returnValue);
  242. if (returnValue != null)
  243. {
  244. ushort SendMessage = returnValue[0];
  245. SendMessage |= (ushort)(1 << 2);
  246. result = modbusTcpClient.WriteSingleRegister(slaveId: 1, registerAddress: 1014, value: SendMessage);
  247. }
  248. return result;
  249. }
  250. public bool MachineManualUpToFalse()
  251. {
  252. bool result = false;
  253. modbusTcpClient.ReadHoldingRegisters(slaveId: 1, startAddress: 1014, numRegisters: 1, out ushort[] returnValue);
  254. if (returnValue != null)
  255. {
  256. ushort mask = 0b1111111111111011;
  257. ushort SendMessage = (ushort)(returnValue[0] & mask);
  258. result = modbusTcpClient.WriteSingleRegister(slaveId: 1, registerAddress: 1014, value: SendMessage);
  259. }
  260. return result;
  261. }
  262. /// <summary>
  263. /// 设备下降
  264. /// </summary>
  265. public bool MachineManualDownToTrue()
  266. {
  267. bool result = false;
  268. modbusTcpClient.ReadHoldingRegisters(slaveId: 1, startAddress: 1014, numRegisters: 1, out ushort[] returnValue);
  269. if (returnValue != null)
  270. {
  271. ushort SendMessage = returnValue[0];
  272. SendMessage |= (ushort)(1 << 3);
  273. result = modbusTcpClient.WriteSingleRegister(slaveId: 1, registerAddress: 1014, value: SendMessage);
  274. }
  275. return result;
  276. }
  277. public bool MachineManualDownToFalse()
  278. {
  279. bool result = false;
  280. modbusTcpClient.ReadHoldingRegisters(slaveId: 1, startAddress: 1014, numRegisters: 1, out ushort[] returnValue);
  281. if (returnValue != null)
  282. {
  283. ushort mask = 0b1111111111110111;
  284. ushort SendMessage = (ushort)(returnValue[0] & mask);
  285. result = modbusTcpClient.WriteSingleRegister(slaveId: 1, registerAddress: 1014, value: SendMessage);
  286. }
  287. return result;
  288. }
  289. /// <summary>
  290. /// 漏斗状态切换
  291. /// </summary>
  292. /// <returns></returns>
  293. public bool SwitchFunnelValveManualControl()
  294. {
  295. bool result = false;
  296. ushort mask = (ushort)(1 << 4);
  297. var readMessage = modbusTcpClient.ReadHoldingRegisters(1, 1014, 1, out ushort[] returnvalue);
  298. ushort sendMessage = (ushort)(returnvalue[0] ^ mask);
  299. result = modbusTcpClient.WriteSingleRegister(slaveId: 1, registerAddress: 1014, value: sendMessage);
  300. return result;
  301. }
  302. /// <summary>
  303. /// 传送带运行状态切换
  304. /// </summary>
  305. /// <returns></returns>
  306. public bool SwitchMachineManualControl()
  307. {
  308. bool result = false;
  309. ushort mask = (ushort)(1 << 5);
  310. var readMessage = modbusTcpClient.ReadHoldingRegisters(1, 1014, 1, out ushort[] returnvalue);
  311. ushort sendMessage = (ushort)(returnvalue[0] ^ mask);
  312. result = modbusTcpClient.WriteSingleRegister(slaveId: 1, registerAddress: 1014, value: sendMessage);
  313. return result;
  314. }
  315. /// <summary>
  316. /// 切换气锁状态
  317. /// </summary>
  318. /// <returns></returns>
  319. public bool SwitchMachineAirLockValve()
  320. {
  321. bool result = false;
  322. ushort mask = (ushort)(1 << 6);
  323. var readMessage = modbusTcpClient.ReadHoldingRegisters(1, 1014, 1, out ushort[] returnvalue);
  324. ushort sendMessage = (ushort)(returnvalue[0] ^ mask);
  325. result = modbusTcpClient.WriteSingleRegister(slaveId: 1, registerAddress: 1014, value: sendMessage);
  326. return result;
  327. }
  328. /// <summary>
  329. /// 震台手动开关
  330. /// </summary>
  331. /// <returns></returns>
  332. public bool SwitchShakeTable_Test()
  333. {
  334. bool result = false;
  335. ushort mask = (ushort)(1 << 7);
  336. var readMessage = modbusTcpClient.ReadHoldingRegisters(1, 1014, 1, out ushort[] returnvalue);
  337. ushort sendMessage = (ushort)(returnvalue[0] ^ mask);
  338. result = modbusTcpClient.WriteSingleRegister(slaveId: 1, registerAddress: 1014, value: sendMessage);
  339. return result;
  340. }
  341. /// <summary>
  342. /// 数据清零
  343. /// </summary>
  344. public bool DataResetToTrue()
  345. {
  346. bool result = false;
  347. modbusTcpClient.ReadHoldingRegisters(slaveId: 1, startAddress: 1014, numRegisters: 1, out ushort[] returnValue);
  348. if (returnValue != null)
  349. {
  350. ushort SendMessage = returnValue[0];
  351. SendMessage |= (ushort)(1 << 8);
  352. result = modbusTcpClient.WriteSingleRegister(slaveId: 1, registerAddress: 1014, value: SendMessage);
  353. }
  354. return result;
  355. }
  356. public bool DataResetToFalse()
  357. {
  358. bool result = false;
  359. modbusTcpClient.ReadHoldingRegisters(slaveId: 1, startAddress: 1014, numRegisters: 1, out ushort[] returnValue);
  360. if (returnValue != null)
  361. {
  362. ushort mask = 0b1111111011111111;
  363. ushort SendMessage = (ushort)(returnValue[0] & mask);
  364. result = modbusTcpClient.WriteSingleRegister(slaveId: 1, registerAddress: 1014, value: SendMessage);
  365. }
  366. return result;
  367. }
  368. /*********************************************参数操作***************************************************************/
  369. /// <summary>
  370. /// 写入罐装模式
  371. /// </summary>
  372. /// <param name="Value"></param>
  373. /// <returns></returns>
  374. public bool WriteFillingMode(ushort Value)
  375. {
  376. bool result = modbusTcpClient.WriteSingleRegister(slaveId: 1, registerAddress: 2000, value: Value);
  377. return result;
  378. }
  379. /// <summary>
  380. /// 写入传送带速度
  381. /// </summary>
  382. /// <param name="Value"></param>
  383. /// <returns></returns>
  384. public bool WriteBeltsSpeed(ushort Value)
  385. {
  386. bool result = modbusTcpClient.WriteSingleRegister(slaveId: 1, registerAddress: 2008, value: Value);
  387. return result;
  388. }
  389. /// <summary>
  390. /// 写入罐装料筒震台高速值
  391. /// </summary>
  392. /// <param name="Value"></param>
  393. public bool WriteShakeTable1H_FillingSpeed(ushort Value)
  394. {
  395. return modbusTcpClient.WriteSingleRegister(1, 3000, Value);
  396. }
  397. /// <summary>
  398. /// 写入罐装过滤震台高速值
  399. /// </summary>
  400. /// <param name="Value"></param>
  401. public bool WriteShakeTable2H_FillingSpeed(ushort Value)
  402. {
  403. return modbusTcpClient.WriteSingleRegister(1, 3024, Value);
  404. }
  405. /// <summary>
  406. /// 写入罐装计数震台高速值
  407. /// </summary>
  408. /// <param name="Value"></param>
  409. public bool WriteShakeTable3H_FillingSpeed(ushort Value)
  410. {
  411. return modbusTcpClient.WriteSingleRegister(1, 3048, Value);
  412. }
  413. /// <summary>
  414. /// 写入罐装料筒震台减速值
  415. /// </summary>
  416. /// <param name="Value"></param>
  417. public bool WriteShakeTable1M_FillingSpeed(ushort Value)
  418. {
  419. return modbusTcpClient.WriteSingleRegister(1, 3008, Value);
  420. }
  421. /// <summary>
  422. /// 写入罐装过滤震台减速值
  423. /// </summary>
  424. /// <param name="Value"></param>
  425. public bool WriteShakeTable2M_FillingSpeed(ushort Value)
  426. {
  427. return modbusTcpClient.WriteSingleRegister(1, 3032, Value);
  428. }
  429. /// <summary>
  430. /// 写入罐装计数震台减速值
  431. /// </summary>
  432. /// <param name="Value"></param>
  433. public bool WriteShakeTable3M_FillingSpeed(ushort Value)
  434. {
  435. return modbusTcpClient.WriteSingleRegister(1, 3056, Value);
  436. }
  437. /// <summary>
  438. /// 写入罐装料筒震台低速值
  439. /// </summary>
  440. /// <param name="Value"></param>
  441. public bool WriteShakeTable1L_FillingSpeed(ushort Value)
  442. {
  443. return modbusTcpClient.WriteSingleRegister(1, 3016, Value);
  444. }
  445. /// <summary>
  446. /// 写入罐装过滤震台低速值
  447. /// </summary>
  448. /// <param name="Value"></param>
  449. public bool WriteShakeTable2L_FillingSpeed(ushort Value)
  450. {
  451. return modbusTcpClient.WriteSingleRegister(1, 3040, Value);
  452. }
  453. /// <summary>
  454. /// 写入罐装计数震台低速值
  455. /// </summary>
  456. /// <param name="Value"></param>
  457. public bool WriteShakeTable3L_FillingSpeed(ushort Value)
  458. {
  459. return modbusTcpClient.WriteSingleRegister(1, 3064, Value);
  460. }
  461. /// <summary>
  462. /// 写入缓存料筒震台高速值
  463. /// </summary>
  464. /// <param name="Value"></param>
  465. public bool WriteShakeTable1H_CacheSpeed(ushort Value)
  466. {
  467. return modbusTcpClient.WriteSingleRegister(1, 3072, Value);
  468. }
  469. /// <summary>
  470. /// 写入缓存过滤震台高速值
  471. /// </summary>
  472. /// <param name="Value"></param>
  473. public bool WriteShakeTable2H_CacheSpeed(ushort Value)
  474. {
  475. return modbusTcpClient.WriteSingleRegister(1, 3096, Value);
  476. }
  477. /// <summary>
  478. /// 写入缓存计数震台高速值
  479. /// </summary>
  480. /// <param name="Value"></param>
  481. public bool WriteShakeTable3H_CacheSpeed(ushort Value)
  482. {
  483. return modbusTcpClient.WriteSingleRegister(1, 3120, Value);
  484. }
  485. /// <summary>
  486. /// 写入缓存料筒震台减速值
  487. /// </summary>
  488. /// <param name="Value"></param>
  489. public bool WriteShakeTable1M_CacheSpeed(ushort Value)
  490. {
  491. return modbusTcpClient.WriteSingleRegister(1, 3080, Value);
  492. }
  493. /// <summary>
  494. /// 写入缓存过滤震台减速值
  495. /// </summary>
  496. /// <param name="Value"></param>
  497. public bool WriteShakeTable2M_CacheSpeed(ushort Value)
  498. {
  499. return modbusTcpClient.WriteSingleRegister(1, 3104, Value);
  500. }
  501. /// <summary>
  502. /// 写入缓存计数震台减速值
  503. /// </summary>
  504. /// <param name="Value"></param>
  505. public bool WriteShakeTable3M_CacheSpeed(ushort Value)
  506. {
  507. return modbusTcpClient.WriteSingleRegister(1, 3128, Value);
  508. }
  509. /// <summary>
  510. /// 写入缓存料筒震台低速值
  511. /// </summary>
  512. /// <param name="Value"></param>
  513. public bool WriteShakeTable1L_CacheSpeed(ushort Value)
  514. {
  515. return modbusTcpClient.WriteSingleRegister(1, 3088, Value);
  516. }
  517. /// <summary>
  518. /// 写入缓存过滤震台低速值
  519. /// </summary>
  520. /// <param name="Value"></param>
  521. public bool WriteShakeTable2L_CacheSpeed(ushort Value)
  522. {
  523. return modbusTcpClient.WriteSingleRegister(1, 3112, Value);
  524. }
  525. /// <summary>
  526. /// 写入缓存计数震台低速值
  527. /// </summary>
  528. /// <param name="Value"></param>
  529. public bool WriteShakeTable3L_CacheSpeed(ushort Value)
  530. {
  531. return modbusTcpClient.WriteSingleRegister(1, 3136, Value);
  532. }
  533. /// <summary>
  534. /// 写入罐装高速区间
  535. /// </summary>
  536. /// <param name="Value"></param>
  537. public bool WriteFillingH_SpeedRatio(ushort Value)
  538. {
  539. return modbusTcpClient.WriteSingleRegister(1, 3144, Value);
  540. }
  541. /// <summary>
  542. /// 写入罐装减速区间
  543. /// </summary>
  544. /// <param name="Value"></param>
  545. public bool WriteFillingM_SpeedRatio(ushort Value)
  546. {
  547. return modbusTcpClient.WriteSingleRegister(1, 3152, Value);
  548. }
  549. /// <summary>
  550. /// 写入罐装低速区间
  551. /// </summary>
  552. /// <param name="Value"></param>
  553. public bool WriteFillingL_SpeedRatio(ushort Value)
  554. {
  555. return modbusTcpClient.WriteSingleRegister(1, 3160, Value);
  556. }
  557. /// <summary>
  558. /// 写入缓存高速区间
  559. /// </summary>
  560. /// <param name="Value"></param>
  561. public bool WriteCacheH_SpeedRatio(ushort Value)
  562. {
  563. return modbusTcpClient.WriteSingleRegister(1, 3168, Value);
  564. }
  565. /// <summary>
  566. /// 写入缓存减速区间
  567. /// </summary>
  568. /// <param name="Value"></param>
  569. public bool WriteCacheM_SpeedRatio(ushort Value)
  570. {
  571. return modbusTcpClient.WriteSingleRegister(1, 3176, Value);
  572. }
  573. /// <summary>
  574. /// 写入缓存低速区间
  575. /// </summary>
  576. /// <param name="Value"></param>
  577. public bool WriteCacheL_SpeedRatio(ushort Value)
  578. {
  579. bool result = modbusTcpClient.WriteSingleRegister(1, 3184, Value);
  580. return result;
  581. }
  582. /// <summary>
  583. /// 写入传动轴点动速度
  584. /// </summary>
  585. /// <param name="Value"></param>
  586. public bool WriteScrewJogSpeed(double Value)
  587. {
  588. bool result = modbusTcpClient.WriteSingleLReal(slaveId: 1, startAddress: 3192, value: Value);
  589. return result;
  590. }
  591. /// <summary>
  592. /// 写入进瓶速度
  593. /// </summary>
  594. /// <param name="Value"></param>
  595. /// <returns></returns>
  596. public bool WriteInBottleSpeed(double Value)
  597. {
  598. return modbusTcpClient.WriteSingleLReal(slaveId: 1, startAddress: 3224, value: Value);
  599. }
  600. /// <summary>
  601. /// 写入中转阀打开速度
  602. /// </summary>
  603. /// <param name="Value"></param>
  604. public bool WriteBottlePosSpeed(double Value)
  605. {
  606. return modbusTcpClient.WriteSingleLReal(1, 3256, Value);
  607. }
  608. /// <summary>
  609. /// 写入中转阀打开位置
  610. /// </summary>
  611. public bool WriteBottlePosPosition(double Value)
  612. {
  613. return modbusTcpClient.WriteSingleLReal(1, 3288, Value);
  614. }
  615. /// <summary>
  616. /// 写入中转阀打开速度
  617. /// </summary>
  618. /// <param name="Value"></param>
  619. public bool WriteFillingValveOpenSpeed(double Value)
  620. {
  621. return modbusTcpClient.WriteSingleLReal(1, 3320, Value);
  622. }
  623. /// <summary>
  624. /// 写入中转阀打开位置
  625. /// </summary>
  626. public bool WriteFillingValveOpenPosition(double Value)
  627. {
  628. return modbusTcpClient.WriteSingleLReal(1, 3352, Value);
  629. }
  630. /// <summary>
  631. /// 写入中转阀关闭速度
  632. /// </summary>
  633. /// <param name="Value"></param>
  634. public bool WriteFillingValveCloseSpeed(double Value)
  635. {
  636. return modbusTcpClient.WriteSingleLReal(1, 3384, Value);
  637. }
  638. /// <summary>
  639. /// 写入中转阀关位置
  640. /// </summary>
  641. /// <param name="Value"></param>
  642. public bool WriteFillingValveClosePosition(double Value)
  643. {
  644. return modbusTcpClient.WriteSingleLReal(1, 3416, Value);
  645. }
  646. /// <summary>
  647. /// 写入中转阀缓存速度
  648. /// </summary>
  649. /// <param name="Value"></param>
  650. public bool WriteFillingValveCacheSpeed(double Value)
  651. {
  652. return modbusTcpClient.WriteSingleLReal(1, 3448, Value);
  653. }
  654. /// <summary>
  655. /// 写入中转阀缓存位置
  656. /// </summary>
  657. /// <param name="Value"></param>
  658. /// <returns></returns>
  659. public bool WriteFillingValveCachePosition(double Value)
  660. {
  661. return modbusTcpClient.WriteSingleLReal(1, 3480, Value);
  662. }
  663. /// <summary>
  664. /// 写入中转阀点动速度
  665. /// </summary>
  666. /// <param name="Value"></param>
  667. /// <returns></returns>
  668. public bool WriteFillingValveJogSpeed(double Value)
  669. {
  670. return modbusTcpClient.WriteSingleLReal(1, 3512, Value);
  671. }
  672. /// <summary>
  673. /// 写入漏斗下降延时
  674. /// </summary>
  675. /// <param name="Value"></param>
  676. /// <returns></returns>
  677. public bool WriteMachineDelayFunneDownTime(ushort Value)
  678. {
  679. return modbusTcpClient.WriteSingleRegister(1, 3544, Value);
  680. }
  681. /// <summary>
  682. /// 写入漏斗上升延时
  683. /// </summary>
  684. /// <param name="Value"></param>
  685. /// <returns></returns>
  686. public bool WriteMachineDelayFunneUpTime(ushort Value)
  687. {
  688. return modbusTcpClient.WriteSingleRegister(1, 3560, Value);
  689. }
  690. /// <summary>
  691. /// 写入中转阀开启延时
  692. /// </summary>
  693. /// <param name="Value"></param>
  694. /// <returns></returns>
  695. public bool WriteMachineDelayFillingValveOpenTime(ushort Value)
  696. {
  697. return modbusTcpClient.WriteSingleRegister(1, 3576, Value);
  698. }
  699. /// <summary>
  700. /// 写入中转阀关闭延时
  701. /// </summary>
  702. /// <param name="Value"></param>
  703. /// <returns></returns>
  704. public bool WriteMachineDelayFillingValveCloseTime(ushort Value)
  705. {
  706. return modbusTcpClient.WriteSingleRegister(1, 3592, Value);
  707. }
  708. /// <summary>
  709. /// 写入进瓶延时
  710. /// </summary>
  711. /// <param name="Value"></param>
  712. /// <returns></returns>
  713. public bool WriteMachineDelayInBottleTime(ushort Value)
  714. {
  715. return modbusTcpClient.WriteSingleRegister(1, 3608, Value);
  716. }
  717. /// <summary>
  718. /// 写入空气阀开启延时
  719. /// </summary>
  720. public bool WriteValveDelytime(ushort Value)
  721. {
  722. return modbusTcpClient.WriteSingleRegister(1, 3624, Value);
  723. }
  724. /// <summary>
  725. /// 写入缺瓶检测时间
  726. /// </summary>
  727. public bool WriteMissingDelaytime(ushort Value)
  728. {
  729. return modbusTcpClient.WriteSingleRegister(1, 3642, Value);
  730. }
  731. /// <summary>
  732. /// 写入堵瓶检测时间
  733. /// </summary>
  734. /// <param name="Value"></param>
  735. /// <returns></returns>
  736. public bool WriteBottleJamDelaytime(ushort Value)
  737. {
  738. return modbusTcpClient.WriteSingleRegister(1, 3644, Value);
  739. }
  740. /// <summary>
  741. /// 写入剔废气缸延时时间
  742. /// </summary>
  743. /// <param name="Value"></param>
  744. /// <returns></returns>
  745. public bool WriteEliminateCylinderDelayTime(ushort Value)
  746. {
  747. return modbusTcpClient.WriteSingleRegister(1, 3658, Value);
  748. }
  749. /// <summary>
  750. /// 写入剔废气缸保持时间
  751. /// </summary>
  752. /// <param name="Value"></param>
  753. /// <returns></returns>
  754. public bool WriteEliminateCylinderHoldingTime(ushort Value)
  755. {
  756. return modbusTcpClient.WriteSingleRegister(1, 3660, Value);
  757. }
  758. /// <summary>
  759. /// 写入料筒震台测试速度
  760. /// </summary>
  761. /// <param name="Value"></param>
  762. /// <returns></returns>
  763. public bool WriteShakeTable1_TestSpeed(ushort Value)
  764. {
  765. return modbusTcpClient.WriteSingleRegister(1, 3652, Value);
  766. }
  767. /// <summary>
  768. /// 写入料筒震台测试速度
  769. /// </summary>
  770. /// <param name="Value"></param>
  771. /// <returns></returns>
  772. public bool WriteShakeTable2_TestSpeed(ushort Value)
  773. {
  774. return modbusTcpClient.WriteSingleRegister(1, 3654, Value);
  775. }
  776. /// <summary>
  777. /// 写入料筒震台测试速度
  778. /// </summary>
  779. /// <param name="Value"></param>
  780. /// <returns></returns>
  781. public bool WriteShakeTable3_TestSpeed(ushort Value)
  782. {
  783. return modbusTcpClient.WriteSingleRegister(1, 3656, Value);
  784. }
  785. /// <summary>
  786. /// 写入罐装设定值
  787. /// </summary>
  788. /// <param name="Value"></param>
  789. public bool WriteBottValueSet(UInt16 Value)
  790. {
  791. return modbusTcpClient.WriteSingleRegister(1, 2504, Value);
  792. }
  793. /// <summary>
  794. /// 写入缓存停机值
  795. /// </summary>
  796. /// <param name="Value"></param>
  797. public bool WriteCacheShutdownValue(ushort Value)
  798. {
  799. return modbusTcpClient.WriteSingleRegister(1, 2505, Value);
  800. }
  801. /// <summary>
  802. /// 读取所有参数(参数数据表)
  803. /// </summary>
  804. public PlcParaModelClass ReadAllPara()
  805. {
  806. PlcParaModelClass result = null;
  807. var results = modbusTcpClient.ReadHoldingRegisters(slaveId: 1, startAddress: 3000, numRegisters: 120, out ushort[] ReturnValue);
  808. if (!results || ReturnValue == null) return null;
  809. result = new PlcParaModelClass()
  810. {
  811. ShakeTable1H_FillingSpeed = ReturnValue[0],
  812. ShakeTable2H_FillingSpeed = ReturnValue[24],
  813. ShakeTable3H_FillingSpeed = ReturnValue[48],
  814. ShakeTable1M_FillingSpeed = ReturnValue[8],
  815. ShakeTable2M_FillingSpeed = ReturnValue[32],
  816. ShakeTable3M_FillingSpeed = ReturnValue[56],
  817. ShakeTable1L_FillingSpeed = ReturnValue[16],
  818. ShakeTable2L_FillingSpeed = ReturnValue[40],
  819. ShakeTable3L_FillingSpeed = ReturnValue[64],
  820. ShakeTable1H_CacheSpeed = ReturnValue[72],
  821. ShakeTable1M_CacheSpeed = ReturnValue[80],
  822. ShakeTable1L_CacheSpeed = ReturnValue[88],
  823. ShakeTable2H_CacheSpeed = ReturnValue[96],
  824. ShakeTable2M_CacheSpeed = ReturnValue[104],
  825. ShakeTable2L_CacheSpeed = ReturnValue[112]
  826. };
  827. results = modbusTcpClient.ReadHoldingRegisters(slaveId: 1, startAddress: 3120, numRegisters: 108, out ReturnValue);
  828. if (!results || ReturnValue == null) return null;
  829. result.ShakeTable3H_CacheSpeed = ReturnValue[0];
  830. result.ShakeTable3M_CacheSpeed = ReturnValue[8];
  831. result.ShakeTable3L_CacheSpeed = ReturnValue[16];
  832. result.FillingH_SpeedRatio = ReturnValue[24];
  833. result.FillingM_SpeedRatio = ReturnValue[32];
  834. result.FillingL_SpeedRatio = ReturnValue[40];
  835. result.CacheH_SpeedRatio = ReturnValue[48];
  836. result.CacheM_SpeedRatio = ReturnValue[56];
  837. result.CacheL_SpeedRatio = ReturnValue[64];
  838. result.ScrewJogSpeed = GetDoubleFromRegisters(ReturnValue.Skip(72).Take(4).ToArray());
  839. result.InBottleSpeed = GetDoubleFromRegisters(ReturnValue.Skip(104).Take(4).ToArray());
  840. results = modbusTcpClient.ReadHoldingRegisters(slaveId: 1, startAddress: 3256, numRegisters: 100, out ReturnValue);
  841. if (!results || ReturnValue == null) return null;
  842. result.BottlePosSpeed = GetDoubleFromRegisters(ReturnValue.Take(4).ToArray());
  843. result.BottlePosPosition = GetDoubleFromRegisters(ReturnValue.Skip(32).Take(4).ToArray());
  844. result.FillingValveOpenSpeed = GetDoubleFromRegisters(ReturnValue.Skip(64).Take(4).ToArray());
  845. result.FillingValveOpenPosition = GetDoubleFromRegisters(ReturnValue.Skip(96).Take(4).ToArray());
  846. results = modbusTcpClient.ReadHoldingRegisters(slaveId: 1, startAddress: 3384, numRegisters: 100, out ReturnValue);
  847. if (!results || ReturnValue == null) return null;
  848. result.FillingValveCloseSpeed = GetDoubleFromRegisters(ReturnValue.Take(4).ToArray());
  849. result.FillingValveClosePosition = GetDoubleFromRegisters(ReturnValue.Skip(32).ToArray());
  850. result.FillingValveCacheSpeed = GetDoubleFromRegisters(ReturnValue.Skip(64).Take(4).ToArray());
  851. result.FillingValueCachePosition = GetDoubleFromRegisters(ReturnValue.Skip(96).Take(4).ToArray());
  852. results = modbusTcpClient.ReadHoldingRegisters(slaveId: 1, startAddress: 3512, numRegisters: 116, out ReturnValue);
  853. if (!results || ReturnValue == null) return null;
  854. result.FillingValueJogSpeed = GetDoubleFromRegisters(ReturnValue.Take(4).ToArray());
  855. result.MachineDelayFunneDownTime = ReturnValue[32];
  856. result.MachineDelayFunneUpTime = ReturnValue[48];
  857. result.MachineDelayFillingValveOpenTime = ReturnValue[64];
  858. result.MachineDelayFillingValveCloseTime = ReturnValue[80];
  859. result.MachineDelayInBottleTime = ReturnValue[96];
  860. result.ValveDelytime = ReturnValue[112];
  861. results = modbusTcpClient.ReadHoldingRegisters(slaveId: 1, startAddress: 3642, numRegisters: 20, out ReturnValue);
  862. result.MissingDelaytime = ReturnValue[0];
  863. result.BottleJamDelaytime = ReturnValue[2];
  864. result.ShakeTable1_TestSpeed = ReturnValue[10];
  865. result.ShakeTable2_TestSpeed = ReturnValue[12];
  866. result.ShakeTable3_TestSpeed = ReturnValue[14];
  867. result.EliminateCylinderDelayTime = ReturnValue[16];
  868. result.EliminateCylinderHoldingTime = ReturnValue[18];
  869. results = modbusTcpClient.ReadHoldingRegisters(slaveId: 1, startAddress: 2504, numRegisters: 2, out ReturnValue);
  870. if (!results || ReturnValue == null) return null;
  871. result.BottValueSet = ReturnValue[0];
  872. result.CacheShutdownValue = ReturnValue[1];
  873. results = modbusTcpClient.ReadHoldingRegisters(slaveId: 1, startAddress: 2000, numRegisters: 16, out ReturnValue);
  874. if (!results || ReturnValue == null) return null;
  875. result.FillingMode = ReturnValue[0];
  876. result.BeltsSpeed = ReturnValue[8];
  877. return result;
  878. }
  879. /*********************************************批次记录用数据***************************************************************/
  880. public bool ReadBottingVibrationTableHighSpeedValue(out ushort ShakeTable1H_FillingSpeed, out ushort ShakeTable2H_FillingSpeed, out ushort ShakeTable3H_FillingSpeed)
  881. {
  882. bool result = false;
  883. var results = modbusTcpClient.ReadHoldingRegisters(slaveId: 1, startAddress: 3000, numRegisters: 48, out ushort[] ReturnValue);
  884. if (!results || ReturnValue == null)
  885. {
  886. ShakeTable1H_FillingSpeed = 0;
  887. ShakeTable2H_FillingSpeed = 0;
  888. ShakeTable3H_FillingSpeed = 0;
  889. return result;
  890. }
  891. ShakeTable1H_FillingSpeed = ReturnValue[0];
  892. ShakeTable2H_FillingSpeed = ReturnValue[24];
  893. ShakeTable3H_FillingSpeed = ReturnValue[48];
  894. return result;
  895. }
  896. public bool ReadBottingCount(out ushort Count)
  897. {
  898. bool result = false;
  899. if(modbusTcpClient.ReadHoldingRegisters(1, 3650, 1,out ushort[] ReturnValue))//临时地址
  900. {
  901. Count = ReturnValue[0];
  902. result = true;
  903. }
  904. else
  905. {
  906. Count = 0;
  907. }
  908. return result;
  909. }
  910. /*********************************************心跳用数据***************************************************************/
  911. public bool HeartMessage()
  912. {
  913. return modbusTcpClient.WriteSingleRegister(1, 561, 1);
  914. }
  915. /// <summary>
  916. /// 获取16位寄存器中的32Uint位值
  917. /// </summary>
  918. private UInt32 GetInt32FromRegisters(ushort[] registers,string byteOrder = "BADC")
  919. {
  920. ushort highRegister = registers[0];
  921. ushort lowRegister = registers[1];
  922. byte[] bytes = ConvertToByteArray(lowRegister, highRegister, byteOrder);
  923. // 转换为float
  924. return (UInt32)BitConverter.ToInt32(bytes, 0);
  925. }
  926. /// <summary>
  927. /// 获取16位寄存器中的32Float位值
  928. /// </summary>
  929. private float GetFloatFromRegisters(ushort[] registers)
  930. {
  931. string byteOrder = "BADC";
  932. ushort highRegister = registers[0];
  933. ushort lowRegister = registers[1];
  934. byte[] bytes = ConvertToByteArray(lowRegister, highRegister, byteOrder);
  935. return BitConverter.ToSingle(bytes, 0); ;
  936. }
  937. /// <summary>
  938. /// 获取寄存器中的64位Double值
  939. /// </summary>
  940. /// <param name="registers"></param>
  941. /// <param name="byteOder"></param>
  942. /// <returns></returns>
  943. private double GetDoubleFromRegisters(ushort[] registers,string byteOder="BADC")
  944. {
  945. ushort reg1 = registers[0];
  946. ushort reg2 = registers[1];
  947. ushort reg3 = registers[2];
  948. ushort reg4 = registers[3];
  949. byte[] bytes = ConvertToByteArray8Bytes(reg1, reg2, reg3, reg4, byteOder);
  950. return BitConverter.ToDouble(bytes, 0);
  951. }
  952. /// <summary>
  953. /// 将寄存器数组换为字节数组转(根据指定字节序)
  954. /// </summary>
  955. /// <param name="lowRegister">低位寄存器</param>
  956. /// <param name="highRegister">高位寄存器</param>
  957. /// <param name="byteOrder">字节序</param>
  958. /// <returns>字节数组</returns>
  959. private byte[] ConvertToByteArray(ushort lowRegister, ushort highRegister, string byteOrder = "BADC")
  960. {
  961. byte[] bytes = new byte[4];
  962. switch (byteOrder.ToUpper())
  963. {
  964. case "ABCD": // 大端序
  965. bytes[0] = (byte)(highRegister >> 8);
  966. bytes[1] = (byte)(highRegister & 0xFF);
  967. bytes[2] = (byte)(lowRegister >> 8);
  968. bytes[3] = (byte)(lowRegister & 0xFF);
  969. break;
  970. case "CDAB": // 小端序
  971. bytes[0] = (byte)(lowRegister >> 8);
  972. bytes[1] = (byte)(lowRegister & 0xFF);
  973. bytes[2] = (byte)(highRegister >> 8);
  974. bytes[3] = (byte)(highRegister & 0xFF);
  975. break;
  976. case "BADC":
  977. bytes[0] = (byte)(highRegister & 0xFF);
  978. bytes[1] = (byte)(highRegister >> 8);
  979. bytes[2] = (byte)(lowRegister & 0xFF);
  980. bytes[3] = (byte)(lowRegister >> 8);
  981. break;
  982. case "DCBA":
  983. bytes[0] = (byte)(lowRegister & 0xFF);
  984. bytes[1] = (byte)(lowRegister >> 8);
  985. bytes[2] = (byte)(highRegister & 0xFF);
  986. bytes[3] = (byte)(highRegister >> 8);
  987. break;
  988. default:
  989. // 默认使用ABCD顺序
  990. bytes[0] = (byte)(highRegister >> 8);
  991. bytes[1] = (byte)(highRegister & 0xFF);
  992. bytes[2] = (byte)(lowRegister >> 8);
  993. bytes[3] = (byte)(lowRegister & 0xFF);
  994. break;
  995. }
  996. return bytes;
  997. }
  998. /// <summary>
  999. /// 将寄存器数组转换为字节数组(根据指定字节序,用于8字节double值)
  1000. /// </summary>
  1001. /// <param name="reg1">第1个寄存器(最高位寄存器)</param>
  1002. /// <param name="reg2">第2个寄存器</param>
  1003. /// <param name="reg3">第3个寄存器</param>
  1004. /// <param name="reg4">第4个寄存器(最低位寄存器)</param>
  1005. /// <param name="byteOrder">字节序</param>
  1006. /// <returns>字节数组</returns>
  1007. private byte[] ConvertToByteArray8Bytes(ushort reg1, ushort reg2, ushort reg3, ushort reg4, string byteOrder)
  1008. {
  1009. byte[] bytes = new byte[8];
  1010. switch (byteOrder.ToUpper())
  1011. {
  1012. case "ABCD": // 大端序 - 寄存器顺序:reg1-reg2-reg3-reg4,字节顺序:0-1-2-3-4-5-6-7
  1013. bytes[0] = (byte)(reg1 >> 8); // reg1高位字节
  1014. bytes[1] = (byte)(reg1 & 0xFF); // reg1低位字节
  1015. bytes[2] = (byte)(reg2 >> 8); // reg2高位字节
  1016. bytes[3] = (byte)(reg2 & 0xFF); // reg2低位字节
  1017. bytes[4] = (byte)(reg3 >> 8); // reg3高位字节
  1018. bytes[5] = (byte)(reg3 & 0xFF); // reg3低位字节
  1019. bytes[6] = (byte)(reg4 >> 8); // reg4高位字节
  1020. bytes[7] = (byte)(reg4 & 0xFF); // reg4低位字节
  1021. break;
  1022. case "CDAB": // 交换32位字 - 寄存器顺序:reg3-reg4-reg1-reg2
  1023. bytes[0] = (byte)(reg3 >> 8); // reg3高位字节
  1024. bytes[1] = (byte)(reg3 & 0xFF); // reg3低位字节
  1025. bytes[2] = (byte)(reg4 >> 8); // reg4高位字节
  1026. bytes[3] = (byte)(reg4 & 0xFF); // reg4低位字节
  1027. bytes[4] = (byte)(reg1 >> 8); // reg1高位字节
  1028. bytes[5] = (byte)(reg1 & 0xFF); // reg1低位字节
  1029. bytes[6] = (byte)(reg2 >> 8); // reg2高位字节
  1030. bytes[7] = (byte)(reg2 & 0xFF); // reg2低位字节
  1031. break;
  1032. case "BADC": // 交换字内字节 - 高位字节在前,低位字节在后
  1033. bytes[0] = (byte)(reg1 & 0xFF); // reg1低位字节
  1034. bytes[1] = (byte)(reg1 >> 8); // reg1高位字节
  1035. bytes[2] = (byte)(reg2 & 0xFF); // reg2低位字节
  1036. bytes[3] = (byte)(reg2 >> 8); // reg2高位字节
  1037. bytes[4] = (byte)(reg3 & 0xFF); // reg3低位字节
  1038. bytes[5] = (byte)(reg3 >> 8); // reg3高位字节
  1039. bytes[6] = (byte)(reg4 & 0xFF); // reg4低位字节
  1040. bytes[7] = (byte)(reg4 >> 8); // reg4高位字节
  1041. break;
  1042. case "DCBA": // 完全反转 - 寄存器顺序:reg4-reg3-reg2-reg1
  1043. bytes[0] = (byte)(reg4 & 0xFF); // reg4低位字节
  1044. bytes[1] = (byte)(reg4 >> 8); // reg4高位字节
  1045. bytes[2] = (byte)(reg3 & 0xFF); // reg3低位字节
  1046. bytes[3] = (byte)(reg3 >> 8); // reg3高位字节
  1047. bytes[4] = (byte)(reg2 & 0xFF); // reg2低位字节
  1048. bytes[5] = (byte)(reg2 >> 8); // reg2高位字节
  1049. bytes[6] = (byte)(reg1 & 0xFF); // reg1低位字节
  1050. bytes[7] = (byte)(reg1 >> 8); // reg1高位字节
  1051. break;
  1052. default:
  1053. // 默认使用ABCD顺序
  1054. bytes[0] = (byte)(reg1 >> 8);
  1055. bytes[1] = (byte)(reg1 & 0xFF);
  1056. bytes[2] = (byte)(reg2 >> 8);
  1057. bytes[3] = (byte)(reg2 & 0xFF);
  1058. bytes[4] = (byte)(reg3 >> 8);
  1059. bytes[5] = (byte)(reg3 & 0xFF);
  1060. bytes[6] = (byte)(reg4 >> 8);
  1061. bytes[7] = (byte)(reg4 & 0xFF);
  1062. break;
  1063. }
  1064. return bytes;
  1065. }
  1066. }
  1067. }