PLCMessage.cs 5.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264
  1. 
  2. using System;
  3. using System.Windows.Forms;
  4. namespace Curtain.Net.Sockets.PLC
  5. {
  6. /// <summary>
  7. /// PLC报文类型
  8. /// </summary>
  9. public enum PLCMessageType
  10. {
  11. /// <summary>
  12. /// 其他
  13. /// </summary>
  14. Other = -1,
  15. /// <summary>
  16. /// 发送命令
  17. /// </summary>
  18. Send = 0,
  19. /// <summary>
  20. /// 读取PLC
  21. /// </summary>
  22. Read = 1,
  23. /// <summary>
  24. /// 写入PLC
  25. /// </summary>
  26. Write = 2,
  27. /// <summary>
  28. /// 连接后第一次握手(西门子S7-1200)
  29. /// </summary>
  30. SocketConnect1 = 11,
  31. /// <summary>
  32. /// 连接后第二次握手(西门子S7-1200)
  33. /// </summary>
  34. SocketConnect2 = 12,
  35. }
  36. /// <summary>
  37. /// PLC报文
  38. /// </summary>
  39. [Serializable]
  40. public class PLCMessage
  41. {
  42. /// <summary>
  43. /// PLC报文
  44. /// </summary>
  45. public PLCMessage() : this(PLCMessageType.Send)
  46. {
  47. }
  48. /// <summary>
  49. /// PLC报文
  50. /// </summary>
  51. /// <param name="messageType">报文类型</param>
  52. public PLCMessage(PLCMessageType messageType)
  53. {
  54. MessageType = messageType;
  55. }
  56. /// <summary>
  57. /// 主机地址
  58. /// </summary>
  59. public string Host
  60. {
  61. get;
  62. internal set;
  63. }
  64. /// <summary>
  65. /// 主机端口
  66. /// </summary>
  67. public int Port
  68. {
  69. get;
  70. internal set;
  71. }
  72. /// <summary>
  73. /// 报文类型
  74. /// </summary>
  75. public PLCMessageType MessageType
  76. {
  77. get;
  78. }
  79. /// <summary>
  80. /// PLC软元件代码
  81. /// </summary>
  82. public string Code
  83. {
  84. get;
  85. set;
  86. }
  87. /// <summary>
  88. /// PLC软元件编码
  89. /// </summary>
  90. public string Number
  91. {
  92. get;
  93. set;
  94. }
  95. /// <summary>
  96. /// PLC软元件点数
  97. /// </summary>
  98. public int Length
  99. {
  100. get;
  101. set;
  102. }
  103. /// <summary>
  104. /// 命令报文
  105. /// </summary>
  106. public string Command
  107. {
  108. get;
  109. set;
  110. }
  111. //public string Result
  112. //{
  113. // get;
  114. // set;
  115. //}
  116. /// <summary>
  117. /// 响应报文-头
  118. /// </summary>
  119. public string Head
  120. {
  121. get;
  122. set;
  123. }
  124. /// <summary>
  125. /// 响应报文-文本
  126. /// </summary>
  127. public string Content
  128. {
  129. get;
  130. set;
  131. }
  132. /// <summary>
  133. /// PLC处理是否返回错误
  134. /// </summary>
  135. public bool PLCError
  136. {
  137. get;
  138. set;
  139. }
  140. /// <summary>
  141. /// 命令报文
  142. /// </summary>
  143. [NonSerialized]
  144. public byte[] CommandBytes;
  145. //[NonSerialized]
  146. //public byte[] ResultByte;
  147. /// <summary>
  148. /// 响应报文-头
  149. /// </summary>
  150. [NonSerialized]
  151. public byte[] HeadBytes;
  152. /// <summary>
  153. /// 响应报文-文本
  154. /// </summary>
  155. [NonSerialized]
  156. public byte[] ContentBytes;
  157. /// <summary>
  158. ///
  159. /// </summary>
  160. /// <returns></returns>
  161. public override string ToString()
  162. {
  163. return $"PLCMessage[{MessageType}][{Command}]";
  164. }
  165. }
  166. /// <summary>
  167. /// PLC报文
  168. /// </summary>
  169. [Serializable]
  170. public class PLCMessage<TValue> : PLCMessage
  171. {
  172. /// <summary>
  173. /// PLC报文
  174. /// </summary>
  175. public PLCMessage() : this(PLCMessageType.Send)
  176. {
  177. }
  178. /// <summary>
  179. /// PLC报文
  180. /// </summary>
  181. /// <param name="messageType">报文类型</param>
  182. public PLCMessage(PLCMessageType messageType) : base(messageType)
  183. {
  184. }
  185. /// <summary>
  186. /// 读取或写入值
  187. /// </summary>
  188. public TValue Value
  189. {
  190. get;
  191. set;
  192. }
  193. /// <summary>
  194. ///
  195. /// </summary>
  196. /// <returns></returns>
  197. public override string ToString()
  198. {
  199. return $"PLCMessage[{MessageType}][{Value}]";
  200. }
  201. }
  202. /// <summary>
  203. /// PLC报文
  204. /// </summary>
  205. /// <typeparam name="TValue"></typeparam>
  206. /// <typeparam name="TAddress"></typeparam>
  207. public class PLCMessage<TValue, TAddress> : PLCMessage<TValue>
  208. {
  209. /// <summary>
  210. /// PLC报文
  211. /// </summary>
  212. public PLCMessage() : this(PLCMessageType.Send)
  213. {
  214. }
  215. /// <summary>
  216. /// PLC报文
  217. /// </summary>
  218. /// <param name="messageType">报文类型</param>
  219. public PLCMessage(PLCMessageType messageType) : base(messageType)
  220. {
  221. }
  222. /// <summary>
  223. /// PLC地址对象
  224. /// </summary>
  225. public TAddress AddressData
  226. {
  227. get;
  228. set;
  229. }
  230. /// <summary>
  231. ///
  232. /// </summary>
  233. /// <returns></returns>
  234. public override string ToString()
  235. {
  236. return $"PLCMessage[{MessageType}][{Value}]";
  237. }
  238. }
  239. }