SecsGemPro 1.0.0__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (366) hide show
  1. secsgempro-1.0.0/PKG-INFO +14 -0
  2. secsgempro-1.0.0/README.md +1 -0
  3. secsgempro-1.0.0/pyproject.toml +22 -0
  4. secsgempro-1.0.0/secsgem/__init__.py +1 -0
  5. secsgempro-1.0.0/secsgem/common/__init__.py +35 -0
  6. secsgempro-1.0.0/secsgem/common/block_send_info.py +50 -0
  7. secsgempro-1.0.0/secsgem/common/byte_queue.py +124 -0
  8. secsgempro-1.0.0/secsgem/common/callbacks.py +117 -0
  9. secsgempro-1.0.0/secsgem/common/codec_jis_x_0201.py +32 -0
  10. secsgempro-1.0.0/secsgem/common/connection.py +106 -0
  11. secsgempro-1.0.0/secsgem/common/events.py +196 -0
  12. secsgempro-1.0.0/secsgem/common/header.py +114 -0
  13. secsgempro-1.0.0/secsgem/common/helpers.py +97 -0
  14. secsgempro-1.0.0/secsgem/common/message.py +188 -0
  15. secsgempro-1.0.0/secsgem/common/protocol.py +318 -0
  16. secsgempro-1.0.0/secsgem/common/protocol_dispatcher.py +124 -0
  17. secsgempro-1.0.0/secsgem/common/settings.py +121 -0
  18. secsgempro-1.0.0/secsgem/common/state_machine.py +228 -0
  19. secsgempro-1.0.0/secsgem/common/tcp_client_connection.py +164 -0
  20. secsgempro-1.0.0/secsgem/common/tcp_connection.py +196 -0
  21. secsgempro-1.0.0/secsgem/common/tcp_server_connection.py +146 -0
  22. secsgempro-1.0.0/secsgem/common/timeouts.py +101 -0
  23. secsgempro-1.0.0/secsgem/example.py +31 -0
  24. secsgempro-1.0.0/secsgem/gem/__init__.py +20 -0
  25. secsgempro-1.0.0/secsgem/gem/alarm.py +51 -0
  26. secsgempro-1.0.0/secsgem/gem/alarm_capability.py +185 -0
  27. secsgempro-1.0.0/secsgem/gem/capability.py +90 -0
  28. secsgempro-1.0.0/secsgem/gem/clock_capability.py +43 -0
  29. secsgempro-1.0.0/secsgem/gem/collection_event.py +55 -0
  30. secsgempro-1.0.0/secsgem/gem/collection_event_capability.py +327 -0
  31. secsgempro-1.0.0/secsgem/gem/collection_event_link.py +46 -0
  32. secsgempro-1.0.0/secsgem/gem/collection_event_report.py +35 -0
  33. secsgempro-1.0.0/secsgem/gem/communication_state_machine.py +194 -0
  34. secsgempro-1.0.0/secsgem/gem/control_state_machine.py +208 -0
  35. secsgempro-1.0.0/secsgem/gem/data_value.py +73 -0
  36. secsgempro-1.0.0/secsgem/gem/data_value_capability.py +77 -0
  37. secsgempro-1.0.0/secsgem/gem/equipment_constant.py +71 -0
  38. secsgempro-1.0.0/secsgem/gem/equipment_constants_capability.py +220 -0
  39. secsgempro-1.0.0/secsgem/gem/equipmenthandler.py +75 -0
  40. secsgempro-1.0.0/secsgem/gem/handler.py +275 -0
  41. secsgempro-1.0.0/secsgem/gem/hosthandler.py +249 -0
  42. secsgempro-1.0.0/secsgem/gem/remote_command.py +57 -0
  43. secsgempro-1.0.0/secsgem/gem/remote_control_capability.py +112 -0
  44. secsgempro-1.0.0/secsgem/gem/state_models_capability.py +158 -0
  45. secsgempro-1.0.0/secsgem/gem/status_data_collection_capability.py +168 -0
  46. secsgempro-1.0.0/secsgem/gem/status_variable.py +64 -0
  47. secsgempro-1.0.0/secsgem/hsms/__init__.py +26 -0
  48. secsgempro-1.0.0/secsgem/hsms/connection_state_machine.py +81 -0
  49. secsgempro-1.0.0/secsgem/hsms/deselect_req_header.py +26 -0
  50. secsgempro-1.0.0/secsgem/hsms/deselect_rsp_header.py +26 -0
  51. secsgempro-1.0.0/secsgem/hsms/header.py +184 -0
  52. secsgempro-1.0.0/secsgem/hsms/linktest_req_header.py +26 -0
  53. secsgempro-1.0.0/secsgem/hsms/linktest_rsp_header.py +26 -0
  54. secsgempro-1.0.0/secsgem/hsms/message.py +39 -0
  55. secsgempro-1.0.0/secsgem/hsms/protocol.py +494 -0
  56. secsgempro-1.0.0/secsgem/hsms/reject_req_header.py +29 -0
  57. secsgempro-1.0.0/secsgem/hsms/select_req_header.py +25 -0
  58. secsgempro-1.0.0/secsgem/hsms/select_rsp_header.py +25 -0
  59. secsgempro-1.0.0/secsgem/hsms/separate_req_header.py +25 -0
  60. secsgempro-1.0.0/secsgem/hsms/settings.py +138 -0
  61. secsgempro-1.0.0/secsgem/hsms/stream_function_header.py +35 -0
  62. secsgempro-1.0.0/secsgem/secs/__init__.py +7 -0
  63. secsgempro-1.0.0/secsgem/secs/data_items/__init__.py +273 -0
  64. secsgempro-1.0.0/secsgem/secs/data_items/abs.py +17 -0
  65. secsgempro-1.0.0/secsgem/secs/data_items/acka.py +29 -0
  66. secsgempro-1.0.0/secsgem/secs/data_items/ackc10.py +36 -0
  67. secsgempro-1.0.0/secsgem/secs/data_items/ackc5.py +31 -0
  68. secsgempro-1.0.0/secsgem/secs/data_items/ackc6.py +31 -0
  69. secsgempro-1.0.0/secsgem/secs/data_items/ackc7.py +48 -0
  70. secsgempro-1.0.0/secsgem/secs/data_items/alcd.py +57 -0
  71. secsgempro-1.0.0/secsgem/secs/data_items/aled.py +34 -0
  72. secsgempro-1.0.0/secsgem/secs/data_items/alid.py +39 -0
  73. secsgempro-1.0.0/secsgem/secs/data_items/altx.py +20 -0
  74. secsgempro-1.0.0/secsgem/secs/data_items/attrdata.py +49 -0
  75. secsgempro-1.0.0/secsgem/secs/data_items/attrid.py +31 -0
  76. secsgempro-1.0.0/secsgem/secs/data_items/attrreln.py +48 -0
  77. secsgempro-1.0.0/secsgem/secs/data_items/base.py +67 -0
  78. secsgempro-1.0.0/secsgem/secs/data_items/bcequ.py +23 -0
  79. secsgempro-1.0.0/secsgem/secs/data_items/binlt.py +27 -0
  80. secsgempro-1.0.0/secsgem/secs/data_items/caack.py +23 -0
  81. secsgempro-1.0.0/secsgem/secs/data_items/carrieraction.py +27 -0
  82. secsgempro-1.0.0/secsgem/secs/data_items/carrierid.py +27 -0
  83. secsgempro-1.0.0/secsgem/secs/data_items/cattrdata.py +36 -0
  84. secsgempro-1.0.0/secsgem/secs/data_items/cattrid.py +36 -0
  85. secsgempro-1.0.0/secsgem/secs/data_items/ccode.py +35 -0
  86. secsgempro-1.0.0/secsgem/secs/data_items/ceed.py +27 -0
  87. secsgempro-1.0.0/secsgem/secs/data_items/ceid.py +43 -0
  88. secsgempro-1.0.0/secsgem/secs/data_items/cename.py +16 -0
  89. secsgempro-1.0.0/secsgem/secs/data_items/cepack.py +36 -0
  90. secsgempro-1.0.0/secsgem/secs/data_items/cepval.py +46 -0
  91. secsgempro-1.0.0/secsgem/secs/data_items/cmda.py +39 -0
  92. secsgempro-1.0.0/secsgem/secs/data_items/colct.py +27 -0
  93. secsgempro-1.0.0/secsgem/secs/data_items/commack.py +32 -0
  94. secsgempro-1.0.0/secsgem/secs/data_items/cpack.py +36 -0
  95. secsgempro-1.0.0/secsgem/secs/data_items/cpname.py +39 -0
  96. secsgempro-1.0.0/secsgem/secs/data_items/cpval.py +41 -0
  97. secsgempro-1.0.0/secsgem/secs/data_items/dataid.py +44 -0
  98. secsgempro-1.0.0/secsgem/secs/data_items/datalength.py +34 -0
  99. secsgempro-1.0.0/secsgem/secs/data_items/datlc.py +16 -0
  100. secsgempro-1.0.0/secsgem/secs/data_items/drack.py +41 -0
  101. secsgempro-1.0.0/secsgem/secs/data_items/dsid.py +36 -0
  102. secsgempro-1.0.0/secsgem/secs/data_items/dsper.py +16 -0
  103. secsgempro-1.0.0/secsgem/secs/data_items/dutms.py +17 -0
  104. secsgempro-1.0.0/secsgem/secs/data_items/dvname.py +36 -0
  105. secsgempro-1.0.0/secsgem/secs/data_items/dvval.py +46 -0
  106. secsgempro-1.0.0/secsgem/secs/data_items/dvvalname.py +16 -0
  107. secsgempro-1.0.0/secsgem/secs/data_items/eac.py +38 -0
  108. secsgempro-1.0.0/secsgem/secs/data_items/ecdef.py +44 -0
  109. secsgempro-1.0.0/secsgem/secs/data_items/ecid.py +39 -0
  110. secsgempro-1.0.0/secsgem/secs/data_items/ecmax.py +44 -0
  111. secsgempro-1.0.0/secsgem/secs/data_items/ecmin.py +44 -0
  112. secsgempro-1.0.0/secsgem/secs/data_items/ecname.py +16 -0
  113. secsgempro-1.0.0/secsgem/secs/data_items/ecv.py +47 -0
  114. secsgempro-1.0.0/secsgem/secs/data_items/edid.py +38 -0
  115. secsgempro-1.0.0/secsgem/secs/data_items/erack.py +32 -0
  116. secsgempro-1.0.0/secsgem/secs/data_items/errcode.py +180 -0
  117. secsgempro-1.0.0/secsgem/secs/data_items/errtext.py +23 -0
  118. secsgempro-1.0.0/secsgem/secs/data_items/exid.py +24 -0
  119. secsgempro-1.0.0/secsgem/secs/data_items/exmessage.py +17 -0
  120. secsgempro-1.0.0/secsgem/secs/data_items/exrecvra.py +19 -0
  121. secsgempro-1.0.0/secsgem/secs/data_items/extype.py +17 -0
  122. secsgempro-1.0.0/secsgem/secs/data_items/fcnid.py +19 -0
  123. secsgempro-1.0.0/secsgem/secs/data_items/ffrot.py +19 -0
  124. secsgempro-1.0.0/secsgem/secs/data_items/fnloc.py +20 -0
  125. secsgempro-1.0.0/secsgem/secs/data_items/grant6.py +35 -0
  126. secsgempro-1.0.0/secsgem/secs/data_items/grnt1.py +47 -0
  127. secsgempro-1.0.0/secsgem/secs/data_items/hcack.py +48 -0
  128. secsgempro-1.0.0/secsgem/secs/data_items/idtyp.py +47 -0
  129. secsgempro-1.0.0/secsgem/secs/data_items/length.py +34 -0
  130. secsgempro-1.0.0/secsgem/secs/data_items/limitack.py +50 -0
  131. secsgempro-1.0.0/secsgem/secs/data_items/limitid.py +20 -0
  132. secsgempro-1.0.0/secsgem/secs/data_items/limitmax.py +44 -0
  133. secsgempro-1.0.0/secsgem/secs/data_items/limitmin.py +44 -0
  134. secsgempro-1.0.0/secsgem/secs/data_items/lowerdb.py +45 -0
  135. secsgempro-1.0.0/secsgem/secs/data_items/lrack.py +44 -0
  136. secsgempro-1.0.0/secsgem/secs/data_items/lvack.py +41 -0
  137. secsgempro-1.0.0/secsgem/secs/data_items/maper.py +35 -0
  138. secsgempro-1.0.0/secsgem/secs/data_items/mapft.py +36 -0
  139. secsgempro-1.0.0/secsgem/secs/data_items/mdack.py +40 -0
  140. secsgempro-1.0.0/secsgem/secs/data_items/mdln.py +20 -0
  141. secsgempro-1.0.0/secsgem/secs/data_items/mexp.py +18 -0
  142. secsgempro-1.0.0/secsgem/secs/data_items/mhead.py +22 -0
  143. secsgempro-1.0.0/secsgem/secs/data_items/mid.py +36 -0
  144. secsgempro-1.0.0/secsgem/secs/data_items/mlcl.py +27 -0
  145. secsgempro-1.0.0/secsgem/secs/data_items/nulbc.py +24 -0
  146. secsgempro-1.0.0/secsgem/secs/data_items/objack.py +33 -0
  147. secsgempro-1.0.0/secsgem/secs/data_items/objid.py +31 -0
  148. secsgempro-1.0.0/secsgem/secs/data_items/objspec.py +18 -0
  149. secsgempro-1.0.0/secsgem/secs/data_items/objtype.py +29 -0
  150. secsgempro-1.0.0/secsgem/secs/data_items/oflack.py +29 -0
  151. secsgempro-1.0.0/secsgem/secs/data_items/onlack.py +35 -0
  152. secsgempro-1.0.0/secsgem/secs/data_items/orloc.py +43 -0
  153. secsgempro-1.0.0/secsgem/secs/data_items/pparm.py +45 -0
  154. secsgempro-1.0.0/secsgem/secs/data_items/ppbody.py +39 -0
  155. secsgempro-1.0.0/secsgem/secs/data_items/ppgnt.py +44 -0
  156. secsgempro-1.0.0/secsgem/secs/data_items/ppid.py +30 -0
  157. secsgempro-1.0.0/secsgem/secs/data_items/praxi.py +51 -0
  158. secsgempro-1.0.0/secsgem/secs/data_items/prdct.py +27 -0
  159. secsgempro-1.0.0/secsgem/secs/data_items/ptn.py +27 -0
  160. secsgempro-1.0.0/secsgem/secs/data_items/rcmd.py +26 -0
  161. secsgempro-1.0.0/secsgem/secs/data_items/refp.py +27 -0
  162. secsgempro-1.0.0/secsgem/secs/data_items/repgsz.py +36 -0
  163. secsgempro-1.0.0/secsgem/secs/data_items/rowct.py +27 -0
  164. secsgempro-1.0.0/secsgem/secs/data_items/rpsel.py +17 -0
  165. secsgempro-1.0.0/secsgem/secs/data_items/rptid.py +41 -0
  166. secsgempro-1.0.0/secsgem/secs/data_items/rsda.py +35 -0
  167. secsgempro-1.0.0/secsgem/secs/data_items/rsdc.py +32 -0
  168. secsgempro-1.0.0/secsgem/secs/data_items/rsinf.py +29 -0
  169. secsgempro-1.0.0/secsgem/secs/data_items/rspack.py +32 -0
  170. secsgempro-1.0.0/secsgem/secs/data_items/sdack.py +29 -0
  171. secsgempro-1.0.0/secsgem/secs/data_items/sdbin.py +32 -0
  172. secsgempro-1.0.0/secsgem/secs/data_items/shead.py +18 -0
  173. secsgempro-1.0.0/secsgem/secs/data_items/smpln.py +34 -0
  174. secsgempro-1.0.0/secsgem/secs/data_items/softrev.py +15 -0
  175. secsgempro-1.0.0/secsgem/secs/data_items/stime.py +16 -0
  176. secsgempro-1.0.0/secsgem/secs/data_items/strack.py +36 -0
  177. secsgempro-1.0.0/secsgem/secs/data_items/strid.py +19 -0
  178. secsgempro-1.0.0/secsgem/secs/data_items/strp.py +29 -0
  179. secsgempro-1.0.0/secsgem/secs/data_items/sv.py +47 -0
  180. secsgempro-1.0.0/secsgem/secs/data_items/svid.py +39 -0
  181. secsgempro-1.0.0/secsgem/secs/data_items/svname.py +16 -0
  182. secsgempro-1.0.0/secsgem/secs/data_items/text.py +39 -0
  183. secsgempro-1.0.0/secsgem/secs/data_items/tiaack.py +44 -0
  184. secsgempro-1.0.0/secsgem/secs/data_items/tiack.py +30 -0
  185. secsgempro-1.0.0/secsgem/secs/data_items/tid.py +19 -0
  186. secsgempro-1.0.0/secsgem/secs/data_items/time.py +18 -0
  187. secsgempro-1.0.0/secsgem/secs/data_items/timestamp.py +20 -0
  188. secsgempro-1.0.0/secsgem/secs/data_items/totsmp.py +36 -0
  189. secsgempro-1.0.0/secsgem/secs/data_items/trid.py +37 -0
  190. secsgempro-1.0.0/secsgem/secs/data_items/units.py +19 -0
  191. secsgempro-1.0.0/secsgem/secs/data_items/upperdb.py +45 -0
  192. secsgempro-1.0.0/secsgem/secs/data_items/v.py +49 -0
  193. secsgempro-1.0.0/secsgem/secs/data_items/vid.py +44 -0
  194. secsgempro-1.0.0/secsgem/secs/data_items/vlaack.py +35 -0
  195. secsgempro-1.0.0/secsgem/secs/data_items/xdies.py +31 -0
  196. secsgempro-1.0.0/secsgem/secs/data_items/xypos.py +29 -0
  197. secsgempro-1.0.0/secsgem/secs/data_items/ydies.py +31 -0
  198. secsgempro-1.0.0/secsgem/secs/functions/__init__.py +293 -0
  199. secsgempro-1.0.0/secsgem/secs/functions/_all.py +288 -0
  200. secsgempro-1.0.0/secsgem/secs/functions/base.py +200 -0
  201. secsgempro-1.0.0/secsgem/secs/functions/s00f00.py +31 -0
  202. secsgempro-1.0.0/secsgem/secs/functions/s01f00.py +31 -0
  203. secsgempro-1.0.0/secsgem/secs/functions/s01f01.py +31 -0
  204. secsgempro-1.0.0/secsgem/secs/functions/s01f02.py +62 -0
  205. secsgempro-1.0.0/secsgem/secs/functions/s01f03.py +46 -0
  206. secsgempro-1.0.0/secsgem/secs/functions/s01f04.py +46 -0
  207. secsgempro-1.0.0/secsgem/secs/functions/s01f11.py +47 -0
  208. secsgempro-1.0.0/secsgem/secs/functions/s01f12.py +66 -0
  209. secsgempro-1.0.0/secsgem/secs/functions/s01f13.py +62 -0
  210. secsgempro-1.0.0/secsgem/secs/functions/s01f14.py +79 -0
  211. secsgempro-1.0.0/secsgem/secs/functions/s01f15.py +31 -0
  212. secsgempro-1.0.0/secsgem/secs/functions/s01f16.py +39 -0
  213. secsgempro-1.0.0/secsgem/secs/functions/s01f17.py +31 -0
  214. secsgempro-1.0.0/secsgem/secs/functions/s01f18.py +39 -0
  215. secsgempro-1.0.0/secsgem/secs/functions/s01f21.py +45 -0
  216. secsgempro-1.0.0/secsgem/secs/functions/s01f22.py +60 -0
  217. secsgempro-1.0.0/secsgem/secs/functions/s01f23.py +45 -0
  218. secsgempro-1.0.0/secsgem/secs/functions/s01f24.py +66 -0
  219. secsgempro-1.0.0/secsgem/secs/functions/s02f00.py +31 -0
  220. secsgempro-1.0.0/secsgem/secs/functions/s02f13.py +47 -0
  221. secsgempro-1.0.0/secsgem/secs/functions/s02f14.py +45 -0
  222. secsgempro-1.0.0/secsgem/secs/functions/s02f15.py +62 -0
  223. secsgempro-1.0.0/secsgem/secs/functions/s02f16.py +39 -0
  224. secsgempro-1.0.0/secsgem/secs/functions/s02f17.py +31 -0
  225. secsgempro-1.0.0/secsgem/secs/functions/s02f18.py +39 -0
  226. secsgempro-1.0.0/secsgem/secs/functions/s02f21.py +39 -0
  227. secsgempro-1.0.0/secsgem/secs/functions/s02f22.py +39 -0
  228. secsgempro-1.0.0/secsgem/secs/functions/s02f23.py +72 -0
  229. secsgempro-1.0.0/secsgem/secs/functions/s02f24.py +39 -0
  230. secsgempro-1.0.0/secsgem/secs/functions/s02f25.py +39 -0
  231. secsgempro-1.0.0/secsgem/secs/functions/s02f26.py +39 -0
  232. secsgempro-1.0.0/secsgem/secs/functions/s02f29.py +47 -0
  233. secsgempro-1.0.0/secsgem/secs/functions/s02f30.py +92 -0
  234. secsgempro-1.0.0/secsgem/secs/functions/s02f31.py +17 -0
  235. secsgempro-1.0.0/secsgem/secs/functions/s02f32.py +17 -0
  236. secsgempro-1.0.0/secsgem/secs/functions/s02f33.py +80 -0
  237. secsgempro-1.0.0/secsgem/secs/functions/s02f34.py +39 -0
  238. secsgempro-1.0.0/secsgem/secs/functions/s02f35.py +72 -0
  239. secsgempro-1.0.0/secsgem/secs/functions/s02f36.py +39 -0
  240. secsgempro-1.0.0/secsgem/secs/functions/s02f37.py +54 -0
  241. secsgempro-1.0.0/secsgem/secs/functions/s02f38.py +39 -0
  242. secsgempro-1.0.0/secsgem/secs/functions/s02f41.py +72 -0
  243. secsgempro-1.0.0/secsgem/secs/functions/s02f42.py +75 -0
  244. secsgempro-1.0.0/secsgem/secs/functions/s02f43.py +69 -0
  245. secsgempro-1.0.0/secsgem/secs/functions/s02f44.py +86 -0
  246. secsgempro-1.0.0/secsgem/secs/functions/s02f45.py +101 -0
  247. secsgempro-1.0.0/secsgem/secs/functions/s02f46.py +89 -0
  248. secsgempro-1.0.0/secsgem/secs/functions/s02f47.py +45 -0
  249. secsgempro-1.0.0/secsgem/secs/functions/s02f48.py +106 -0
  250. secsgempro-1.0.0/secsgem/secs/functions/s02f49.py +82 -0
  251. secsgempro-1.0.0/secsgem/secs/functions/s02f50.py +75 -0
  252. secsgempro-1.0.0/secsgem/secs/functions/s03f17.py +34 -0
  253. secsgempro-1.0.0/secsgem/secs/functions/s03f18.py +30 -0
  254. secsgempro-1.0.0/secsgem/secs/functions/s05f00.py +31 -0
  255. secsgempro-1.0.0/secsgem/secs/functions/s05f01.py +57 -0
  256. secsgempro-1.0.0/secsgem/secs/functions/s05f02.py +39 -0
  257. secsgempro-1.0.0/secsgem/secs/functions/s05f03.py +49 -0
  258. secsgempro-1.0.0/secsgem/secs/functions/s05f04.py +39 -0
  259. secsgempro-1.0.0/secsgem/secs/functions/s05f05.py +45 -0
  260. secsgempro-1.0.0/secsgem/secs/functions/s05f06.py +64 -0
  261. secsgempro-1.0.0/secsgem/secs/functions/s05f07.py +31 -0
  262. secsgempro-1.0.0/secsgem/secs/functions/s05f08.py +64 -0
  263. secsgempro-1.0.0/secsgem/secs/functions/s05f09.py +72 -0
  264. secsgempro-1.0.0/secsgem/secs/functions/s05f10.py +31 -0
  265. secsgempro-1.0.0/secsgem/secs/functions/s05f11.py +61 -0
  266. secsgempro-1.0.0/secsgem/secs/functions/s05f12.py +31 -0
  267. secsgempro-1.0.0/secsgem/secs/functions/s05f13.py +49 -0
  268. secsgempro-1.0.0/secsgem/secs/functions/s05f14.py +73 -0
  269. secsgempro-1.0.0/secsgem/secs/functions/s05f15.py +81 -0
  270. secsgempro-1.0.0/secsgem/secs/functions/s05f16.py +31 -0
  271. secsgempro-1.0.0/secsgem/secs/functions/s05f17.py +39 -0
  272. secsgempro-1.0.0/secsgem/secs/functions/s05f18.py +75 -0
  273. secsgempro-1.0.0/secsgem/secs/functions/s06f00.py +31 -0
  274. secsgempro-1.0.0/secsgem/secs/functions/s06f01.py +67 -0
  275. secsgempro-1.0.0/secsgem/secs/functions/s06f02.py +39 -0
  276. secsgempro-1.0.0/secsgem/secs/functions/s06f05.py +49 -0
  277. secsgempro-1.0.0/secsgem/secs/functions/s06f06.py +39 -0
  278. secsgempro-1.0.0/secsgem/secs/functions/s06f07.py +39 -0
  279. secsgempro-1.0.0/secsgem/secs/functions/s06f08.py +100 -0
  280. secsgempro-1.0.0/secsgem/secs/functions/s06f11.py +82 -0
  281. secsgempro-1.0.0/secsgem/secs/functions/s06f12.py +39 -0
  282. secsgempro-1.0.0/secsgem/secs/functions/s06f15.py +39 -0
  283. secsgempro-1.0.0/secsgem/secs/functions/s06f16.py +82 -0
  284. secsgempro-1.0.0/secsgem/secs/functions/s06f19.py +39 -0
  285. secsgempro-1.0.0/secsgem/secs/functions/s06f20.py +45 -0
  286. secsgempro-1.0.0/secsgem/secs/functions/s06f21.py +39 -0
  287. secsgempro-1.0.0/secsgem/secs/functions/s06f22.py +60 -0
  288. secsgempro-1.0.0/secsgem/secs/functions/s06f23.py +39 -0
  289. secsgempro-1.0.0/secsgem/secs/functions/s06f24.py +39 -0
  290. secsgempro-1.0.0/secsgem/secs/functions/s07f00.py +31 -0
  291. secsgempro-1.0.0/secsgem/secs/functions/s07f01.py +49 -0
  292. secsgempro-1.0.0/secsgem/secs/functions/s07f02.py +39 -0
  293. secsgempro-1.0.0/secsgem/secs/functions/s07f03.py +49 -0
  294. secsgempro-1.0.0/secsgem/secs/functions/s07f04.py +39 -0
  295. secsgempro-1.0.0/secsgem/secs/functions/s07f05.py +39 -0
  296. secsgempro-1.0.0/secsgem/secs/functions/s07f06.py +49 -0
  297. secsgempro-1.0.0/secsgem/secs/functions/s07f17.py +45 -0
  298. secsgempro-1.0.0/secsgem/secs/functions/s07f18.py +39 -0
  299. secsgempro-1.0.0/secsgem/secs/functions/s07f19.py +31 -0
  300. secsgempro-1.0.0/secsgem/secs/functions/s07f20.py +45 -0
  301. secsgempro-1.0.0/secsgem/secs/functions/s07f23.py +32 -0
  302. secsgempro-1.0.0/secsgem/secs/functions/s07f24.py +21 -0
  303. secsgempro-1.0.0/secsgem/secs/functions/s07f25.py +39 -0
  304. secsgempro-1.0.0/secsgem/secs/functions/s07f26.py +36 -0
  305. secsgempro-1.0.0/secsgem/secs/functions/s09f00.py +31 -0
  306. secsgempro-1.0.0/secsgem/secs/functions/s09f01.py +39 -0
  307. secsgempro-1.0.0/secsgem/secs/functions/s09f03.py +39 -0
  308. secsgempro-1.0.0/secsgem/secs/functions/s09f05.py +39 -0
  309. secsgempro-1.0.0/secsgem/secs/functions/s09f07.py +39 -0
  310. secsgempro-1.0.0/secsgem/secs/functions/s09f09.py +39 -0
  311. secsgempro-1.0.0/secsgem/secs/functions/s09f11.py +39 -0
  312. secsgempro-1.0.0/secsgem/secs/functions/s09f13.py +49 -0
  313. secsgempro-1.0.0/secsgem/secs/functions/s10f00.py +31 -0
  314. secsgempro-1.0.0/secsgem/secs/functions/s10f01.py +49 -0
  315. secsgempro-1.0.0/secsgem/secs/functions/s10f02.py +39 -0
  316. secsgempro-1.0.0/secsgem/secs/functions/s10f03.py +49 -0
  317. secsgempro-1.0.0/secsgem/secs/functions/s10f04.py +39 -0
  318. secsgempro-1.0.0/secsgem/secs/functions/s12f00.py +31 -0
  319. secsgempro-1.0.0/secsgem/secs/functions/s12f01.py +138 -0
  320. secsgempro-1.0.0/secsgem/secs/functions/s12f02.py +39 -0
  321. secsgempro-1.0.0/secsgem/secs/functions/s12f03.py +86 -0
  322. secsgempro-1.0.0/secsgem/secs/functions/s12f04.py +138 -0
  323. secsgempro-1.0.0/secsgem/secs/functions/s12f05.py +61 -0
  324. secsgempro-1.0.0/secsgem/secs/functions/s12f06.py +39 -0
  325. secsgempro-1.0.0/secsgem/secs/functions/s12f07.py +79 -0
  326. secsgempro-1.0.0/secsgem/secs/functions/s12f08.py +39 -0
  327. secsgempro-1.0.0/secsgem/secs/functions/s12f09.py +61 -0
  328. secsgempro-1.0.0/secsgem/secs/functions/s12f10.py +39 -0
  329. secsgempro-1.0.0/secsgem/secs/functions/s12f11.py +79 -0
  330. secsgempro-1.0.0/secsgem/secs/functions/s12f12.py +39 -0
  331. secsgempro-1.0.0/secsgem/secs/functions/s12f13.py +49 -0
  332. secsgempro-1.0.0/secsgem/secs/functions/s12f14.py +79 -0
  333. secsgempro-1.0.0/secsgem/secs/functions/s12f15.py +49 -0
  334. secsgempro-1.0.0/secsgem/secs/functions/s12f16.py +61 -0
  335. secsgempro-1.0.0/secsgem/secs/functions/s12f17.py +56 -0
  336. secsgempro-1.0.0/secsgem/secs/functions/s12f18.py +79 -0
  337. secsgempro-1.0.0/secsgem/secs/functions/s12f19.py +49 -0
  338. secsgempro-1.0.0/secsgem/secs/functions/s14f00.py +31 -0
  339. secsgempro-1.0.0/secsgem/secs/functions/s14f01.py +95 -0
  340. secsgempro-1.0.0/secsgem/secs/functions/s14f02.py +133 -0
  341. secsgempro-1.0.0/secsgem/secs/functions/s14f03.py +86 -0
  342. secsgempro-1.0.0/secsgem/secs/functions/s14f04.py +133 -0
  343. secsgempro-1.0.0/secsgem/secs/functions/streams_functions.py +81 -0
  344. secsgempro-1.0.0/secsgem/secs/handler.py +302 -0
  345. secsgempro-1.0.0/secsgem/secs/variables/__init__.py +41 -0
  346. secsgempro-1.0.0/secsgem/secs/variables/array.py +196 -0
  347. secsgempro-1.0.0/secsgem/secs/variables/base.py +100 -0
  348. secsgempro-1.0.0/secsgem/secs/variables/base_number.py +214 -0
  349. secsgempro-1.0.0/secsgem/secs/variables/base_text.py +204 -0
  350. secsgempro-1.0.0/secsgem/secs/variables/binary.py +207 -0
  351. secsgempro-1.0.0/secsgem/secs/variables/boolean.py +209 -0
  352. secsgempro-1.0.0/secsgem/secs/variables/dynamic.py +253 -0
  353. secsgempro-1.0.0/secsgem/secs/variables/f4.py +22 -0
  354. secsgempro-1.0.0/secsgem/secs/variables/f8.py +22 -0
  355. secsgempro-1.0.0/secsgem/secs/variables/functions.py +57 -0
  356. secsgempro-1.0.0/secsgem/secs/variables/i1.py +22 -0
  357. secsgempro-1.0.0/secsgem/secs/variables/i2.py +22 -0
  358. secsgempro-1.0.0/secsgem/secs/variables/i4.py +22 -0
  359. secsgempro-1.0.0/secsgem/secs/variables/i8.py +22 -0
  360. secsgempro-1.0.0/secsgem/secs/variables/jis8.py +23 -0
  361. secsgempro-1.0.0/secsgem/secs/variables/list_type.py +249 -0
  362. secsgempro-1.0.0/secsgem/secs/variables/string.py +21 -0
  363. secsgempro-1.0.0/secsgem/secs/variables/u1.py +22 -0
  364. secsgempro-1.0.0/secsgem/secs/variables/u2.py +22 -0
  365. secsgempro-1.0.0/secsgem/secs/variables/u4.py +22 -0
  366. secsgempro-1.0.0/secsgem/secs/variables/u8.py +22 -0
@@ -0,0 +1,14 @@
1
+ Metadata-Version: 2.4
2
+ Name: SecsGemPro
3
+ Version: 1.0.0
4
+ Summary: secs/gem
5
+ Author: LiuWei
6
+ Author-email: 183074632@qq.com
7
+ Requires-Python: >=3.11,<3.13
8
+ Classifier: Programming Language :: Python :: 3
9
+ Classifier: Programming Language :: Python :: 3.11
10
+ Classifier: Programming Language :: Python :: 3.12
11
+ Requires-Dist: python-dateutil (>=2.9.0.post0,<3.0.0)
12
+ Description-Content-Type: text/markdown
13
+
14
+ ### secsgem
@@ -0,0 +1 @@
1
+ ### secsgem
@@ -0,0 +1,22 @@
1
+ [tool.poetry]
2
+ name = "SecsGemPro"
3
+ version = "1.0.0"
4
+ description = "secs/gem"
5
+ authors = ["LiuWei <183074632@qq.com>"]
6
+ readme = "README.md"
7
+ packages = [{include = "secsgem"},]
8
+
9
+
10
+ [tool.poetry.dependencies]
11
+ python = ">=3.11,<3.13"
12
+ python-dateutil = ">=2.9.0.post0,<3.0.0"
13
+
14
+
15
+ [[tool.poetry.source]]
16
+ name = "mirrors"
17
+ url = "https://pypi.tuna.tsinghua.edu.cn/simple"
18
+ priority = "primary"
19
+
20
+ [build-system]
21
+ requires = ["poetry-core"]
22
+ build-backend = "poetry.core.masonry.api"
@@ -0,0 +1 @@
1
+ """module imports."""
@@ -0,0 +1,35 @@
1
+ """Contains helper functions."""
2
+
3
+ from .block_send_info import BlockSendInfo
4
+ from .byte_queue import ByteQueue
5
+ from .callbacks import CallbackHandler
6
+ from .connection import Connection
7
+ from .events import EventProducer
8
+ from .header import Header
9
+ from .helpers import format_hex, function_name, indent_block, is_errorcode_ewouldblock, is_windows
10
+ from .message import Block, Message
11
+ from .protocol import Protocol
12
+ from .protocol_dispatcher import ProtocolDispatcher
13
+ from .settings import DeviceType, Settings
14
+ from .state_machine import State, StateMachine, Transition, UnknownTransitionError, WrongSourceStateError
15
+ from .tcp_client_connection import TcpClientConnection
16
+ from .tcp_server_connection import TcpServerConnection
17
+ from .timeouts import Timeouts
18
+
19
+ __all__ = [
20
+ "BlockSendInfo",
21
+ "ByteQueue",
22
+ "CallbackHandler",
23
+ "Connection",
24
+ "EventProducer",
25
+ "Header",
26
+ "format_hex", "function_name", "indent_block", "is_windows", "is_errorcode_ewouldblock",
27
+ "Message", "Block",
28
+ "Protocol",
29
+ "ProtocolDispatcher",
30
+ "Settings", "DeviceType",
31
+ "State", "StateMachine", "Transition", "UnknownTransitionError", "WrongSourceStateError",
32
+ "TcpClientConnection",
33
+ "TcpServerConnection",
34
+ "Timeouts",
35
+ ]
@@ -0,0 +1,50 @@
1
+ """Helper to track block send result across threads."""
2
+ from __future__ import annotations
3
+
4
+ import enum
5
+ import threading
6
+
7
+
8
+ class BlockSendResult(enum.Enum):
9
+ """Enum for send result including not send state."""
10
+
11
+ NOT_SENT = 0
12
+ SENT_OK = 1
13
+ SENT_ERROR = 2
14
+
15
+
16
+ class BlockSendInfo:
17
+ """Container for sending block and waiting for result."""
18
+
19
+ def __init__(self, data: bytes):
20
+ """Initialize block send info object.
21
+
22
+ Args:
23
+ data: data to send.
24
+
25
+ """
26
+ self._data = data
27
+
28
+ self._result = BlockSendResult.NOT_SENT
29
+ self._result_trigger = threading.Event()
30
+
31
+ @property
32
+ def data(self) -> bytes:
33
+ """Get the data for sending."""
34
+ return self._data
35
+
36
+ def resolve(self, result: bool):
37
+ """Resolve the send data with a result.
38
+
39
+ Args:
40
+ result: result to resolve with
41
+
42
+ """
43
+ self._result = BlockSendResult.SENT_OK if result else BlockSendResult.SENT_ERROR
44
+ self._result_trigger.set()
45
+
46
+ def wait(self) -> bool:
47
+ """Wait for the message is sent and a result is available."""
48
+ self._result_trigger.wait()
49
+
50
+ return self._result == BlockSendResult.SENT_OK
@@ -0,0 +1,124 @@
1
+ """Queue for bytes."""
2
+ from __future__ import annotations
3
+
4
+ import threading
5
+
6
+
7
+ class ByteQueue:
8
+ """FIFO class for queuing and retrieving bytes."""
9
+
10
+ def __init__(self) -> None:
11
+ """Initialize the queue."""
12
+ self._buffer = bytearray()
13
+ self._buffer_lock = threading.Condition()
14
+
15
+ def append(self, data: bytes):
16
+ """Add bytes to the end of the queue.
17
+
18
+ Args:
19
+ data: bytes to add
20
+
21
+ """
22
+ with self._buffer_lock:
23
+ self._buffer.extend(data)
24
+ self._buffer_lock.notify_all()
25
+
26
+ def pop(self, size: int = 1) -> bytes:
27
+ """Remove and return bytes from the beginning of queue.
28
+
29
+ Args:
30
+ size: number of bytes to remove
31
+
32
+ Returns:
33
+ removed bytes
34
+
35
+ """
36
+ with self._buffer_lock:
37
+ data = self._buffer[:size]
38
+ del self._buffer[:size]
39
+ return data
40
+
41
+ def pop_byte(self) -> int:
42
+ """Remove and return single byte from the beginning of queue.
43
+
44
+ Returns:
45
+ removed byte
46
+
47
+ """
48
+ with self._buffer_lock:
49
+ data = self._buffer[0]
50
+ del self._buffer[0]
51
+ return data
52
+
53
+ def peek(self, size: int = 1) -> bytes:
54
+ """Get bytes from beginning of the queue without removing them.
55
+
56
+ Args:
57
+ size: number of bytes to peek
58
+
59
+ Returns:
60
+ peek bytes
61
+
62
+ """
63
+ return self._buffer[:size]
64
+
65
+ def peek_byte(self, position: int = 0) -> int:
66
+ """Get single byte in the buffer without removing.
67
+
68
+ Args:
69
+ position: byte position to peek at
70
+
71
+ Returns:
72
+ peek bytes
73
+
74
+ """
75
+ return self._buffer[position]
76
+
77
+ def clear(self):
78
+ """Clear the bytes in the queue."""
79
+ with self._buffer_lock:
80
+ self._buffer.clear()
81
+
82
+ def __len__(self) -> int:
83
+ """Get the length of the queue.
84
+
85
+ Returns:
86
+ queue length
87
+
88
+ """
89
+ return len(self._buffer)
90
+
91
+ def wait_for(self, size: int = 1, peek: bool = False) -> bytes:
92
+ """Wait until the requested number of bytes is available in the receive queue.
93
+
94
+ Args:
95
+ size: number of bytes
96
+ peek: only look, don't remove the item from the queue.
97
+
98
+ Returns:
99
+ Found bytes
100
+
101
+ """
102
+ def min_size() -> bool:
103
+ return len(self._buffer) >= size
104
+
105
+ if len(self._buffer) < size:
106
+ with self._buffer_lock:
107
+ self._buffer_lock.wait_for(min_size)
108
+
109
+ if peek:
110
+ return self.peek(size)
111
+
112
+ return self.pop(size)
113
+
114
+ def wait_for_byte(self, peek: bool = False) -> int:
115
+ """Wait until one byte is available in the receive queue.
116
+
117
+ Args:
118
+ peek: only look, don't remove the item from the queue.
119
+
120
+ Returns:
121
+ Found byte
122
+
123
+ """
124
+ return self.wait_for(peek=peek)[0]
@@ -0,0 +1,117 @@
1
+ """Contains callback handling routines."""
2
+ from __future__ import annotations
3
+
4
+ import typing
5
+
6
+
7
+ class _CallbackCallWrapper:
8
+ def __init__(self, handler: CallbackHandler, name: str):
9
+ self._name = name
10
+ self._handler = handler
11
+
12
+ def __call__(self, *args: tuple, **kwargs: dict) -> typing.Any:
13
+ return self.handler._call(self.name, *args, **kwargs) # noqa: SLF001
14
+
15
+ @property
16
+ def name(self) -> str:
17
+ """Get the callback name."""
18
+ return self._name
19
+
20
+ @property
21
+ def handler(self) -> CallbackHandler:
22
+ """Get the handler for the callback."""
23
+ return self._handler
24
+
25
+
26
+ class CallbackHandler:
27
+ """Handler for callbacks for HSMS/SECS/GEM events.
28
+
29
+ This handler manages callbacks for events that can happen on a handler for a connection.
30
+ """
31
+
32
+ def __init__(self) -> None:
33
+ """Initialize the handler."""
34
+ self._callbacks: dict[str, typing.Callable] = {}
35
+ self.target: object = None
36
+ self._object_intitialized = True
37
+
38
+ def __setattr__(self, name: str, value: typing.Callable):
39
+ """Set an item as object member.
40
+
41
+ Args:
42
+ name: name of the callback
43
+ value: callback function
44
+
45
+ """
46
+ if "_object_intitialized" not in self.__dict__ or name in self.__dict__:
47
+ dict.__setattr__(self, name, value)
48
+ return
49
+
50
+ if value is None:
51
+ if name in self._callbacks:
52
+ del self._callbacks[name]
53
+ else:
54
+ self._callbacks[name] = value
55
+
56
+ def __getattr__(self, name: str) -> typing.Callable:
57
+ """Get a callable function for an event.
58
+
59
+ Args:
60
+ name: name of the event
61
+
62
+ """
63
+ return _CallbackCallWrapper(self, name)
64
+
65
+ class _CallbacksIter:
66
+ def __init__(self, keys):
67
+ self._keys = list(keys)
68
+ self._counter = 0
69
+
70
+ def __iter__(self):
71
+ return self
72
+
73
+ def __next__(self):
74
+ if self._counter < len(self._keys):
75
+ i = self._counter
76
+ self._counter += 1
77
+ return self._keys[i]
78
+
79
+ raise StopIteration
80
+
81
+ def __iter__(self) -> _CallbacksIter:
82
+ """Get an iterator for the callbacks.
83
+
84
+ Returns:
85
+ callback iterator
86
+
87
+ """
88
+ return self._CallbacksIter(self._callbacks.keys())
89
+
90
+ def __contains__(self, callback: str) -> bool:
91
+ """Check if a callback is present.
92
+
93
+ Args:
94
+ callback: name of the event
95
+
96
+ Returns:
97
+ True if callback present
98
+
99
+ """
100
+ if callback in self._callbacks:
101
+ return True
102
+
103
+ delegate_handler = getattr(self.target, "_on_" + callback, None)
104
+ if callable(delegate_handler):
105
+ return True
106
+
107
+ return False
108
+
109
+ def _call(self, callback: str, *args, **kwargs) -> typing.Any:
110
+ if callback in self._callbacks:
111
+ return self._callbacks[callback](*args, **kwargs)
112
+
113
+ delegate_handler = getattr(self.target, "_on_" + callback, None)
114
+ if callable(delegate_handler):
115
+ return delegate_handler(*args, **kwargs)
116
+
117
+ return None
@@ -0,0 +1,32 @@
1
+ """JIS X 0201 Codec required for JIS8 encoding of JIS8."""
2
+ import codecs
3
+
4
+ jis8_decoding_map = codecs.make_identity_dict(range(256)) # type: ignore[attr-defined]
5
+ jis8_decoding_map.update({
6
+ 0x005C: 0x00A5, # Yen Sign
7
+ 0x007E: 0x203E, # Overline
8
+ })
9
+
10
+ for i in range(0x00A1, 0x00E0):
11
+ jis8_decoding_map[i] = i + 0xFEC0
12
+
13
+ jis8_encoding_map = codecs.make_encoding_map(jis8_decoding_map) # type: ignore[attr-defined]
14
+
15
+
16
+ def _jis_x_0201_encode(data, errors="strict"):
17
+ return codecs.charmap_encode(data, errors, jis8_encoding_map)
18
+
19
+
20
+ def _jis_x_0201_decode(data, errors="strict"):
21
+ return codecs.charmap_decode(data, errors, jis8_decoding_map)
22
+
23
+
24
+ def _jis_x_0201_search(name):
25
+ if name == "jis_8":
26
+ return codecs.CodecInfo(encode=_jis_x_0201_encode, decode=_jis_x_0201_decode, name="jis_8")
27
+
28
+ return None
29
+
30
+
31
+ # register the codec
32
+ codecs.register(_jis_x_0201_search)
@@ -0,0 +1,106 @@
1
+ """Connection base function."""
2
+ import abc
3
+
4
+ from .events import Event
5
+ from .settings import Settings
6
+
7
+
8
+ class Connection(abc.ABC):
9
+ """Abstract base class for a connection."""
10
+
11
+ def __init__(self, settings: Settings) -> None:
12
+ """Initialize connection object."""
13
+ super().__init__()
14
+
15
+ self._settings = settings
16
+
17
+ self._on_connected = Event()
18
+ self._on_data = Event()
19
+ self._on_disconnecting = Event()
20
+ self._on_disconnected = Event()
21
+
22
+ self._connected = False
23
+ self._disconnecting = False
24
+
25
+ @property
26
+ def on_connected(self) -> Event:
27
+ """Get the connected event.
28
+
29
+ Callbacks to this event are called, when a connection was established.
30
+
31
+ """
32
+ return self._on_connected
33
+
34
+ @property
35
+ def on_data(self) -> Event:
36
+ """Get the data received event.
37
+
38
+ Callbacks to this event are called, when data was received.
39
+
40
+ """
41
+ return self._on_data
42
+
43
+ @property
44
+ def on_disconnecting(self) -> Event:
45
+ """Get the disconnecting event.
46
+
47
+ Callbacks to this event are called, before the connection is separated.
48
+
49
+ """
50
+ return self._on_disconnecting
51
+
52
+ @property
53
+ def on_disconnected(self) -> Event:
54
+ """Get the disconnect event.
55
+
56
+ Callbacks to this event are called, after the connection was separated.
57
+
58
+ """
59
+ return self._on_disconnected
60
+
61
+ @property
62
+ def connected(self) -> bool:
63
+ """Get the connected flag.
64
+
65
+ This flag is True, when a connection is established.
66
+
67
+ """
68
+ return self._connected
69
+
70
+ @property
71
+ def disconnecting(self) -> bool:
72
+ """Get the disconnecting flag.
73
+
74
+ This flag is True, when the connection is about to be separated.
75
+
76
+ """
77
+ return self._disconnecting
78
+
79
+ @abc.abstractmethod
80
+ def enable(self):
81
+ """Enable the connection.
82
+
83
+ Open port and start receiver thread.
84
+ """
85
+ raise NotImplementedError("Connection.enable missing implementation")
86
+
87
+ @abc.abstractmethod
88
+ def disable(self):
89
+ """Disable the connection.
90
+
91
+ Close port and stop receiver thread.
92
+ """
93
+ raise NotImplementedError("Connection.disable missing implementation")
94
+
95
+ @abc.abstractmethod
96
+ def send_data(self, data: bytes) -> bool:
97
+ """Send data to the remote host.
98
+
99
+ Args:
100
+ data: encoded data.
101
+
102
+ Returns:
103
+ True if succeeded, False if failed
104
+
105
+ """
106
+ raise NotImplementedError("Connection.send_data missing implementation")