PLCManagementClass.cs 38 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106
  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.Security.Cryptography;
  7. namespace CCDCount.DLL
  8. {
  9. public class PLCManagementClass
  10. {
  11. private bool isConnect = false;
  12. public bool IsConnect
  13. {
  14. get
  15. {
  16. return isConnect;
  17. }
  18. }
  19. public ModbusTcpClient modbusTcpClient = new ModbusTcpClient();
  20. public PLCManagementClass(string ipAddress)
  21. {
  22. //ConnectModbus("127.0.0.1");
  23. ConnectModbus(ipAddress);
  24. //ConnectModbus("192.168.1.88");
  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. /// <summary>
  39. /// 归零置为True
  40. /// </summary>
  41. public bool ReturnToZeroToTrue()
  42. {
  43. return modbusTcpClient.WriteCoilsRegister(slaveId: 1, CoilsAddress: 0, values: true);
  44. }
  45. /// <summary>
  46. /// 归零置为False
  47. /// </summary>
  48. public bool ReturnToZeroToFalse()
  49. {
  50. return modbusTcpClient.WriteCoilsRegister(slaveId: 1, CoilsAddress: 0, values: false);
  51. }
  52. /// <summary>
  53. /// 复位置为True
  54. /// </summary>
  55. public bool RepositionToTrue()
  56. {
  57. return modbusTcpClient.WriteCoilsRegister(slaveId: 1, CoilsAddress: 1, values: true);
  58. }
  59. /// <summary>
  60. /// 复位置为False
  61. /// </summary>
  62. public bool RepositionToFalse()
  63. {
  64. return modbusTcpClient.WriteCoilsRegister(slaveId: 1, CoilsAddress: 1, values: false);
  65. }
  66. /// <summary>
  67. /// 轴停止置为True
  68. /// </summary>
  69. public bool ShaftStopsToTrue()
  70. {
  71. return modbusTcpClient.WriteCoilsRegister(slaveId: 1, CoilsAddress: 2, values: true);
  72. }
  73. /// <summary>
  74. /// 轴停止置为False
  75. /// </summary>
  76. public bool ShaftStopsToFalse()
  77. {
  78. return modbusTcpClient.WriteCoilsRegister(slaveId: 1, CoilsAddress: 2, values: false);
  79. }
  80. /// <summary>
  81. /// 正转点动置为True
  82. /// </summary>
  83. public bool ForwardRotatingJogToTrue()
  84. {
  85. return modbusTcpClient.WriteCoilsRegister(slaveId: 1, CoilsAddress: 3, values: true);
  86. }
  87. /// <summary>
  88. /// 正转点动置为False
  89. /// </summary>
  90. public bool ForwardRotatingJogToFalse()
  91. {
  92. return modbusTcpClient.WriteCoilsRegister(slaveId: 1, CoilsAddress: 3, values: false);
  93. }
  94. /// <summary>
  95. /// 反转点动置为True
  96. /// </summary>
  97. public bool ReversalReverseJogToTrue()
  98. {
  99. return modbusTcpClient.WriteCoilsRegister(slaveId: 1, CoilsAddress: 4, values: true);
  100. }
  101. /// <summary>
  102. /// 反转点动置为False
  103. /// </summary>
  104. public bool ReversalReverseJogToFalse()
  105. {
  106. return modbusTcpClient.WriteCoilsRegister(slaveId: 1, CoilsAddress: 4, values: false);
  107. }
  108. /// <summary>
  109. /// 速度运行设置为True
  110. /// </summary>
  111. public bool SpeedRunToTrue()
  112. {
  113. return modbusTcpClient.WriteCoilsRegister(slaveId: 1, CoilsAddress: 5, values: true);
  114. }
  115. /// <summary>
  116. /// 速度运行设置为False
  117. /// </summary>
  118. public bool SpeedRunToFalse()
  119. {
  120. return modbusTcpClient.WriteCoilsRegister(slaveId: 1, CoilsAddress: 5, values: false);
  121. }
  122. /// <summary>
  123. /// 启动设置为True
  124. /// </summary>
  125. public bool InitiateToTrue()
  126. {
  127. return modbusTcpClient.WriteCoilsRegister(slaveId: 1, CoilsAddress: 6, values: true);
  128. }
  129. /// <summary>
  130. /// 启动设置为False
  131. /// </summary>
  132. public bool InitiateToFalse()
  133. {
  134. return modbusTcpClient.WriteCoilsRegister(slaveId: 1, CoilsAddress: 6, values: false);
  135. }
  136. /// <summary>
  137. /// 停止设置为True
  138. /// </summary>
  139. public bool StopToTrue()
  140. {
  141. return modbusTcpClient.WriteCoilsRegister(slaveId: 1, CoilsAddress: 7, values: true);
  142. }
  143. /// <summary>
  144. /// 停止设置为False
  145. /// </summary>
  146. public bool StopToFalse()
  147. {
  148. return modbusTcpClient.WriteCoilsRegister(slaveId: 1, CoilsAddress: 7, values: false);
  149. }
  150. /// <summary>
  151. /// 设备运行设置为True
  152. /// </summary>
  153. public bool EquipmentOperationToTrue()
  154. {
  155. return modbusTcpClient.WriteCoilsRegister(slaveId: 1, CoilsAddress: 8, values: true);
  156. }
  157. /// <summary>
  158. /// 设备运行设置为False
  159. /// </summary>
  160. public bool EquipmentOperationToFalse()
  161. {
  162. return modbusTcpClient.WriteCoilsRegister(slaveId: 1, CoilsAddress: 8, values: false);
  163. }
  164. /// <summary>
  165. /// 写入完成设置为True
  166. /// </summary>
  167. public bool WriteDoneToTrue()
  168. {
  169. return modbusTcpClient.WriteCoilsRegister(slaveId: 1, CoilsAddress: 11, values: true);
  170. }
  171. /// <summary>
  172. /// 切换一级震台启动状态
  173. /// </summary>
  174. public void SwitchLevelOneVibrationTable()
  175. {
  176. if(ReadLevelOneVibrationTable(out bool Value))
  177. {
  178. modbusTcpClient.WriteCoilsRegister(slaveId: 1, CoilsAddress: 25, values: !Value);
  179. }
  180. }
  181. /// <summary>
  182. /// 二级震台启动
  183. /// </summary>
  184. public void SwitchLevelTwoVibrationTable()
  185. {
  186. if(ReadLevelTwoVibrationTable(out bool Value))
  187. {
  188. modbusTcpClient.WriteCoilsRegister(slaveId: 1, CoilsAddress: 26, values: !Value);
  189. }
  190. }
  191. /// <summary>
  192. /// 三级震台启动
  193. /// </summary>
  194. public void SwitchLevelThreeVibrationTable()
  195. {
  196. if(ReadLevelThreeVibrationTable(out bool Value))
  197. {
  198. modbusTcpClient.WriteCoilsRegister(slaveId: 1, CoilsAddress: 27, values: !Value);
  199. }
  200. }
  201. /// <summary>
  202. /// 设备上升
  203. /// </summary>
  204. public void WriteDeviceUpToTrue()
  205. {
  206. modbusTcpClient.WriteCoilsRegister(slaveId: 1, CoilsAddress: 28, values: true);
  207. }
  208. public void WriteDeviceUpToFalse()
  209. {
  210. modbusTcpClient.WriteCoilsRegister(slaveId: 1, CoilsAddress: 28, values: false);
  211. }
  212. /// <summary>
  213. /// 设备下降
  214. /// </summary>
  215. public void WriteDeviceDownToTrue()
  216. {
  217. modbusTcpClient.WriteCoilsRegister(slaveId: 1, CoilsAddress: 29, values: true);
  218. }
  219. public void WriteDeviceDownToFalse()
  220. {
  221. modbusTcpClient.WriteCoilsRegister(slaveId: 1, CoilsAddress: 29, values: false);
  222. }
  223. /// <summary>
  224. /// 传送带启动
  225. /// </summary>
  226. public void SwitchTransferStart()
  227. {
  228. if(ReadTransferStart(out bool Value))
  229. {
  230. modbusTcpClient.WriteCoilsRegister(slaveId: 1, CoilsAddress: 30, values: !Value);
  231. }
  232. }
  233. /// <summary>
  234. /// 气锁关
  235. /// </summary>
  236. public void SwitchAirValveClose()
  237. {
  238. if(ReadAirValveClose(out bool Value))
  239. {
  240. modbusTcpClient.WriteCoilsRegister(slaveId: 1, CoilsAddress: 31, values: !Value);
  241. }
  242. }
  243. /// <summary>
  244. /// 送瓶轮复位
  245. /// </summary>
  246. public void WriteBottleFeedingWheelResetToTrue()
  247. {
  248. modbusTcpClient.WriteCoilsRegister(slaveId: 1, CoilsAddress: 32, values: true);
  249. }
  250. public void WriteBottleFeedingWheelResetToFalse()
  251. {
  252. modbusTcpClient.WriteCoilsRegister(slaveId: 1, CoilsAddress: 32, values: false);
  253. }
  254. /// <summary>
  255. /// 送瓶轮回零
  256. /// </summary>
  257. public void WriteBottleFeedingWheelReturnToZeroToTrue()
  258. {
  259. modbusTcpClient.WriteCoilsRegister(slaveId: 1, CoilsAddress: 33, values: true);
  260. }
  261. public void WriteBottleFeedingWheelReturnToZeroToFalse()
  262. {
  263. modbusTcpClient.WriteCoilsRegister(slaveId: 1, CoilsAddress: 33, values: false);
  264. }
  265. /// <summary>
  266. /// 送瓶轮轴停止
  267. /// </summary>
  268. public void WriteBottleFeedingWheelShaftStopsToTrue()
  269. {
  270. modbusTcpClient.WriteCoilsRegister(slaveId: 1, CoilsAddress: 34, values: true);
  271. }
  272. public void WriteBottleFeedingWheelShaftStopsToFalse()
  273. {
  274. modbusTcpClient.WriteCoilsRegister(slaveId: 1, CoilsAddress: 34, values: false);
  275. }
  276. /// <summary>
  277. /// 送瓶轮正转点动
  278. /// </summary>
  279. public void WriteBottleFeedingWheelPositiveRotationJogToTrue()
  280. {
  281. modbusTcpClient.WriteCoilsRegister(slaveId: 1, CoilsAddress: 36, values: true);
  282. }
  283. public void WriteBottleFeedingWheelPositiveRotationJogToFalse()
  284. {
  285. modbusTcpClient.WriteCoilsRegister(slaveId: 1, CoilsAddress: 36, values: false);
  286. }
  287. /// <summary>
  288. /// 送瓶轮反转点动
  289. /// </summary>
  290. public void WriteBottleFeedingWheelReverseRotationJogToTrue()
  291. {
  292. modbusTcpClient.WriteCoilsRegister(slaveId: 1, CoilsAddress: 37, values: true);
  293. }
  294. public void WriteBottleFeedingWheelReverseRotationJogToFalse()
  295. {
  296. modbusTcpClient.WriteCoilsRegister(slaveId: 1, CoilsAddress: 37, values: false);
  297. }
  298. /// <summary>
  299. /// 送瓶轮使能
  300. /// </summary>
  301. public void SwitchBottleFeedingWheelEnable()
  302. {
  303. if(ReadBottleFeedingWheelEnable(out bool Value))
  304. {
  305. modbusTcpClient.WriteCoilsRegister(slaveId: 1, CoilsAddress: 38, values: !Value);
  306. }
  307. }
  308. /// <summary>
  309. /// 读取写入完成
  310. /// </summary>
  311. /// <returns></returns>
  312. public bool ReadAllowWrite(out bool Value)
  313. {
  314. bool result = modbusTcpClient.ReadCoilsRegister(slaveId: 1, startAddress: 12, numRegisters: 1,out bool[] ReturnValue);
  315. Value = ReturnValue[0];
  316. return result;
  317. }
  318. /// <summary>
  319. /// 读取使能完成
  320. /// </summary>
  321. /// <returns></returns>
  322. public bool ReadEnableCompletion(out bool Value)
  323. {
  324. bool result = modbusTcpClient.ReadCoilsRegister(slaveId: 1, startAddress: 14, numRegisters: 1,out bool[] ReturnValue);
  325. Value = ReturnValue[0];
  326. return result;
  327. }
  328. /// <summary>
  329. /// 读取归零完成
  330. /// </summary>
  331. /// <returns></returns>
  332. public bool ReadReturnToZeroCompletion(out bool Value)
  333. {
  334. bool result = modbusTcpClient.ReadCoilsRegister(slaveId: 1, startAddress: 15, numRegisters: 1,out bool[] ReturnValue);
  335. Value = ReturnValue[0];
  336. return result;
  337. }
  338. /// <summary>
  339. /// 读取停止完成
  340. /// </summary>
  341. /// <returns></returns>
  342. public bool ReadStopCompletion(out bool Value)
  343. {
  344. bool result = modbusTcpClient.ReadCoilsRegister(slaveId: 1, startAddress: 16, numRegisters: 1, out bool[] ReturnValue);
  345. Value = ReturnValue[0];
  346. return result;
  347. }
  348. /// <summary>
  349. /// 读取速度运行中
  350. /// </summary>
  351. public bool ReadSpeedRunning(out bool Value)
  352. {
  353. bool result = modbusTcpClient.ReadCoilsRegister(slaveId: 1, startAddress: 17, numRegisters: 1,out bool[] ReturnValue);
  354. Value = ReturnValue[0];
  355. return result;
  356. }
  357. /// <summary>
  358. /// 读取归零中
  359. /// </summary>
  360. /// <returns></returns>
  361. public bool ReadReturnToZero(out bool Value)
  362. {
  363. bool result = modbusTcpClient.ReadCoilsRegister(slaveId: 1, startAddress: 18, numRegisters: 1,out bool[] ReturnValue);
  364. Value = ReturnValue[0];
  365. return result;
  366. }
  367. /// <summary>
  368. /// 读取中转阀开定位完成
  369. /// </summary>
  370. /// <returns></returns>
  371. public bool ReadTransferValveOpenCompletion(out bool Value)
  372. {
  373. bool result = modbusTcpClient.ReadCoilsRegister(slaveId: 1, startAddress: 19, numRegisters: 1,out bool[] ReturnValue);
  374. Value = ReturnValue[0];
  375. return result;
  376. }
  377. /// <summary>
  378. /// 读取中转阀关定位完成
  379. /// </summary>
  380. public bool ReadTransferValveCloseCompletion(out bool Value)
  381. {
  382. bool result = modbusTcpClient.ReadCoilsRegister(slaveId: 1, startAddress: 20, numRegisters: 1,out bool[] ReturnValue);
  383. Value = ReturnValue[0];
  384. return result;
  385. }
  386. /// <summary>
  387. /// 读取允许数据交换
  388. /// </summary>
  389. public bool ReadAllowsDataExchange(out bool Value)
  390. {
  391. bool result = modbusTcpClient.ReadCoilsRegister(slaveId: 1, startAddress: 21, numRegisters: 1,out bool[] ReturnValue);
  392. Value = ReturnValue[0];
  393. return result;
  394. }
  395. /// <summary>
  396. /// 读取暂停数据交换
  397. /// </summary>
  398. public bool ReadPauseDataExchange(out bool Value)
  399. {
  400. bool result = modbusTcpClient.ReadCoilsRegister(slaveId: 1, startAddress: 22, numRegisters: 1,out bool[] ReturnValue);
  401. Value = ReturnValue[0];
  402. return result;
  403. }
  404. /// <summary>
  405. /// 缓存计数延时完成
  406. /// </summary>
  407. /// <returns></returns>
  408. public bool ReadCacheCountDelayed(out bool Value)
  409. {
  410. bool result = modbusTcpClient.ReadCoilsRegister(slaveId: 1, startAddress: 23, numRegisters: 1, out bool[] ReturnValue);
  411. Value = ReturnValue[0];
  412. return result;
  413. }
  414. /// <summary>
  415. /// 读取使能
  416. /// </summary>
  417. /// <returns></returns>
  418. public bool ReadEnable(out bool Value)
  419. {
  420. bool result = modbusTcpClient.ReadCoilsRegister(slaveId: 1, startAddress: 24, numRegisters: 1, out bool[] ReturnValue);
  421. Value = ReturnValue[0];
  422. return result;
  423. }
  424. /// <summary>
  425. /// 读取一级震台启动
  426. /// </summary>
  427. public bool ReadLevelOneVibrationTable(out bool Value)
  428. {
  429. bool result = modbusTcpClient.ReadCoilsRegister(slaveId: 1, startAddress: 25, numRegisters: 1, out bool[] ReturnValue);
  430. Value = ReturnValue[0];
  431. return result;
  432. }
  433. /// <summary>
  434. /// 读取二级震台启动
  435. /// </summary>
  436. public bool ReadLevelTwoVibrationTable(out bool Value)
  437. {
  438. bool result = modbusTcpClient.ReadCoilsRegister(slaveId: 1, startAddress: 26, numRegisters: 1, out bool[] ReturnValue);
  439. Value = ReturnValue[0];
  440. return result;
  441. }
  442. /// <summary>
  443. /// 读取三级震台启动
  444. /// </summary>
  445. public bool ReadLevelThreeVibrationTable(out bool Value)
  446. {
  447. bool result = modbusTcpClient.ReadCoilsRegister(slaveId: 1, startAddress: 27, numRegisters: 1, out bool[] ReturnValue);
  448. Value = ReturnValue[0];
  449. return result;
  450. }
  451. /// <summary>
  452. /// 读取传送带启动
  453. /// </summary>
  454. public bool ReadTransferStart(out bool Value)
  455. {
  456. bool result = modbusTcpClient.ReadCoilsRegister(slaveId: 1, startAddress: 30, numRegisters: 1, out bool[] ReturnValue);
  457. Value = ReturnValue[0];
  458. return result;
  459. }
  460. /// <summary>
  461. /// 读取气锁关
  462. /// </summary>
  463. public bool ReadAirValveClose(out bool Value)
  464. {
  465. bool result = modbusTcpClient.ReadCoilsRegister(slaveId: 1, startAddress: 31, numRegisters: 1, out bool[] ReturnValue);
  466. Value = ReturnValue[0];
  467. return result;
  468. }
  469. /// <summary>
  470. /// 读取送瓶轮使能
  471. /// </summary>
  472. public bool ReadBottleFeedingWheelEnable(out bool Value)
  473. {
  474. bool result = modbusTcpClient.ReadCoilsRegister(slaveId: 1, startAddress: 38, numRegisters: 1, out bool[] ReturnValue);
  475. Value = ReturnValue[0];
  476. return result;
  477. }
  478. /// <summary>
  479. /// 读取所有状态
  480. /// </summary>
  481. public PlcStaticModelClass ReadAllState()
  482. {
  483. PlcStaticModelClass result = null;
  484. bool[] ReadResultValue = null;
  485. bool ReadResult = modbusTcpClient.ReadCoilsRegister(slaveId: 1, startAddress: 14, numRegisters: 11,out ReadResultValue);
  486. if (ReadResultValue == null|| ReadResult == false) return null;
  487. result = new PlcStaticModelClass()
  488. {
  489. EnableCompletion = ReadResultValue[0],
  490. ReturnToZeroCompletion = ReadResultValue[1],
  491. StopCompletion = ReadResultValue[2],
  492. SpeedRunning = ReadResultValue[3],
  493. ReturnToZero = ReadResultValue[4],
  494. TransferValveOpenCompletion = ReadResultValue[5],
  495. TransferValveCloseCompletion = ReadResultValue[6],
  496. AllowsDataExchange = ReadResultValue[7],
  497. PauseDataExchange = ReadResultValue[8],
  498. CacheCountDelayed = ReadResultValue[9],
  499. Enable = ReadResultValue[10]
  500. };
  501. ReadResult = modbusTcpClient.ReadCoilsRegister(slaveId: 1, startAddress: 35, numRegisters: 5,out ReadResultValue);
  502. if (ReadResultValue == null || ReadResult == false) return null;
  503. result.BottleFeedingWheelEnableCompletion = ReadResultValue[0];
  504. result.BottleFeedingWheelStopCompletion = ReadResultValue[4];
  505. return result;
  506. }
  507. /// <summary>
  508. /// 写入速度模式运行速度
  509. /// </summary>
  510. /// <param name="Value"></param>
  511. public bool WriteSpeedModeRunningSpeed(float Value)
  512. {
  513. return modbusTcpClient.WriteMultipleReals(1, 1110, new float[] { Value }, "BADC");
  514. }
  515. /// <summary>
  516. /// 写入点动速度
  517. /// </summary>
  518. /// <param name="Value"></param>
  519. public bool WriteJogSpeed(float Value)
  520. {
  521. return modbusTcpClient.WriteMultipleReals(1, 1114, new float[] { Value }, "BADC");
  522. }
  523. /// <summary>
  524. /// 写入罐装设定值
  525. /// </summary>
  526. /// <param name="Value"></param>
  527. public bool WriteBottValueSet(UInt16 Value)
  528. {
  529. return modbusTcpClient.WriteSingleRegister(1, 1118, Value);
  530. }
  531. /// <summary>
  532. /// 写入中转阀打开速度
  533. /// </summary>
  534. /// <param name="Value"></param>
  535. public bool WriteTransferValveOpeningSpeed(float Value)
  536. {
  537. return modbusTcpClient.WriteMultipleReals(1, 1122, new float[] { Value }, "BADC");
  538. }
  539. /// <summary>
  540. /// 写入中转阀打开时间
  541. /// </summary>
  542. public bool WriteTransferValveOpeningTime(UInt32 Value)
  543. {
  544. return modbusTcpClient.WriteSingleInt32(1, 1126, Value);
  545. }
  546. /// <summary>
  547. /// 写入罐装减速值
  548. /// </summary>
  549. /// <param name="Value"></param>
  550. public bool WriteBottingDecelerationValue(ushort Value)
  551. {
  552. return modbusTcpClient.WriteSingleRegister(1, 1130, Value);
  553. }
  554. /// <summary>
  555. /// 写入缓存减速值
  556. /// </summary>
  557. /// <param name="Value"></param>
  558. public bool WriteCacheDecelerationValue(ushort Value)
  559. {
  560. return modbusTcpClient.WriteSingleRegister(1, 1134, Value);
  561. }
  562. /// <summary>
  563. /// 写入缓存计时延时时间
  564. /// </summary>
  565. /// <param name="Value"></param>
  566. public bool WriteCacheCountDelayTiming(UInt32 Value)
  567. {
  568. return modbusTcpClient.WriteSingleInt32(1, 1138, Value);
  569. }
  570. /// <summary>
  571. /// 写入缓存停机值
  572. /// </summary>
  573. /// <param name="Value"></param>
  574. public bool WriteCacheShutdownValue(ushort Value)
  575. {
  576. return modbusTcpClient.WriteSingleRegister(1, 1142, Value);
  577. }
  578. /// <summary>
  579. /// 写入罐装料筒震台高速值
  580. /// </summary>
  581. /// <param name="Value"></param>
  582. public bool WriteBottingMaterialCylinderVibrationTableHighSpeedValue(ushort Value)
  583. {
  584. return modbusTcpClient.WriteSingleRegister(1, 1146, Value);
  585. }
  586. /// <summary>
  587. /// 写入罐装过滤震台高速值
  588. /// </summary>
  589. /// <param name="Value"></param>
  590. public bool WriteBottingFilterVibrationTableHighSpeedValue(ushort Value)
  591. {
  592. return modbusTcpClient.WriteSingleRegister(1, 1150, Value);
  593. }
  594. /// <summary>
  595. /// 写入罐装计数震台高速值
  596. /// </summary>
  597. /// <param name="Value"></param>
  598. public bool WriteBottingCountVibrationTableHighSpeedValue(ushort Value)
  599. {
  600. return modbusTcpClient.WriteSingleRegister(1, 1154, Value);
  601. }
  602. /// <summary>
  603. /// 写入罐装料筒震台减速值
  604. /// </summary>
  605. /// <param name="Value"></param>
  606. public bool WriteBottingMaterialCylinderVibrationTableDecelerationSpeedValue(ushort Value)
  607. {
  608. return modbusTcpClient.WriteSingleRegister(1, 1158, Value);
  609. }
  610. /// <summary>
  611. /// 写入罐装过滤震台减速值
  612. /// </summary>
  613. /// <param name="Value"></param>
  614. public bool WriteBottingFilterVibrationTableDecelerationSpeedValue(ushort Value)
  615. {
  616. return modbusTcpClient.WriteSingleRegister(1, 1162, Value);
  617. }
  618. /// <summary>
  619. /// 写入罐装计数震台减速值
  620. /// </summary>
  621. /// <param name="Value"></param>
  622. public bool WriteBottingCountVibrationTableDecelerationSpeedValue(ushort Value)
  623. {
  624. return modbusTcpClient.WriteSingleRegister(1, 1166, Value);
  625. }
  626. /// <summary>
  627. /// 写入缓存料筒震台高速值
  628. /// </summary>
  629. /// <param name="Value"></param>
  630. public bool WriteCacheMaterialCylinderVibrationTableHighSpeedValue(ushort Value)
  631. {
  632. return modbusTcpClient.WriteSingleRegister(1, 1170, Value);
  633. }
  634. /// <summary>
  635. /// 写入缓存过滤震台高速值
  636. /// </summary>
  637. /// <param name="Value"></param>
  638. public bool WriteCacheFilterVibrationTableHighSpeedValue(ushort Value)
  639. {
  640. return modbusTcpClient.WriteSingleRegister(1, 1174, Value);
  641. }
  642. /// <summary>
  643. /// 写入缓存计数震台高速值
  644. /// </summary>
  645. /// <param name="Value"></param>
  646. public bool WriteCacheCountVibrationTableHighSpeedValue(ushort Value)
  647. {
  648. return modbusTcpClient.WriteSingleRegister(1, 1178, Value);
  649. }
  650. /// <summary>
  651. /// 写入缓存料筒震台减速值
  652. /// </summary>
  653. /// <param name="Value"></param>
  654. public bool WriteCacheMaterialCylinderVibrationTableDecelerationSpeedValue(ushort Value)
  655. {
  656. return modbusTcpClient.WriteSingleRegister(1, 1182, Value);
  657. }
  658. /// <summary>
  659. /// 写入缓存过滤震台减速值
  660. /// </summary>
  661. /// <param name="Value"></param>
  662. public bool WriteCacheFilterVibrationTableDecelerationSpeedValue(ushort Value)
  663. {
  664. return modbusTcpClient.WriteSingleRegister(1, 1186, Value);
  665. }
  666. /// <summary>
  667. /// 写入缓存计数震台减速值
  668. /// </summary>
  669. /// <param name="Value"></param>
  670. public bool WriteCacheCountVibrationTableDecelerationSpeedValue(ushort Value)
  671. {
  672. return modbusTcpClient.WriteSingleRegister(1, 1190, Value);
  673. }
  674. /// <summary>
  675. /// 写入闸门打开延时
  676. /// </summary>
  677. /// <param name="Value"></param>
  678. public bool WriteGateOpeningDelay(UInt32 Value)
  679. {
  680. return modbusTcpClient.WriteSingleInt32(1, 1194, Value);
  681. }
  682. /// <summary>
  683. /// 写入回零偏移值
  684. /// </summary>
  685. /// <param name="Value"></param>
  686. public bool WriteReturnToZeroOffsetValue(float Value)
  687. {
  688. return modbusTcpClient.WriteSingleReal(1, 1198, Value);
  689. }
  690. /// <summary>
  691. /// 写入回零偏移速度
  692. /// </summary>
  693. /// <param name="Value"></param>
  694. public bool WriteReturnToZeroOffsetSpeed(float Value)
  695. {
  696. return modbusTcpClient.WriteSingleReal(1, 1202, Value);
  697. }
  698. /// <summary>
  699. /// 写入中转阀关闭速度
  700. /// </summary>
  701. /// <param name="Value"></param>
  702. public bool WriteTransferValveClosingSpeed(float Value)
  703. {
  704. return modbusTcpClient.WriteSingleReal(1, 1206, Value);
  705. }
  706. /// <summary>
  707. /// 写入中转阀开位置
  708. /// </summary>
  709. /// <param name="Value"></param>
  710. public bool WriteTransferValveOpenPosition(float Value)
  711. {
  712. return modbusTcpClient.WriteSingleReal(1, 1210, Value);
  713. }
  714. /// <summary>
  715. /// 写入中转阀关位置
  716. /// </summary>
  717. /// <param name="Value"></param>
  718. public bool WriteTransferValveClosePosition(float Value)
  719. {
  720. return modbusTcpClient.WriteSingleReal(1, 1214, Value);
  721. }
  722. /// <summary>
  723. /// 写入空气阀开启延时
  724. /// </summary>
  725. public bool WriteAirValveOpeningDelay(UInt32 Value)
  726. {
  727. return modbusTcpClient.WriteSingleInt32(1, 1218, Value);
  728. }
  729. /// <summary>
  730. /// 写入罐装停机值
  731. /// </summary>
  732. /// <param name="Value"></param>
  733. public bool WriteBottlingShutdownValue(ushort Value)
  734. {
  735. return modbusTcpClient.WriteSingleRegister(1, 1230, Value);
  736. }
  737. /// <summary>
  738. /// 写入罐装停机时间
  739. /// </summary>
  740. /// <param name="Value"></param>
  741. public bool WriteBottlingShutdownTime(UInt32 Value)
  742. {
  743. return modbusTcpClient.WriteSingleInt32(1, 1234, Value);
  744. }
  745. /// <summary>
  746. /// 读取所有参数(参数数据表)
  747. /// </summary>
  748. public PlcParaModelClass ReadAllPara()
  749. {
  750. PlcParaModelClass result = null;
  751. var results = modbusTcpClient.ReadHoldingRegisters(slaveId: 1, startAddress: 1110, numRegisters: 124,out ushort[] ReturnValue);
  752. if (ReturnValue == null) return null;
  753. result = new PlcParaModelClass()
  754. {
  755. SpeedModeRunningSpeed = GetFloatFromRegisters(ReturnValue.Take(2).ToArray()),
  756. JogSpeed = GetFloatFromRegisters(ReturnValue.Skip(4).Take(2).ToArray()),
  757. BottValueSet = ReturnValue[8],
  758. TransferValveOpeningSpeed = GetFloatFromRegisters(ReturnValue.Skip(12).Take(2).ToArray()),
  759. TransferValveOpeningTime = GetInt32FromRegisters(ReturnValue.Skip(16).Take(2).ToArray()),
  760. BottingDecelerationValue = ReturnValue[20],
  761. CacheDecelerationValue = ReturnValue[24],
  762. CacheCountDelayTiming = GetInt32FromRegisters(ReturnValue.Skip(28).Take(2).ToArray()),
  763. CacheShutdownValue = ReturnValue[32],
  764. BottingMaterialCylinderVibrationTableHighSpeedValue = ReturnValue[36],
  765. BottingFilterVibrationTableHighSpeedValue = ReturnValue[40],
  766. BottingCountVibrationTableHighSpeedValue = ReturnValue[44],
  767. BottingMaterialCylinderVibrationTableDecelerationSpeedValue = ReturnValue[48],
  768. BottingFilterVibrationTableDecelerationSpeedValue = ReturnValue[52],
  769. BottingCountVibrationTableDecelerationSpeedValue = ReturnValue[56],
  770. CacheMaterialCylinderVibrationTableHighSpeedValue = ReturnValue[60],
  771. CacheFilterVibrationTableHighSpeedValue = ReturnValue[64],
  772. CacheCountVibrationTableHighSpeedValue = ReturnValue[68],
  773. CacheMaterialCylinderVibrationTableDecelerationSpeedValue = ReturnValue[72],
  774. CacheFilterVibrationTableDecelerationSpeedValue = ReturnValue[76],
  775. CacheCountVibrationTableDecelerationSpeedValue = ReturnValue[80],
  776. GateOpeningDelay = GetInt32FromRegisters(ReturnValue.Skip(84).Take(2).ToArray()),
  777. ReturnToZeroOffsetValue = GetFloatFromRegisters(ReturnValue.Skip(88).Take(2).ToArray()),
  778. ReturnToZeroOffsetSpeed = GetFloatFromRegisters(ReturnValue.Skip(92).Take(2).ToArray()),
  779. TransferValveClosingSpeed = GetFloatFromRegisters(ReturnValue.Skip(96).Take(2).ToArray()),
  780. TransferValveOpenPosition = GetFloatFromRegisters(ReturnValue.Skip(100).Take(2).ToArray()),
  781. TransferValveClosePosition = GetFloatFromRegisters(ReturnValue.Skip(104).Take(2).ToArray()),
  782. AirValveOpeningDelay = GetInt32FromRegisters(ReturnValue.Skip(108).Take(2).ToArray()),
  783. BottlingShutdownValue = ReturnValue[120],
  784. };
  785. results = modbusTcpClient.ReadHoldingRegisters(slaveId: 1, startAddress: 1234, numRegisters: 36,out ReturnValue);
  786. result.BottlingShutdownTime = GetInt32FromRegisters(ReturnValue.Take(2).ToArray());
  787. result.BottleFeedingWheelRunningSpeed = GetFloatFromRegisters(ReturnValue.Skip(8).Take(2).ToArray());
  788. result.BottleFeedingWheelJogRunningSpeed = GetFloatFromRegisters(ReturnValue.Skip(12).Take(2).ToArray());
  789. result.BottleFeedingWheelReturnToZeroOffsetValue = GetFloatFromRegisters(ReturnValue.Skip(16).Take(2).ToArray());
  790. result.BottleFeedingWheelReturnToZeroSpeed = GetFloatFromRegisters(ReturnValue.Skip(20).Take(2).ToArray());
  791. result.BottleFeedingWheelPositionLength = GetFloatFromRegisters(ReturnValue.Skip(24).Take(2).ToArray());
  792. result.BottleFeedingWheelPauseTime = GetInt32FromRegisters(ReturnValue.Skip(28).Take(2).ToArray());
  793. result.DelayBlanking = GetInt32FromRegisters(ReturnValue.Skip(32).Take(2).ToArray());
  794. return result;
  795. }
  796. public bool ReadBottingVibrationTableHighSpeedValue(out ushort MaterialCylinderValue,out ushort FilterValue,out ushort CountValue)
  797. {
  798. bool result = false;
  799. if(modbusTcpClient.ReadHoldingRegisters(1, 1146, 12,out ushort[] ReturnValue))
  800. {
  801. MaterialCylinderValue = ReturnValue[0];
  802. FilterValue = ReturnValue[4];
  803. CountValue = ReturnValue[8];
  804. result = true;
  805. }
  806. else
  807. {
  808. MaterialCylinderValue = 0;
  809. FilterValue = 0;
  810. CountValue = 0;
  811. }
  812. return result;
  813. }
  814. public bool ReadBottingCount(out ushort Count)
  815. {
  816. bool result = false;
  817. if(modbusTcpClient.ReadHoldingRegisters(1, 1269, 1,out ushort[] ReturnValue))//临时地址
  818. {
  819. Count = ReturnValue[0];
  820. result = true;
  821. }
  822. else
  823. {
  824. Count = 0;
  825. }
  826. return result;
  827. }
  828. /// <summary>
  829. /// 获取16位寄存器中的32Uint位值
  830. /// </summary>
  831. private UInt32 GetInt32FromRegisters(ushort[] registers,string byteOrder = "BADC")
  832. {
  833. ushort highRegister = registers[0];
  834. ushort lowRegister = registers[1];
  835. byte[] bytes = ConvertToByteArray(lowRegister, highRegister, byteOrder);
  836. // 转换为float
  837. return (UInt32)BitConverter.ToInt32(bytes, 0);
  838. }
  839. /// <summary>
  840. /// 获取16位寄存器中的32Float位值
  841. /// </summary>
  842. private float GetFloatFromRegisters(ushort[] registers)
  843. {
  844. string byteOrder = "BADC";
  845. ushort highRegister = registers[0];
  846. ushort lowRegister = registers[1];
  847. byte[] bytes = ConvertToByteArray(lowRegister, highRegister, byteOrder);
  848. return BitConverter.ToSingle(bytes, 0); ;
  849. }
  850. /// <summary>
  851. /// 将寄存器数组换为字节数组转(根据指定字节序)
  852. /// </summary>
  853. /// <param name="lowRegister">低位寄存器</param>
  854. /// <param name="highRegister">高位寄存器</param>
  855. /// <param name="byteOrder">字节序</param>
  856. /// <returns>字节数组</returns>
  857. private byte[] ConvertToByteArray(ushort lowRegister, ushort highRegister, string byteOrder = "BADC")
  858. {
  859. byte[] bytes = new byte[4];
  860. switch (byteOrder.ToUpper())
  861. {
  862. case "ABCD": // 大端序
  863. bytes[0] = (byte)(highRegister >> 8);
  864. bytes[1] = (byte)(highRegister & 0xFF);
  865. bytes[2] = (byte)(lowRegister >> 8);
  866. bytes[3] = (byte)(lowRegister & 0xFF);
  867. break;
  868. case "CDAB": // 小端序
  869. bytes[0] = (byte)(lowRegister >> 8);
  870. bytes[1] = (byte)(lowRegister & 0xFF);
  871. bytes[2] = (byte)(highRegister >> 8);
  872. bytes[3] = (byte)(highRegister & 0xFF);
  873. break;
  874. case "BADC":
  875. bytes[0] = (byte)(highRegister & 0xFF);
  876. bytes[1] = (byte)(highRegister >> 8);
  877. bytes[2] = (byte)(lowRegister & 0xFF);
  878. bytes[3] = (byte)(lowRegister >> 8);
  879. break;
  880. case "DCBA":
  881. bytes[0] = (byte)(lowRegister & 0xFF);
  882. bytes[1] = (byte)(lowRegister >> 8);
  883. bytes[2] = (byte)(highRegister & 0xFF);
  884. bytes[3] = (byte)(highRegister >> 8);
  885. break;
  886. default:
  887. // 默认使用ABCD顺序
  888. bytes[0] = (byte)(highRegister >> 8);
  889. bytes[1] = (byte)(highRegister & 0xFF);
  890. bytes[2] = (byte)(lowRegister >> 8);
  891. bytes[3] = (byte)(lowRegister & 0xFF);
  892. break;
  893. }
  894. return bytes;
  895. }
  896. /// <summary>
  897. /// 切换使能
  898. /// </summary>
  899. public bool SwitchEnable()
  900. {
  901. bool result = ReadEnable(out bool Value);
  902. if(result)
  903. {
  904. return modbusTcpClient.WriteCoilsRegister(slaveId: 1, CoilsAddress: 24, values: !Value);
  905. }
  906. return result;
  907. }
  908. /// <summary>
  909. /// 切换闸门点动
  910. /// </summary>
  911. /// <param name="value">闸门编号</param>
  912. public bool SwitchValveJog(int value)
  913. {
  914. bool result = false;
  915. if (value >= 0 && value <= 7)
  916. {
  917. ushort valveJog = ReadValveJog();
  918. ushort mask = (ushort)(1 << value);
  919. result = modbusTcpClient.WriteSingleRegister(slaveId: 1, registerAddress: 238, value: (ushort)(valveJog^mask));
  920. }
  921. return result;
  922. }
  923. /// <summary>
  924. /// 写入送瓶轮运行速度
  925. /// </summary>
  926. /// <param name="result"></param>
  927. public bool WriteBottleFeedingWheelRunningSpeed(float result)
  928. {
  929. return modbusTcpClient.WriteSingleReal(slaveId: 1, startAddress: 1242, value: result);
  930. }
  931. /// <summary>
  932. /// 送瓶轮点动速度
  933. /// </summary>
  934. /// <param name="result"></param>
  935. public bool WriteBottleFeedingWheelJogRunningSpeed(float result)
  936. {
  937. return modbusTcpClient.WriteSingleReal(slaveId: 1, startAddress: 1246, value: result);
  938. }
  939. /// <summary>
  940. /// 送瓶轮回零偏移值
  941. /// </summary>
  942. /// <param name="result"></param>
  943. public bool WriteBottleFeedingWheelReturnToZeroOffsetValue(float result)
  944. {
  945. return modbusTcpClient.WriteSingleReal(slaveId: 1, startAddress: 1250, value: result);
  946. }
  947. /// <summary>
  948. /// 送瓶轮回零速度
  949. /// </summary>
  950. /// <param name="result"></param>
  951. public bool WriteBottleFeedingWheelReturnToZeroSpeed(float result)
  952. {
  953. return modbusTcpClient.WriteSingleReal(slaveId: 1, startAddress: 1254, value: result);
  954. }
  955. /// <summary>
  956. /// 送瓶轮定位长度
  957. /// </summary>
  958. /// <param name="result"></param>
  959. public bool WriteBottleFeedingWheelPositionLength(float result)
  960. {
  961. return modbusTcpClient.WriteSingleReal(slaveId: 1, startAddress: 1258, value: result);
  962. }
  963. /// <summary>
  964. /// 送瓶轮暂停时间
  965. /// </summary>
  966. /// <param name="result"></param>
  967. public bool WriteBottleFeedingWheelPauseTime(UInt32 result)
  968. {
  969. return modbusTcpClient.WriteSingleInt32(slaveId: 1, startAddress: 1262, value: result);
  970. }
  971. /// <summary>
  972. /// 下料延时
  973. /// </summary>
  974. /// <param name="result"></param>
  975. public bool WriteDelayBlanking(UInt32 result)
  976. {
  977. return modbusTcpClient.WriteSingleInt32(slaveId: 1, startAddress: 1266, value: result);
  978. }
  979. /// <summary>
  980. /// 读取闸门点动
  981. /// </summary>
  982. public ushort ReadValveJog()
  983. {
  984. ushort result = 0;
  985. if (modbusTcpClient.ReadHoldingRegisters(slaveId: 1, startAddress: 238, numRegisters: 1, out ushort[] returnValue))
  986. {
  987. result = returnValue[0];
  988. }
  989. else
  990. {
  991. result = 0;
  992. }
  993. return result;
  994. }
  995. }
  996. }