DeviceS7.cs 8.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231
  1. using HslCommunication.Profinet.Omron;
  2. using HslCommunication.Profinet.Siemens;
  3. using System;
  4. using System.Collections.Generic;
  5. using System.Linq;
  6. using System.Net;
  7. using System.Text;
  8. using System.Threading.Tasks;
  9. namespace YG.Device
  10. {
  11. public class DeviceS7 : DeviceList
  12. {
  13. public SiemensS7Net SiemensS7Net { get; set; }
  14. private SiemensPLCS siemensPLCS;
  15. private string ip;
  16. public DeviceS7(SiemensPLCS _siemensPLCS, string _ip, int port = 102)
  17. {
  18. siemensPLCS = _siemensPLCS;
  19. ip = _ip;
  20. SiemensS7Net = new SiemensS7Net(siemensPLCS, ip) { ConnectTimeOut = 5000 };
  21. SiemensS7Net.ConnectionId = Guid.NewGuid().ToString();
  22. }
  23. public HslCommunication.OperateResult ConnectionResult { get; set; }
  24. public override void DeviceInit()
  25. {
  26. ConnectionResult = SiemensS7Net.ConnectServer();
  27. base.DeviceInit();
  28. }
  29. bool isShow = false;
  30. public override void DeviceState()
  31. {
  32. Task.Factory.StartNew(async () =>
  33. {
  34. while (true)
  35. {
  36. await Task.Delay(200);
  37. if (!ConnectionResult.IsSuccess&&ip.Ping())
  38. {
  39. if (!isShow)
  40. {
  41. isShow = true;
  42. System.Windows.Forms.MessageBox.Show($"PLC{SiemensS7Net.IpAddress} 连接失败!{ConnectionResult.Message}");
  43. }
  44. }
  45. }
  46. });
  47. base.DeviceState();
  48. }
  49. public override T DeviceRead<T>(string value, ushort leng =0)
  50. {
  51. Type tp = typeof(T);
  52. {
  53. if (tp.Equals(typeof(short)))
  54. {
  55. var operateResult = SiemensS7Net.ReadInt16(value);
  56. return (T)(object)operateResult.Content;
  57. }
  58. else if (tp.Equals(typeof(bool)))
  59. {
  60. var operateResult = SiemensS7Net.ReadBool(value);
  61. return (T)(object)operateResult.Content;
  62. }
  63. else if (tp.Equals(typeof(int)))
  64. {
  65. var operateResult = SiemensS7Net.ReadInt32(value);
  66. return (T)(object)operateResult.Content;
  67. }
  68. else if (tp.Equals(typeof(long)))
  69. {
  70. var operateResult = SiemensS7Net.ReadInt64(value);
  71. return (T)(object)operateResult.Content;
  72. }
  73. else if (tp.Equals(typeof(byte[])))
  74. {
  75. var operateResult= SiemensS7Net.Read(value, leng);
  76. return (T)(object)operateResult.Content;
  77. }
  78. else if (tp.Equals(typeof(string)))
  79. {
  80. var operateResult = SiemensS7Net.ReadString(value, leng, Encoding.ASCII);
  81. return (T)(object)operateResult.Content;
  82. }
  83. }
  84. return default(T);
  85. }
  86. public string DeviceRead(string value, string readType,ushort leng=0)
  87. {
  88. string retResponse = "";
  89. if (readType.Equals("1")) //short
  90. {
  91. var operateResult = SiemensS7Net.ReadInt16(value);
  92. retResponse = operateResult.Content.ToString();
  93. return retResponse;
  94. }
  95. else if (readType.Equals("2"))//bool
  96. {
  97. var operateResult = SiemensS7Net.ReadBool(value);
  98. retResponse = operateResult.Content.ToString();
  99. return retResponse;
  100. }
  101. else if (readType.Equals("3"))//int
  102. {
  103. var operateResult = SiemensS7Net.ReadInt32(value);
  104. retResponse = operateResult.Content.ToString();
  105. return retResponse;
  106. }
  107. else if (readType.Equals("4"))//long
  108. {
  109. var operateResult = SiemensS7Net.ReadInt64(value);
  110. retResponse = operateResult.Content.ToString();
  111. return retResponse;
  112. }
  113. else if (readType.Equals("5")) //string
  114. {
  115. var operateResult = SiemensS7Net.ReadString(value, leng,Encoding.ASCII);
  116. retResponse = operateResult.Content.ToString();
  117. return retResponse;
  118. }
  119. return retResponse;
  120. }
  121. public override object Clone()
  122. {
  123. return this.MemberwiseClone();
  124. }
  125. /// <summary>
  126. ///
  127. /// </summary>
  128. /// <param name="ob">地址</param>
  129. /// <param name="ob1">地址的值</param>
  130. public override void DeviceSend(object ob, object ob1)
  131. {
  132. System.Threading.Thread.Sleep(100);
  133. HslCommunication.OperateResult resultt = new HslCommunication.OperateResult() { IsSuccess = false, Message = "resutt为空" };
  134. if (ConnectionResult.IsSuccess)
  135. {
  136. Type ty = ob1.GetType();
  137. if (ty == typeof(string))
  138. {
  139. resultt = SiemensS7Net.Write(ob.ToString(), ob1.ToString());
  140. }
  141. else if (ty == typeof(int))
  142. {
  143. resultt = SiemensS7Net.Write(ob.ToString(), (int)ob1);
  144. }
  145. else if (ty == typeof(byte))
  146. {
  147. resultt = SiemensS7Net.Write(ob.ToString(), (byte)ob1);
  148. }
  149. else if (ty == typeof(byte[]))
  150. {
  151. resultt = SiemensS7Net.Write(ob.ToString(), (byte[])ob1);
  152. }
  153. else if (ty == typeof(short))
  154. {
  155. if (short.TryParse(ob1.ToString(), out short value))
  156. {
  157. resultt = SiemensS7Net.Write(ob.ToString(), (short)value);
  158. }
  159. }
  160. else if (ty == typeof(bool))
  161. {
  162. resultt = SiemensS7Net.Write(ob.ToString(), (bool)ob1);
  163. }
  164. YG.Log.Instance.WriteLogAdd($"{SiemensS7Net.IpAddress}+地址{ob.ToString()}+写入值{ob1.ToString()}+写入结果:{ resultt.IsSuccess}+信息提示{resultt.Message}");
  165. }
  166. base.DeviceSend(ob, ob1);
  167. }
  168. public override void DeviceSend(object ob, object ob1, string readType)
  169. {
  170. System.Threading.Thread.Sleep(100);
  171. HslCommunication.OperateResult resultt = new HslCommunication.OperateResult() { IsSuccess = false, Message = "result为空" };
  172. Type ty = ob1.GetType();
  173. if (readType.Equals("5")) //string
  174. {
  175. resultt = SiemensS7Net.Write(ob.ToString(), ob1.ToString());
  176. }
  177. else if (readType.Equals("3")) //int
  178. {
  179. resultt = SiemensS7Net.Write(ob.ToString(), (int)ob1);
  180. }
  181. else if (readType.Equals("6")) //byte
  182. {
  183. resultt = SiemensS7Net.Write(ob.ToString(), (byte)ob1);
  184. }
  185. else if (readType.Equals("1")) //short
  186. {
  187. if (short.TryParse(ob1.ToString(), out short value))
  188. {
  189. resultt = SiemensS7Net.Write(ob.ToString(), (short)value);
  190. }
  191. }
  192. else if (readType.Equals("2")) //bool
  193. {
  194. resultt = SiemensS7Net.Write(ob.ToString(), (bool)ob1);
  195. }
  196. YG.Log.Instance.WriteLogAdd($"{SiemensS7Net.IpAddress}+地址{ob.ToString()}+写入值{ob1.ToString()}+写入结果:{ resultt.IsSuccess}+信息提示{resultt.Message}");
  197. }
  198. public override void DeviceStart()
  199. {
  200. base.DeviceStart();
  201. }
  202. public override void DeviceClose()
  203. {
  204. try
  205. {
  206. if (ConnectionResult.IsSuccess)
  207. {
  208. SiemensS7Net.ConnectClose();
  209. }
  210. }
  211. catch (Exception ex)
  212. {
  213. YG.Log.Instance.WriteLogAdd($"206-->{ex.Message}");
  214. }
  215. base.DeviceClose();
  216. }
  217. }
  218. }