CommPLC.cs 57 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296
  1. using HslCommunication;
  2. using HslCommunication.ModBus;
  3. using HslCommunication.Profinet.Inovance;
  4. using HslCommunication.Profinet.Keyence;
  5. using HslCommunication.Profinet.Melsec;
  6. using HslCommunication.Profinet.Siemens;
  7. using System;
  8. using System.Collections.Generic;
  9. using System.Linq;
  10. using System.Net;
  11. using System.Net.Sockets;
  12. using System.Text;
  13. using System.Threading.Tasks;
  14. using System.Windows.Forms;
  15. using HslCommunication.Profinet.Omron;
  16. using System.Security.Cryptography;
  17. using System.IO.Ports;
  18. using System.Threading;
  19. namespace HRT_Measure
  20. {
  21. public class CommPLC
  22. {
  23. public EnumPLCProtocolType DeviceProtocolType;
  24. //网口
  25. public string IP ;
  26. public int Port;
  27. public string Name = "PLC通讯";
  28. //串口
  29. public string PortName;
  30. public int BaudRate;
  31. public int DataBit;
  32. public int StopBit;
  33. public Parity Parity;
  34. //
  35. public bool isPLCConnected = false;
  36. public CommPLC(string ip,int port,string name, EnumPLCProtocolType deviceProtocolType)
  37. {
  38. IP = ip;
  39. Port = port;
  40. Name = name;
  41. DeviceProtocolType = deviceProtocolType;
  42. Connect();
  43. }
  44. public CommPLC(string portName, int baudRate, int dataBit, int stopBit,Parity parity, EnumPLCProtocolType deviceProtocolType,string name)
  45. {
  46. PortName = portName;
  47. BaudRate = baudRate;
  48. DataBit = dataBit;
  49. StopBit = stopBit;
  50. Parity = parity;
  51. DeviceProtocolType = deviceProtocolType;
  52. Name = name;
  53. Connect();
  54. }
  55. #region PLCl类型
  56. public ModbusTcpNet busTcpClient = null;
  57. public ModbusTcpServer ModbusTcpServer = null;
  58. public MelsecMcNet melsec = null;
  59. public MelsecFxSerial fxSerial = null;//3U 3G 3GA
  60. public KeyenceMcNet keyenceNet = null;
  61. public InovanceTcpNet inovanceTcp = null;
  62. public KeyenceNanoSerialOverTcp keyenceOverTcp = null;//keyence自带协议
  63. public OmronFinsNet omronFinTcp = null;//NJ系列
  64. public ModbusRtu busRtuClient = null;
  65. public SiemensS7Net siemensS7Net = null;
  66. #endregion
  67. public bool Connect()
  68. {
  69. switch (DeviceProtocolType)
  70. {
  71. case EnumPLCProtocolType.Modbus串口通信:
  72. busRtuClient?.Close();
  73. busRtuClient = new ModbusRtu(1);
  74. busRtuClient.AddressStartWithZero = true;
  75. busRtuClient.DataFormat = HslCommunication.Core.DataFormat.CDAB;
  76. busRtuClient.IsStringReverse = false;
  77. try
  78. {
  79. busRtuClient.SerialPortInni(sp =>
  80. {
  81. sp.PortName = PortName;
  82. sp.BaudRate = BaudRate;
  83. sp.DataBits = DataBit;
  84. sp.StopBits = StopBit == 0 ? System.IO.Ports.StopBits.None : (StopBit == 1 ? System.IO.Ports.StopBits.One : System.IO.Ports.StopBits.Two);
  85. sp.Parity = Parity;
  86. });
  87. busRtuClient.Open();
  88. isPLCConnected = busRtuClient.IsOpen();// true;
  89. }
  90. catch (Exception ex)
  91. {
  92. isPLCConnected = false;
  93. MessageBox.Show("Modbus Rtu PLC连接失败 " + ex.ToString());
  94. }
  95. break;
  96. case EnumPLCProtocolType.ModbusClinet通信:
  97. busTcpClient?.ConnectClose();
  98. busTcpClient = new ModbusTcpNet(IP, Port, 0x01);
  99. busTcpClient.AddressStartWithZero = true;
  100. busTcpClient.IsStringReverse = false;
  101. busTcpClient.DataFormat = HslCommunication.Core.DataFormat.ABCD;
  102. try
  103. {
  104. OperateResult connect = busTcpClient.ConnectServer();
  105. isPLCConnected = connect.IsSuccess;
  106. }
  107. catch (Exception)
  108. {
  109. isPLCConnected = false;
  110. }
  111. break;
  112. case EnumPLCProtocolType.ModbusServer通信:
  113. ModbusTcpServer = new ModbusTcpServer();
  114. //ModbusTcpServer.OnDataReceived += BusTcpServer_OnDataReceived;
  115. ModbusTcpServer.DataFormat = HslCommunication.Core.DataFormat.CDAB;
  116. ModbusTcpServer.ServerStart(Port);
  117. isPLCConnected = true;
  118. break;
  119. case EnumPLCProtocolType.三菱MC:
  120. melsec = new MelsecMcNet();
  121. melsec.Port = Port;
  122. melsec.IpAddress = IP;
  123. melsec.ConnectClose();
  124. try
  125. {
  126. OperateResult connect = melsec.ConnectServer();
  127. isPLCConnected = connect.IsSuccess;
  128. }
  129. catch (Exception)
  130. {
  131. isPLCConnected = false;
  132. }
  133. break;
  134. case EnumPLCProtocolType.三菱FX:
  135. fxSerial?.Close();
  136. fxSerial = new MelsecFxSerial();
  137. try
  138. {
  139. fxSerial.SerialPortInni(sp =>
  140. {
  141. sp.PortName = PortName;
  142. sp.BaudRate = BaudRate;
  143. sp.DataBits = DataBit;
  144. sp.StopBits = StopBit == 0 ? System.IO.Ports.StopBits.None : (StopBit == 1 ? System.IO.Ports.StopBits.One : System.IO.Ports.StopBits.Two);
  145. sp.Parity = Parity;
  146. });
  147. fxSerial.Open();
  148. isPLCConnected = true;
  149. }
  150. catch (Exception ex)
  151. {
  152. isPLCConnected = false;
  153. MessageBox.Show("FX PLC连接失败 " + ex.ToString());
  154. }
  155. break;
  156. case EnumPLCProtocolType.基恩士KV:
  157. keyenceNet = new KeyenceMcNet();
  158. keyenceNet.Port = Port;
  159. keyenceNet.IpAddress = IP;
  160. keyenceNet.ConnectClose();
  161. try
  162. {
  163. OperateResult connect = keyenceNet.ConnectServer();
  164. isPLCConnected = connect.IsSuccess;
  165. }
  166. catch (Exception)
  167. {
  168. isPLCConnected = false;
  169. }
  170. break;
  171. case EnumPLCProtocolType.基恩士OverTcp:
  172. keyenceOverTcp = new KeyenceNanoSerialOverTcp();
  173. keyenceOverTcp.Port = Port;
  174. keyenceOverTcp.IpAddress = IP;
  175. keyenceOverTcp.ConnectClose();
  176. try
  177. {
  178. OperateResult connect = keyenceOverTcp.ConnectServer();
  179. isPLCConnected = connect.IsSuccess;
  180. }
  181. catch (Exception)
  182. {
  183. isPLCConnected = false;
  184. }
  185. break;
  186. case EnumPLCProtocolType.欧姆龙FinsTcp:
  187. omronFinTcp = new OmronFinsNet();
  188. omronFinTcp.Port = Port;
  189. omronFinTcp.IpAddress = IP;
  190. //omronFinTcp.SA1 = SA1;
  191. //omronFinTcp.DA2 = DA2;
  192. omronFinTcp.ByteTransform.DataFormat = HslCommunication.Core.DataFormat.CDAB;
  193. omronFinTcp.ConnectClose();
  194. try
  195. {
  196. OperateResult connect = omronFinTcp.ConnectServer();
  197. isPLCConnected = connect.IsSuccess;
  198. }
  199. catch (Exception)
  200. {
  201. isPLCConnected = false;
  202. }
  203. break;
  204. case EnumPLCProtocolType.汇川H5U:
  205. inovanceTcp = new InovanceTcpNet();
  206. inovanceTcp.IpAddress = IP;
  207. inovanceTcp.Port = Port;
  208. inovanceTcp.Series = InovanceSeries.H5U;
  209. inovanceTcp.DataFormat = HslCommunication.Core.DataFormat.CDAB;
  210. inovanceTcp.IsStringReverse = true;
  211. inovanceTcp.ConnectClose();
  212. try
  213. {
  214. OperateResult connect = inovanceTcp.ConnectServer();
  215. isPLCConnected = connect.IsSuccess;
  216. ProgramHelp.Instance.SaveMsg("PLC", $"PLC:{Name} {IP}:{Port}连接成功", true);
  217. }
  218. catch (Exception)
  219. {
  220. isPLCConnected = false;
  221. }
  222. break;
  223. case EnumPLCProtocolType.西门子1200:
  224. siemensS7Net = new SiemensS7Net(SiemensPLCS.S1200, IP);
  225. siemensS7Net.IpAddress = IP;
  226. siemensS7Net.Port = Port;
  227. siemensS7Net.ConnectClose();
  228. try
  229. {
  230. OperateResult connect = siemensS7Net.ConnectServer();
  231. isPLCConnected = connect.IsSuccess;// true;
  232. ProgramHelp.Instance.SaveMsg("PLC", $"PLC:{Name} {IP}:{Port}连接成功", true);
  233. }
  234. catch (Exception)
  235. {
  236. isPLCConnected = false;
  237. }
  238. break;
  239. }
  240. return isPLCConnected;
  241. }
  242. public void Close()
  243. {
  244. try
  245. {
  246. switch (DeviceProtocolType)
  247. {
  248. case EnumPLCProtocolType.Modbus串口通信:
  249. busRtuClient.Close();
  250. break;
  251. case EnumPLCProtocolType.ModbusClinet通信:
  252. busTcpClient?.ConnectClose();
  253. break;
  254. case EnumPLCProtocolType.ModbusServer通信:
  255. ModbusTcpServer?.ServerClose();
  256. break;
  257. case EnumPLCProtocolType.三菱MC:
  258. melsec?.ConnectClose();
  259. break;
  260. case EnumPLCProtocolType.三菱FX:
  261. fxSerial?.Close();
  262. break;
  263. case EnumPLCProtocolType.基恩士KV:
  264. keyenceNet?.ConnectClose();
  265. break;
  266. case EnumPLCProtocolType.基恩士OverTcp:
  267. keyenceOverTcp?.ConnectClose();
  268. break;
  269. case EnumPLCProtocolType.汇川H5U:
  270. inovanceTcp?.ConnectClose();
  271. break;
  272. case EnumPLCProtocolType.欧姆龙FinsTcp:
  273. omronFinTcp?.ConnectClose();
  274. break;
  275. case EnumPLCProtocolType.西门子1200:
  276. siemensS7Net?.ConnectClose();
  277. break;
  278. }
  279. }
  280. catch (Exception ex)
  281. {
  282. MessageBox.Show(ex.ToString());
  283. }
  284. isPLCConnected = false;
  285. }
  286. #region double
  287. public object objDouble = new object();
  288. public bool ReadDouble(string strAdd, out double dResult, out string strContent)
  289. {
  290. lock(objDouble)
  291. {
  292. dResult = 0;
  293. strContent = "";
  294. if (!isPLCConnected) return false;
  295. try
  296. {
  297. OperateResult<double> operateResult = new OperateResult<double>();
  298. switch (DeviceProtocolType)
  299. {
  300. case EnumPLCProtocolType.Modbus串口通信:
  301. operateResult = busRtuClient.ReadDouble(strAdd);
  302. break;
  303. case EnumPLCProtocolType.ModbusClinet通信:
  304. operateResult = busTcpClient.ReadDouble(strAdd);
  305. break;
  306. case EnumPLCProtocolType.ModbusServer通信:
  307. operateResult = ModbusTcpServer.ReadDouble(strAdd);
  308. break;
  309. case EnumPLCProtocolType.三菱MC:
  310. operateResult = melsec.ReadDouble(strAdd);
  311. break;
  312. case EnumPLCProtocolType.三菱FX:
  313. operateResult = fxSerial.ReadDouble(strAdd);
  314. break;
  315. case EnumPLCProtocolType.基恩士KV:
  316. operateResult = keyenceNet.ReadDouble(strAdd);
  317. break;
  318. case EnumPLCProtocolType.基恩士OverTcp:
  319. operateResult = keyenceOverTcp.ReadDouble(strAdd);
  320. break;
  321. case EnumPLCProtocolType.汇川H5U:
  322. operateResult = inovanceTcp.ReadDouble(strAdd);
  323. break;
  324. case EnumPLCProtocolType.欧姆龙FinsTcp:
  325. operateResult = omronFinTcp.ReadDouble(strAdd);
  326. break;
  327. case EnumPLCProtocolType.西门子1200:
  328. operateResult = siemensS7Net.ReadDouble(strAdd);
  329. break;
  330. }
  331. if (!operateResult.IsSuccess)
  332. {
  333. strContent = "read err :" + operateResult.Message;
  334. //MessageBox.Show($"Read Err ,地址 {strAdd} {operateResult.Message}");
  335. return false;
  336. }
  337. dResult = operateResult.Content;
  338. strContent = "read ok :" + dResult.ToString();
  339. return true;
  340. }
  341. catch (Exception ex)
  342. {
  343. strContent = ex.Message;
  344. return false;
  345. }
  346. }
  347. }
  348. public bool WriteDouble(string strAdd, double dData, out string strContent)
  349. {
  350. lock(objDouble)
  351. {
  352. strContent = "";
  353. if (!isPLCConnected) return false;
  354. try
  355. {
  356. OperateResult operateResult = new OperateResult();
  357. switch (DeviceProtocolType)
  358. {
  359. case EnumPLCProtocolType.Modbus串口通信:
  360. operateResult = busRtuClient.Write(strAdd, dData);
  361. break;
  362. case EnumPLCProtocolType.ModbusClinet通信:
  363. operateResult = busTcpClient.Write(strAdd, dData);
  364. break;
  365. case EnumPLCProtocolType.ModbusServer通信:
  366. operateResult = ModbusTcpServer.Write(strAdd, dData);
  367. break;
  368. case EnumPLCProtocolType.三菱MC:
  369. operateResult = melsec.Write(strAdd, dData);
  370. break;
  371. case EnumPLCProtocolType.三菱FX:
  372. operateResult = fxSerial.Write(strAdd, dData);
  373. break;
  374. case EnumPLCProtocolType.基恩士KV:
  375. operateResult = keyenceNet.Write(strAdd, dData);
  376. break;
  377. case EnumPLCProtocolType.基恩士OverTcp:
  378. operateResult = keyenceOverTcp.Write(strAdd, dData);
  379. break;
  380. case EnumPLCProtocolType.汇川H5U:
  381. inovanceTcp.Write(strAdd, dData);
  382. break;
  383. case EnumPLCProtocolType.欧姆龙FinsTcp:
  384. operateResult = omronFinTcp.Write(strAdd, dData);
  385. break;
  386. case EnumPLCProtocolType.西门子1200:
  387. operateResult = siemensS7Net.Write(strAdd, dData);
  388. break;
  389. }
  390. if (!operateResult.IsSuccess)
  391. {
  392. strContent = "write err :" + operateResult.Message;
  393. //MessageBox.Show($"Write err, 地址 {strAdd} {operateResult.Message}");
  394. return false;
  395. }
  396. strContent = "WriteSuccess " + operateResult.Message;
  397. return true;
  398. }
  399. catch (Exception ex)
  400. {
  401. strContent = ex.Message;
  402. return false;
  403. }
  404. }
  405. }
  406. #endregion
  407. #region float
  408. public object objFloat = new object();
  409. public bool ReadFloat(string strAdd, out float dResult, out string strContent)
  410. {
  411. lock(objFloat)
  412. {
  413. dResult = 0;
  414. strContent = "";
  415. if (!isPLCConnected) return false;
  416. try
  417. {
  418. OperateResult<float> operateResult = new OperateResult<float>();
  419. switch (DeviceProtocolType)
  420. {
  421. case EnumPLCProtocolType.Modbus串口通信:
  422. operateResult = busRtuClient.ReadFloat(strAdd);
  423. break;
  424. case EnumPLCProtocolType.ModbusClinet通信:
  425. operateResult = busTcpClient.ReadFloat(strAdd);
  426. break;
  427. case EnumPLCProtocolType.ModbusServer通信:
  428. operateResult = ModbusTcpServer.ReadFloat(strAdd);
  429. break;
  430. case EnumPLCProtocolType.三菱MC:
  431. operateResult = melsec.ReadFloat(strAdd);
  432. break;
  433. case EnumPLCProtocolType.三菱FX:
  434. operateResult = fxSerial.ReadFloat(strAdd);
  435. break;
  436. case EnumPLCProtocolType.基恩士KV:
  437. operateResult = keyenceNet.ReadFloat(strAdd);
  438. break;
  439. case EnumPLCProtocolType.基恩士OverTcp:
  440. operateResult = keyenceOverTcp.ReadFloat(strAdd);
  441. break;
  442. case EnumPLCProtocolType.汇川H5U:
  443. operateResult = inovanceTcp.ReadFloat(strAdd);
  444. break;
  445. case EnumPLCProtocolType.欧姆龙FinsTcp:
  446. operateResult = omronFinTcp.ReadFloat(strAdd);
  447. break;
  448. case EnumPLCProtocolType.西门子1200:
  449. operateResult = siemensS7Net.ReadFloat(strAdd);
  450. break;
  451. }
  452. if (!operateResult.IsSuccess)
  453. {
  454. strContent = "read err :" + operateResult.Message;
  455. //MessageBox.Show($"Read Err ,地址 {strAdd} {operateResult.Message}");
  456. return false;
  457. }
  458. dResult = operateResult.Content;
  459. strContent = "read ok :" + dResult.ToString();
  460. return true;
  461. }
  462. catch (Exception ex)
  463. {
  464. strContent = ex.Message;
  465. return false;
  466. }
  467. }
  468. }
  469. public bool WriteFloat(string strAdd, float fData, out string strContent)
  470. {
  471. lock(objFloat)
  472. {
  473. try
  474. {
  475. strContent = "";
  476. if (!isPLCConnected) return false;
  477. OperateResult operateResult = new OperateResult();
  478. switch (DeviceProtocolType)
  479. {
  480. case EnumPLCProtocolType.Modbus串口通信:
  481. operateResult = busRtuClient.Write(strAdd, fData);
  482. break;
  483. case EnumPLCProtocolType.ModbusClinet通信:
  484. operateResult = busTcpClient.Write(strAdd, fData);
  485. break;
  486. case EnumPLCProtocolType.ModbusServer通信:
  487. operateResult = ModbusTcpServer.Write(strAdd, fData);
  488. break;
  489. case EnumPLCProtocolType.三菱MC:
  490. operateResult = melsec.Write(strAdd, fData);
  491. break;
  492. case EnumPLCProtocolType.三菱FX:
  493. operateResult = fxSerial.Write(strAdd, fData);
  494. break;
  495. case EnumPLCProtocolType.基恩士KV:
  496. operateResult = keyenceNet.Write(strAdd, fData);
  497. break;
  498. case EnumPLCProtocolType.基恩士OverTcp:
  499. operateResult = keyenceOverTcp.Write(strAdd, fData);
  500. break;
  501. case EnumPLCProtocolType.汇川H5U:
  502. inovanceTcp.Write(strAdd, fData);
  503. break;
  504. case EnumPLCProtocolType.欧姆龙FinsTcp:
  505. omronFinTcp.Write(strAdd, fData);
  506. break;
  507. case EnumPLCProtocolType.西门子1200:
  508. operateResult = siemensS7Net.Write(strAdd, fData);
  509. break;
  510. }
  511. if (!operateResult.IsSuccess)
  512. {
  513. strContent = "write err :" + operateResult.Message;
  514. MessageBox.Show($"Write err, 地址 {strAdd} {operateResult.Message}");
  515. return false;
  516. }
  517. strContent = "WriteSuccess " + operateResult.Message;
  518. return true;
  519. }
  520. catch (Exception ex)
  521. {
  522. strContent = ex.Message;
  523. return false;
  524. }
  525. }
  526. }
  527. #endregion
  528. #region int
  529. public object objInt = new object();
  530. public bool ReadInt(string strAdd, out int iResult, out string strContent)
  531. {
  532. lock(objInt)
  533. {
  534. iResult = 0;
  535. strContent = "";
  536. if (!isPLCConnected) return false;
  537. try
  538. {
  539. OperateResult<int> operateResult = new OperateResult<int>();
  540. switch (DeviceProtocolType)
  541. {
  542. case EnumPLCProtocolType.Modbus串口通信:
  543. operateResult = busRtuClient.ReadInt32(strAdd);
  544. break;
  545. case EnumPLCProtocolType.ModbusClinet通信:
  546. operateResult = busTcpClient.ReadInt32(strAdd);
  547. break;
  548. case EnumPLCProtocolType.ModbusServer通信:
  549. operateResult = ModbusTcpServer.ReadInt32(strAdd);
  550. break;
  551. case EnumPLCProtocolType.三菱MC:
  552. operateResult = melsec.ReadInt32(strAdd);
  553. break;
  554. case EnumPLCProtocolType.三菱FX:
  555. operateResult = fxSerial.ReadInt32(strAdd);
  556. break;
  557. case EnumPLCProtocolType.基恩士KV:
  558. operateResult = keyenceNet.ReadInt32(strAdd);
  559. break;
  560. case EnumPLCProtocolType.基恩士OverTcp:
  561. operateResult = keyenceOverTcp.ReadInt32(strAdd);
  562. break;
  563. case EnumPLCProtocolType.汇川H5U:
  564. operateResult = inovanceTcp.ReadInt32(strAdd);
  565. break;
  566. case EnumPLCProtocolType.欧姆龙FinsTcp:
  567. operateResult = omronFinTcp.ReadInt32(strAdd);
  568. break;
  569. case EnumPLCProtocolType.西门子1200:
  570. operateResult = siemensS7Net.ReadInt32(strAdd);
  571. break;
  572. }
  573. if (!operateResult.IsSuccess)
  574. {
  575. strContent = "read err :" + operateResult.Message;
  576. //MessageBox.Show($"Read Err ,地址 {strAdd} {operateResult.Message}");
  577. return false;
  578. }
  579. iResult = operateResult.Content;
  580. strContent = "read ok :" + iResult.ToString();
  581. return true;
  582. }
  583. catch (Exception ex)
  584. {
  585. strContent = ex.Message;
  586. return false;
  587. }
  588. }
  589. }
  590. public bool WriteInt(string strAdd, int iData, out string strContent)
  591. {
  592. lock(objInt)
  593. {
  594. try
  595. {
  596. strContent = "";
  597. if (!isPLCConnected) return false;
  598. OperateResult operateResult = new OperateResult();
  599. switch (DeviceProtocolType)
  600. {
  601. case EnumPLCProtocolType.Modbus串口通信:
  602. operateResult = busRtuClient.Write(strAdd, iData);
  603. break;
  604. case EnumPLCProtocolType.ModbusClinet通信:
  605. operateResult = busTcpClient.Write(strAdd, iData);
  606. break;
  607. case EnumPLCProtocolType.ModbusServer通信:
  608. operateResult = ModbusTcpServer.Write(strAdd, iData);
  609. break;
  610. case EnumPLCProtocolType.三菱MC:
  611. operateResult = melsec.Write(strAdd, iData);
  612. break;
  613. case EnumPLCProtocolType.三菱FX:
  614. operateResult = fxSerial.Write(strAdd, iData);
  615. break;
  616. case EnumPLCProtocolType.基恩士KV:
  617. operateResult = keyenceNet.Write(strAdd, iData);
  618. break;
  619. case EnumPLCProtocolType.基恩士OverTcp:
  620. operateResult = keyenceOverTcp.Write(strAdd, iData);
  621. break;
  622. case EnumPLCProtocolType.汇川H5U:
  623. operateResult = inovanceTcp.Write(strAdd, iData);
  624. break;
  625. case EnumPLCProtocolType.欧姆龙FinsTcp:
  626. operateResult = omronFinTcp.Write(strAdd, iData);
  627. break;
  628. case EnumPLCProtocolType.西门子1200:
  629. operateResult = siemensS7Net.Write(strAdd, iData);
  630. break;
  631. }
  632. if (!operateResult.IsSuccess)
  633. {
  634. strContent = "write err :" + operateResult.Message;
  635. //MessageBox.Show($"Write err, 地址 {strAdd} {operateResult.Message}");
  636. return false;
  637. }
  638. strContent = "WriteSuccess " + operateResult.Message;
  639. return true;
  640. }
  641. catch (Exception ex)
  642. {
  643. strContent = ex.Message;
  644. return false;
  645. }
  646. }
  647. }
  648. #endregion
  649. #region Dint
  650. public object objDInt = new object();
  651. public bool ReadInt64(string strAdd, out Int64 iResult, out string strContent)
  652. {
  653. lock (objDInt)
  654. {
  655. iResult = 0;
  656. strContent = "";
  657. if (!isPLCConnected) return false;
  658. try
  659. {
  660. OperateResult<Int64> operateResult = new OperateResult<Int64>();
  661. switch (DeviceProtocolType)
  662. {
  663. case EnumPLCProtocolType.Modbus串口通信:
  664. operateResult = busRtuClient.ReadInt64(strAdd);
  665. break;
  666. case EnumPLCProtocolType.ModbusClinet通信:
  667. operateResult = busTcpClient.ReadInt64(strAdd);
  668. break;
  669. case EnumPLCProtocolType.ModbusServer通信:
  670. operateResult = ModbusTcpServer.ReadInt64(strAdd);
  671. break;
  672. case EnumPLCProtocolType.三菱MC:
  673. operateResult = melsec.ReadInt64(strAdd);
  674. break;
  675. case EnumPLCProtocolType.三菱FX:
  676. operateResult = fxSerial.ReadInt64(strAdd);
  677. break;
  678. case EnumPLCProtocolType.基恩士KV:
  679. operateResult = keyenceNet.ReadInt64(strAdd);
  680. break;
  681. case EnumPLCProtocolType.基恩士OverTcp:
  682. operateResult = keyenceOverTcp.ReadInt64(strAdd);
  683. break;
  684. case EnumPLCProtocolType.汇川H5U:
  685. operateResult = inovanceTcp.ReadInt64(strAdd);
  686. break;
  687. case EnumPLCProtocolType.欧姆龙FinsTcp:
  688. operateResult = omronFinTcp.ReadInt64(strAdd);
  689. break;
  690. case EnumPLCProtocolType.西门子1200:
  691. operateResult = siemensS7Net.ReadInt64(strAdd);
  692. break;
  693. }
  694. if (!operateResult.IsSuccess)
  695. {
  696. strContent = "read err :" + operateResult.Message;
  697. //MessageBox.Show($"Read Err ,地址 {strAdd} {operateResult.Message}");
  698. return false;
  699. }
  700. iResult = operateResult.Content;
  701. strContent = "read ok :" + iResult.ToString();
  702. return true;
  703. }
  704. catch (Exception ex)
  705. {
  706. strContent = ex.Message;
  707. return false;
  708. }
  709. }
  710. }
  711. public bool WriteInt64(string strAdd, Int64 iData, out string strContent)
  712. {
  713. lock (objDInt)
  714. {
  715. try
  716. {
  717. strContent = "";
  718. if (!isPLCConnected) return false;
  719. OperateResult operateResult = new OperateResult();
  720. switch (DeviceProtocolType)
  721. {
  722. case EnumPLCProtocolType.Modbus串口通信:
  723. operateResult = busRtuClient.Write(strAdd, iData);
  724. break;
  725. case EnumPLCProtocolType.ModbusClinet通信:
  726. operateResult = busTcpClient.Write(strAdd, iData);
  727. break;
  728. case EnumPLCProtocolType.ModbusServer通信:
  729. operateResult = ModbusTcpServer.Write(strAdd, iData);
  730. break;
  731. case EnumPLCProtocolType.三菱MC:
  732. operateResult = melsec.Write(strAdd, iData);
  733. break;
  734. case EnumPLCProtocolType.三菱FX:
  735. operateResult = fxSerial.Write(strAdd, iData);
  736. break;
  737. case EnumPLCProtocolType.基恩士KV:
  738. operateResult = keyenceNet.Write(strAdd, iData);
  739. break;
  740. case EnumPLCProtocolType.基恩士OverTcp:
  741. operateResult = keyenceOverTcp.Write(strAdd, iData);
  742. break;
  743. case EnumPLCProtocolType.汇川H5U:
  744. operateResult = inovanceTcp.Write(strAdd, iData);
  745. break;
  746. case EnumPLCProtocolType.欧姆龙FinsTcp:
  747. operateResult = omronFinTcp.Write(strAdd, iData);
  748. break;
  749. case EnumPLCProtocolType.西门子1200:
  750. operateResult = siemensS7Net.Write(strAdd, iData);
  751. break;
  752. }
  753. if (!operateResult.IsSuccess)
  754. {
  755. strContent = "write err :" + operateResult.Message;
  756. //MessageBox.Show($"Write err, 地址 {strAdd} {operateResult.Message}");
  757. return false;
  758. }
  759. strContent = "WriteSuccess " + operateResult.Message;
  760. return true;
  761. }
  762. catch (Exception ex)
  763. {
  764. strContent = ex.Message;
  765. return false;
  766. }
  767. }
  768. }
  769. #endregion
  770. #region short
  771. public object objShort = new object();
  772. public bool WriteShort(string strAdd, short iResult, out string strContent)
  773. {
  774. lock(objShort)
  775. {
  776. try
  777. {
  778. strContent = "";
  779. if (!isPLCConnected) return false;
  780. OperateResult operateResult = new OperateResult();
  781. switch (DeviceProtocolType)
  782. {
  783. case EnumPLCProtocolType.Modbus串口通信:
  784. operateResult = busRtuClient.Write(strAdd, iResult);
  785. break;
  786. case EnumPLCProtocolType.ModbusClinet通信:
  787. operateResult = busTcpClient.Write(strAdd, iResult);
  788. break;
  789. case EnumPLCProtocolType.ModbusServer通信:
  790. operateResult = ModbusTcpServer.Write(strAdd, iResult);
  791. break;
  792. case EnumPLCProtocolType.三菱MC:
  793. operateResult = melsec.Write(strAdd, iResult);
  794. break;
  795. case EnumPLCProtocolType.三菱FX:
  796. operateResult = fxSerial.Write(strAdd, iResult);
  797. break;
  798. case EnumPLCProtocolType.基恩士KV:
  799. operateResult = keyenceNet.Write(strAdd, iResult);
  800. break;
  801. case EnumPLCProtocolType.基恩士OverTcp:
  802. operateResult = keyenceOverTcp.Write(strAdd, iResult);
  803. break;
  804. case EnumPLCProtocolType.汇川H5U:
  805. operateResult = inovanceTcp.Write(strAdd, iResult);
  806. break;
  807. case EnumPLCProtocolType.欧姆龙FinsTcp:
  808. operateResult = omronFinTcp.Write(strAdd, iResult);
  809. break;
  810. case EnumPLCProtocolType.西门子1200:
  811. operateResult = siemensS7Net.Write(strAdd, iResult);
  812. break;
  813. }
  814. if (!operateResult.IsSuccess)
  815. {
  816. strContent = "write err :" + operateResult.Message;
  817. //MessageBox.Show($"Write err, 地址 {strAdd} {operateResult.Message}");
  818. return false;
  819. }
  820. strContent = "WriteSuccess " + operateResult.Message;
  821. return true;
  822. }
  823. catch (Exception ex)
  824. {
  825. strContent = ex.Message;
  826. return false;
  827. }
  828. }
  829. }
  830. public bool ReadShort(string strAdd, out short iResult, out string strContent)
  831. {
  832. lock(objShort)
  833. {
  834. iResult = 0;
  835. strContent = "";
  836. if (!isPLCConnected) return false;
  837. try
  838. {
  839. OperateResult<short> operateResult = new OperateResult<short>();
  840. switch (DeviceProtocolType)
  841. {
  842. case EnumPLCProtocolType.Modbus串口通信:
  843. operateResult = busRtuClient.ReadInt16(strAdd);
  844. break;
  845. case EnumPLCProtocolType.ModbusClinet通信:
  846. operateResult = busTcpClient.ReadInt16(strAdd);
  847. break;
  848. case EnumPLCProtocolType.ModbusServer通信:
  849. operateResult = ModbusTcpServer.ReadInt16(strAdd);
  850. break;
  851. case EnumPLCProtocolType.三菱MC:
  852. operateResult = melsec.ReadInt16(strAdd);
  853. break;
  854. case EnumPLCProtocolType.三菱FX:
  855. operateResult = fxSerial.ReadInt16(strAdd);
  856. break;
  857. case EnumPLCProtocolType.基恩士KV:
  858. operateResult = keyenceNet.ReadInt16(strAdd);
  859. break;
  860. case EnumPLCProtocolType.基恩士OverTcp:
  861. operateResult = keyenceOverTcp.ReadInt16(strAdd);
  862. break;
  863. case EnumPLCProtocolType.汇川H5U:
  864. operateResult = inovanceTcp.ReadInt16(strAdd);
  865. break;
  866. case EnumPLCProtocolType.欧姆龙FinsTcp:
  867. operateResult = omronFinTcp.ReadInt16(strAdd);
  868. break;
  869. case EnumPLCProtocolType.西门子1200:
  870. operateResult = siemensS7Net.ReadInt16(strAdd);
  871. break;
  872. }
  873. if (!operateResult.IsSuccess)
  874. {
  875. strContent = "read err :" + operateResult.Message;
  876. //MessageBox.Show($"Read Err ,地址 {strAdd} {operateResult.Message}");
  877. return false;
  878. }
  879. iResult = operateResult.Content;
  880. strContent = "read ok :" + iResult.ToString();
  881. return true;
  882. }
  883. catch (Exception ex)
  884. {
  885. strContent = ex.Message;
  886. return false;
  887. }
  888. }
  889. }
  890. #endregion
  891. #region ushort
  892. public object objUshort = new object();
  893. public bool WriteUShort(string strAdd, ushort iResult, out string strContent)
  894. {
  895. lock(objUshort)
  896. {
  897. try
  898. {
  899. strContent = "";
  900. if (!isPLCConnected) return false;
  901. OperateResult operateResult = new OperateResult();
  902. switch (DeviceProtocolType)
  903. {
  904. case EnumPLCProtocolType.Modbus串口通信:
  905. operateResult = busRtuClient.Write(strAdd, iResult);
  906. break;
  907. case EnumPLCProtocolType.ModbusClinet通信:
  908. operateResult = busTcpClient.Write(strAdd, iResult);
  909. break;
  910. case EnumPLCProtocolType.ModbusServer通信:
  911. operateResult = ModbusTcpServer.Write(strAdd, iResult);
  912. break;
  913. case EnumPLCProtocolType.三菱MC:
  914. operateResult = melsec.Write(strAdd, iResult);
  915. break;
  916. case EnumPLCProtocolType.三菱FX:
  917. operateResult = fxSerial.Write(strAdd, iResult);
  918. break;
  919. case EnumPLCProtocolType.基恩士KV:
  920. operateResult = keyenceNet.Write(strAdd, iResult);
  921. break;
  922. case EnumPLCProtocolType.基恩士OverTcp:
  923. operateResult = keyenceOverTcp.Write(strAdd, iResult);
  924. break;
  925. case EnumPLCProtocolType.汇川H5U:
  926. operateResult = inovanceTcp.Write(strAdd, iResult);
  927. break;
  928. case EnumPLCProtocolType.欧姆龙FinsTcp:
  929. operateResult = omronFinTcp.Write(strAdd, iResult);
  930. break;
  931. case EnumPLCProtocolType.西门子1200:
  932. operateResult = siemensS7Net.Write(strAdd, iResult);
  933. break;
  934. }
  935. if (!operateResult.IsSuccess)
  936. {
  937. strContent = "write err :" + operateResult.Message;
  938. //MessageBox.Show($"Write err, 地址 {strAdd} {operateResult.Message}");
  939. return false;
  940. }
  941. strContent = "WriteSuccess " + operateResult.Message;
  942. return true;
  943. }
  944. catch (Exception ex)
  945. {
  946. strContent = ex.Message;
  947. return false;
  948. }
  949. }
  950. }
  951. public bool ReadUshort(string strAdd, out ushort iResult, out string strContent)
  952. {
  953. lock(objUshort)
  954. {
  955. iResult = 0;
  956. strContent = "";
  957. if (!isPLCConnected) return false;
  958. try
  959. {
  960. OperateResult<ushort> operateResult = new OperateResult<ushort>();
  961. switch (DeviceProtocolType)
  962. {
  963. case EnumPLCProtocolType.Modbus串口通信:
  964. operateResult = busRtuClient.ReadUInt16(strAdd);
  965. break;
  966. case EnumPLCProtocolType.ModbusClinet通信:
  967. operateResult = busTcpClient.ReadUInt16(strAdd);
  968. break;
  969. case EnumPLCProtocolType.ModbusServer通信:
  970. operateResult = ModbusTcpServer.ReadUInt16(strAdd);
  971. break;
  972. case EnumPLCProtocolType.三菱MC:
  973. operateResult = melsec.ReadUInt16(strAdd);
  974. break;
  975. case EnumPLCProtocolType.三菱FX:
  976. operateResult = fxSerial.ReadUInt16(strAdd);
  977. break;
  978. case EnumPLCProtocolType.基恩士KV:
  979. operateResult = keyenceNet.ReadUInt16(strAdd);
  980. break;
  981. case EnumPLCProtocolType.基恩士OverTcp:
  982. operateResult = keyenceOverTcp.ReadUInt16(strAdd);
  983. break;
  984. case EnumPLCProtocolType.汇川H5U:
  985. operateResult = inovanceTcp.ReadUInt16(strAdd);
  986. break;
  987. case EnumPLCProtocolType.欧姆龙FinsTcp:
  988. operateResult = omronFinTcp.ReadUInt16(strAdd);
  989. break;
  990. case EnumPLCProtocolType.西门子1200:
  991. operateResult = siemensS7Net.ReadUInt16(strAdd);
  992. break;
  993. }
  994. if (!operateResult.IsSuccess)
  995. {
  996. strContent = "read err :" + operateResult.Message;
  997. //MessageBox.Show($"Read Err ,地址 {strAdd} {operateResult.Message}");
  998. return false;
  999. }
  1000. iResult = operateResult.Content;
  1001. strContent = "read ok :" + iResult.ToString();
  1002. return true;
  1003. }
  1004. catch (Exception ex)
  1005. {
  1006. strContent = ex.Message;
  1007. return false;
  1008. }
  1009. }
  1010. }
  1011. #endregion
  1012. #region string
  1013. public object objString = new object();
  1014. public bool ReadString(string strAdd, out string strResult, out string strContent)
  1015. {
  1016. lock(objString)
  1017. {
  1018. strResult = "";
  1019. strContent = "";
  1020. if (!isPLCConnected) return false;
  1021. try
  1022. {
  1023. OperateResult<string> operateResult = new OperateResult<string>();
  1024. switch (DeviceProtocolType)
  1025. {
  1026. case EnumPLCProtocolType.Modbus串口通信:
  1027. operateResult = busRtuClient.ReadString(strAdd, 10);
  1028. break;
  1029. case EnumPLCProtocolType.ModbusClinet通信:
  1030. operateResult = busTcpClient.ReadString(strAdd, 10);
  1031. break;
  1032. case EnumPLCProtocolType.ModbusServer通信:
  1033. operateResult = ModbusTcpServer.ReadString(strAdd, 10);
  1034. break;
  1035. case EnumPLCProtocolType.三菱MC:
  1036. operateResult = melsec.ReadString(strAdd, 10);
  1037. break;
  1038. case EnumPLCProtocolType.三菱FX:
  1039. operateResult = fxSerial.ReadString(strAdd, 10);
  1040. break;
  1041. case EnumPLCProtocolType.基恩士KV:
  1042. operateResult = keyenceNet.ReadString(strAdd, 10);
  1043. break;
  1044. case EnumPLCProtocolType.基恩士OverTcp:
  1045. operateResult = keyenceOverTcp.ReadString(strAdd, 10);
  1046. break;
  1047. case EnumPLCProtocolType.汇川H5U:
  1048. operateResult = inovanceTcp.ReadString(strAdd, 10);
  1049. break;
  1050. case EnumPLCProtocolType.欧姆龙FinsTcp:
  1051. operateResult = omronFinTcp.ReadString(strAdd, 10);
  1052. break;
  1053. case EnumPLCProtocolType.西门子1200:
  1054. operateResult = siemensS7Net.ReadString(strAdd, 10);
  1055. break;
  1056. }
  1057. if (!operateResult.IsSuccess)
  1058. {
  1059. strContent = "read err :" + operateResult.Message;
  1060. //MessageBox.Show($"Read Err ,地址 {strAdd} {operateResult.Message}");
  1061. return false;
  1062. }
  1063. strResult = operateResult.Content;
  1064. strContent = "read ok :" + strResult;
  1065. return true;
  1066. }
  1067. catch (Exception ex)
  1068. {
  1069. strContent = ex.Message;
  1070. return false;
  1071. }
  1072. }
  1073. }
  1074. public bool WriteString(string strAdd, string strData, out string strContent)
  1075. {
  1076. lock(objString)
  1077. {
  1078. try
  1079. {
  1080. strContent = "";
  1081. if (!isPLCConnected) return false;
  1082. OperateResult operateResult = new OperateResult();
  1083. switch (DeviceProtocolType)
  1084. {
  1085. case EnumPLCProtocolType.Modbus串口通信:
  1086. operateResult = busRtuClient.Write(strAdd, strData);
  1087. break;
  1088. case EnumPLCProtocolType.ModbusClinet通信:
  1089. operateResult = busTcpClient.Write(strAdd, strData);
  1090. break;
  1091. case EnumPLCProtocolType.ModbusServer通信:
  1092. operateResult = ModbusTcpServer.Write(strAdd, strData);
  1093. break;
  1094. case EnumPLCProtocolType.三菱MC:
  1095. operateResult = melsec.Write(strAdd, strData);
  1096. break;
  1097. case EnumPLCProtocolType.三菱FX:
  1098. operateResult = fxSerial.Write(strAdd, strData);
  1099. break;
  1100. case EnumPLCProtocolType.基恩士KV:
  1101. operateResult = keyenceNet.Write(strAdd, strData);
  1102. break;
  1103. case EnumPLCProtocolType.基恩士OverTcp:
  1104. operateResult = keyenceOverTcp.Write(strAdd, strData);
  1105. break;
  1106. case EnumPLCProtocolType.汇川H5U:
  1107. operateResult = inovanceTcp.Write(strAdd, strData, Encoding.ASCII);
  1108. break;
  1109. case EnumPLCProtocolType.欧姆龙FinsTcp:
  1110. operateResult = omronFinTcp.Write(strAdd, strData);
  1111. break;
  1112. case EnumPLCProtocolType.西门子1200:
  1113. operateResult = siemensS7Net.Write(strAdd, strData);
  1114. break;
  1115. }
  1116. if (!operateResult.IsSuccess)
  1117. {
  1118. strContent = "write err :" + operateResult.Message;
  1119. //MessageBox.Show($"Write err, 地址 {strAdd} {operateResult.Message}");
  1120. return false;
  1121. }
  1122. strContent = "WriteSuccess " + operateResult.Message;
  1123. return true;
  1124. }
  1125. catch (Exception ex)
  1126. {
  1127. strContent = ex.Message;
  1128. return false;
  1129. }
  1130. }
  1131. }
  1132. #endregion
  1133. #region Coin
  1134. public object objBool = new object();
  1135. public bool ReadCoin(string strAdd, out bool bResult, out string strContent)
  1136. {
  1137. lock(objBool)
  1138. {
  1139. bResult = false;
  1140. strContent = "";
  1141. if (!isPLCConnected) return false;
  1142. try
  1143. {
  1144. OperateResult<bool> operateResult = new OperateResult<bool>();
  1145. switch (DeviceProtocolType)
  1146. {
  1147. case EnumPLCProtocolType.Modbus串口通信:
  1148. operateResult = busRtuClient.ReadCoil(strAdd);
  1149. break;
  1150. case EnumPLCProtocolType.ModbusClinet通信:
  1151. operateResult = busTcpClient.ReadCoil(strAdd);
  1152. break;
  1153. case EnumPLCProtocolType.ModbusServer通信:
  1154. operateResult = ModbusTcpServer.ReadBool(strAdd);
  1155. break;
  1156. case EnumPLCProtocolType.三菱MC:
  1157. operateResult = melsec.ReadBool(strAdd);
  1158. break;
  1159. case EnumPLCProtocolType.三菱FX:
  1160. operateResult = fxSerial.ReadBool(strAdd);
  1161. break;
  1162. case EnumPLCProtocolType.基恩士KV:
  1163. operateResult = keyenceNet.ReadBool(strAdd);
  1164. break;
  1165. case EnumPLCProtocolType.基恩士OverTcp:
  1166. operateResult = keyenceOverTcp.ReadBool(strAdd);
  1167. break;
  1168. case EnumPLCProtocolType.汇川H5U:
  1169. operateResult = inovanceTcp.ReadCoil(strAdd);
  1170. break;
  1171. case EnumPLCProtocolType.欧姆龙FinsTcp:
  1172. operateResult = omronFinTcp.ReadBool(strAdd);
  1173. break;
  1174. case EnumPLCProtocolType.西门子1200:
  1175. operateResult = siemensS7Net.ReadBool(strAdd);
  1176. break;
  1177. }
  1178. if (!operateResult.IsSuccess)
  1179. {
  1180. strContent = "read err :" + operateResult.Message;
  1181. //MessageBox.Show($"Read Err ,地址 {strAdd} {operateResult.Message}");
  1182. return false;
  1183. }
  1184. bResult = operateResult.Content;
  1185. strContent = "read ok :" + bResult;
  1186. return true;
  1187. }
  1188. catch (Exception ex)
  1189. {
  1190. strContent = ex.Message;
  1191. return false;
  1192. }
  1193. }
  1194. }
  1195. public bool WriteCoin(string strAdd, bool isOn, out string strContent)
  1196. {
  1197. lock(objBool)
  1198. {
  1199. try
  1200. {
  1201. strContent = "";
  1202. if (!isPLCConnected) return false;
  1203. OperateResult operateResult = new OperateResult();
  1204. switch (DeviceProtocolType)
  1205. {
  1206. case EnumPLCProtocolType.Modbus串口通信:
  1207. operateResult = busRtuClient.Write(strAdd, isOn);
  1208. break;
  1209. case EnumPLCProtocolType.ModbusClinet通信:
  1210. operateResult = busTcpClient.Write(strAdd, isOn);
  1211. break;
  1212. case EnumPLCProtocolType.ModbusServer通信:
  1213. operateResult = ModbusTcpServer.Write(strAdd, isOn);
  1214. break;
  1215. case EnumPLCProtocolType.三菱MC:
  1216. operateResult = melsec.Write(strAdd, isOn);
  1217. break;
  1218. case EnumPLCProtocolType.三菱FX:
  1219. operateResult = fxSerial.Write(strAdd, isOn);
  1220. break;
  1221. case EnumPLCProtocolType.基恩士KV:
  1222. operateResult = keyenceNet.Write(strAdd, isOn);
  1223. break;
  1224. case EnumPLCProtocolType.基恩士OverTcp:
  1225. operateResult = keyenceOverTcp.Write(strAdd, isOn);
  1226. break;
  1227. case EnumPLCProtocolType.汇川H5U:
  1228. operateResult = inovanceTcp.Write(strAdd, isOn);
  1229. break;
  1230. case EnumPLCProtocolType.欧姆龙FinsTcp:
  1231. operateResult = omronFinTcp.Write(strAdd, isOn);
  1232. break;
  1233. case EnumPLCProtocolType.西门子1200:
  1234. operateResult = siemensS7Net.Write(strAdd, isOn);
  1235. break;
  1236. }
  1237. if (!operateResult.IsSuccess)
  1238. {
  1239. strContent = "write err :" + operateResult.Message;
  1240. //MessageBox.Show($"Write err, 地址 {strAdd} {operateResult.Message}");
  1241. return false;
  1242. }
  1243. strContent = "WriteSuccess " + operateResult.Message;
  1244. return true;
  1245. }
  1246. catch (Exception ex)
  1247. {
  1248. strContent = ex.Message;
  1249. return false;
  1250. }
  1251. }
  1252. }
  1253. #endregion
  1254. }
  1255. }