MTPPy2.0 0.2.0__tar.gz → 0.3.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 (274) hide show
  1. {mtppy2_0-0.2.0/src/MTPPy2.0.egg-info → mtppy2_0-0.3.0}/PKG-INFO +7 -4
  2. {mtppy2_0-0.2.0 → mtppy2_0-0.3.0}/README.md +1 -1
  3. mtppy2_0-0.3.0/pyproject.toml +179 -0
  4. {mtppy2_0-0.2.0 → mtppy2_0-0.3.0/src/MTPPy2.0.egg-info}/PKG-INFO +7 -4
  5. {mtppy2_0-0.2.0 → mtppy2_0-0.3.0}/src/MTPPy2.0.egg-info/SOURCES.txt +30 -10
  6. mtppy2_0-0.3.0/src/MTPPy2.0.egg-info/entry_points.txt +8 -0
  7. mtppy2_0-0.3.0/src/MTPPy2.0.egg-info/requires.txt +12 -0
  8. {mtppy2_0-0.2.0 → mtppy2_0-0.3.0}/src/examples/modbus/m15_logic.py +15 -5
  9. {mtppy2_0-0.2.0 → mtppy2_0-0.3.0}/src/examples/modbus/m15_pea.py +19 -13
  10. mtppy2_0-0.3.0/src/examples/modbus/m15_simulator.py +130 -0
  11. {mtppy2_0-0.2.0 → mtppy2_0-0.3.0}/src/examples/rmtp/minimal+pid.py +4 -4
  12. {mtppy2_0-0.2.0 → mtppy2_0-0.3.0}/src/examples/rmtp/minimal.py +8 -5
  13. {mtppy2_0-0.2.0 → mtppy2_0-0.3.0}/src/examples/scratch/pea_minimal.py +13 -13
  14. mtppy2_0-0.3.0/src/mtppy/feas/common/__init__.py +11 -0
  15. {mtppy2_0-0.2.0 → mtppy2_0-0.3.0}/src/mtppy/feas/modbus/config_loader.py +13 -8
  16. {mtppy2_0-0.2.0 → mtppy2_0-0.3.0}/src/mtppy/feas/modbus/config_loader_test.py +22 -19
  17. {mtppy2_0-0.2.0 → mtppy2_0-0.3.0}/src/mtppy/feas/modbus/io_action.py +21 -15
  18. {mtppy2_0-0.2.0 → mtppy2_0-0.3.0}/src/mtppy/feas/modbus/io_action_test.py +5 -5
  19. {mtppy2_0-0.2.0 → mtppy2_0-0.3.0}/src/mtppy/feas/modbus/io_logic.py +26 -7
  20. {mtppy2_0-0.2.0 → mtppy2_0-0.3.0}/src/mtppy/feas/modbus/io_logic_test.py +54 -26
  21. {mtppy2_0-0.2.0 → mtppy2_0-0.3.0}/src/mtppy/feas/modbus/io_procedure_test.py +1 -1
  22. {mtppy2_0-0.2.0 → mtppy2_0-0.3.0}/src/mtppy/feas/modbus/io_service.py +33 -8
  23. mtppy2_0-0.3.0/src/mtppy/feas/modbus/io_service_test.py +243 -0
  24. mtppy2_0-0.3.0/src/mtppy/feas/pea/__init__.py +6 -0
  25. mtppy2_0-0.3.0/src/mtppy/part3/data_assembly_set/active_elements/pid/pid_ctrl.py +553 -0
  26. {mtppy2_0-0.2.0 → mtppy2_0-0.3.0}/src/mtppy/part3/data_assembly_set/active_elements/pid/pid_ctrl_test.py +146 -4
  27. {mtppy2_0-0.2.0 → mtppy2_0-0.3.0}/src/mtppy/part4/automation_services/base_functions/service_operation_mode.py +228 -91
  28. {mtppy2_0-0.2.0 → mtppy2_0-0.3.0}/src/mtppy/part4/automation_services/base_functions/service_operation_mode_test.py +151 -24
  29. {mtppy2_0-0.2.0 → mtppy2_0-0.3.0}/src/mtppy/part4/automation_services/base_functions/service_source_mode.py +46 -8
  30. mtppy2_0-0.3.0/src/mtppy/part4/automation_services/helpers/command_en_control.py +200 -0
  31. {mtppy2_0-0.2.0 → mtppy2_0-0.3.0}/src/mtppy/part4/automation_services/helpers/command_en_control_test.py +23 -8
  32. {mtppy2_0-0.2.0 → mtppy2_0-0.3.0}/src/mtppy/part4/automation_services/helpers/thread_control.py +103 -4
  33. mtppy2_0-0.3.0/src/mtppy/part4/automation_services/helpers/thread_control_test.py +292 -0
  34. {mtppy2_0-0.2.0 → mtppy2_0-0.3.0}/src/mtppy/part4/automation_services/service.py +68 -11
  35. {mtppy2_0-0.2.0 → mtppy2_0-0.3.0}/src/mtppy/part4/automation_services/service_elements/parameter_elements/parameter_element.py +11 -9
  36. {mtppy2_0-0.2.0 → mtppy2_0-0.3.0}/src/mtppy/part4/automation_services/service_elements/procedure_health_view.py +26 -6
  37. {mtppy2_0-0.2.0 → mtppy2_0-0.3.0}/src/mtppy/part4/automation_services/service_elements/service_control.py +85 -24
  38. {mtppy2_0-0.2.0 → mtppy2_0-0.3.0}/src/mtppy/part4/definitions/command_codes_test.py +27 -0
  39. {mtppy2_0-0.2.0 → mtppy2_0-0.3.0}/src/mtppy/part4/definitions/state_codes.py +41 -9
  40. {mtppy2_0-0.2.0 → mtppy2_0-0.3.0}/src/mtppy/part4/definitions/state_codes_test.py +27 -0
  41. {mtppy2_0-0.2.0 → mtppy2_0-0.3.0}/src/mtppy/part5/communication_object.py +43 -22
  42. mtppy2_0-0.3.0/src/mtppy/part5/communication_object_test.py +170 -0
  43. mtppy2_0-0.3.0/src/mtppy/pea/application_logic/__init__.py +6 -0
  44. mtppy2_0-0.2.0/src/mtppy/pea/user_logic/user_logic_pea.py → mtppy2_0-0.3.0/src/mtppy/pea/application_logic/application_logic_pea.py +17 -12
  45. mtppy2_0-0.2.0/src/mtppy/pea/user_logic/user_logic_registry.py → mtppy2_0-0.3.0/src/mtppy/pea/application_logic/application_logic_registry.py +4 -4
  46. mtppy2_0-0.2.0/src/mtppy/pea/user_logic/user_logic_registry_test.py → mtppy2_0-0.3.0/src/mtppy/pea/application_logic/application_logic_registry_test.py +12 -8
  47. mtppy2_0-0.2.0/src/mtppy/pea/user_logic/user_logic_service.py → mtppy2_0-0.3.0/src/mtppy/pea/application_logic/uml_state_machine_service.py +24 -26
  48. mtppy2_0-0.2.0/src/mtppy/pea/user_logic/user_logic_service_scenario_test.py → mtppy2_0-0.3.0/src/mtppy/pea/application_logic/uml_state_machine_service_scenario_test.py +19 -17
  49. mtppy2_0-0.2.0/src/mtppy/pea/user_logic/user_logic_service_test.py → mtppy2_0-0.3.0/src/mtppy/pea/application_logic/uml_state_machine_service_test.py +96 -58
  50. {mtppy2_0-0.2.0 → mtppy2_0-0.3.0}/src/mtppy/pea/pea.py +24 -12
  51. {mtppy2_0-0.2.0 → mtppy2_0-0.3.0}/src/mtppy/pea/pea_opcua_server/pea_opcua_server.py +297 -148
  52. mtppy2_0-0.3.0/src/mtppy/pea/pea_opcua_server/pea_opcua_server_test.py +314 -0
  53. {mtppy2_0-0.2.0 → mtppy2_0-0.3.0}/src/mtppy/pea/rmtp_pea.py +18 -12
  54. {mtppy2_0-0.2.0 → mtppy2_0-0.3.0}/src/mtppy/pea/service_factory.py +43 -27
  55. {mtppy2_0-0.2.0 → mtppy2_0-0.3.0}/src/mtppy/utils/data_item.py +95 -7
  56. mtppy2_0-0.3.0/src/tools/fea_inspector.py +1546 -0
  57. mtppy2_0-0.3.0/src/tools/inspector_tc.py +1239 -0
  58. mtppy2_0-0.3.0/src/tools/list_ports.py +29 -0
  59. {mtppy2_0-0.2.0 → mtppy2_0-0.3.0}/src/tools/minimal_recipe.py +26 -8
  60. mtppy2_0-0.3.0/src/tools/modbus_cli.py +396 -0
  61. mtppy2_0-0.2.0/src/tools/inspect_mtp.py → mtppy2_0-0.3.0/src/tools/mtp_inspector.py +1 -1
  62. mtppy2_0-0.3.0/src/tools/pea_cli.py +280 -0
  63. mtppy2_0-0.3.0/src/tools/pea_inspector.py +492 -0
  64. mtppy2_0-0.3.0/src/tools/share/client_grammar_base.py +589 -0
  65. mtppy2_0-0.3.0/src/tools/share/modbus_client_function.py +663 -0
  66. mtppy2_0-0.3.0/src/tools/share/modbus_client_function_test.py +838 -0
  67. mtppy2_0-0.3.0/src/tools/share/modbus_client_grammar.py +238 -0
  68. mtppy2_0-0.3.0/src/tools/share/modbus_client_grammar_test.py +401 -0
  69. mtppy2_0-0.3.0/src/tools/share/pea_client_function.py +434 -0
  70. mtppy2_0-0.3.0/src/tools/share/pea_client_grammar.py +222 -0
  71. mtppy2_0-0.3.0/src/tools/share/pea_client_grammar_test.py +287 -0
  72. mtppy2_0-0.3.0/src/tools/sync_memories.py +110 -0
  73. mtppy2_0-0.3.0/src/utils/type_conversion_hypothesis_test.py +245 -0
  74. mtppy2_0-0.3.0/src/utils/type_conversion_test.py +36 -0
  75. {mtppy2_0-0.2.0 → mtppy2_0-0.3.0}/tests/test_examples.py +25 -13
  76. mtppy2_0-0.3.0/tests/test_pol_write_wo_timestamp.py +259 -0
  77. mtppy2_0-0.3.0/tests/test_reveal_direct_write.py +236 -0
  78. mtppy2_0-0.2.0/pyproject.toml +0 -123
  79. mtppy2_0-0.2.0/src/MTPPy2.0.egg-info/entry_points.txt +0 -5
  80. mtppy2_0-0.2.0/src/MTPPy2.0.egg-info/requires.txt +0 -7
  81. mtppy2_0-0.2.0/src/examples/modbus/m15_simulator.py +0 -42
  82. mtppy2_0-0.2.0/src/mtppy/feas/modbus/io_service_test.py +0 -62
  83. mtppy2_0-0.2.0/src/mtppy/part3/data_assembly_set/active_elements/pid/pid_ctrl.py +0 -337
  84. mtppy2_0-0.2.0/src/mtppy/part4/automation_services/helpers/command_en_control.py +0 -330
  85. mtppy2_0-0.2.0/src/mtppy/part4/automation_services/helpers/thread_control_test.py +0 -80
  86. mtppy2_0-0.2.0/src/mtppy/part5/communication_object_test.py +0 -59
  87. mtppy2_0-0.2.0/src/tools/scan_pea.py +0 -224
  88. mtppy2_0-0.2.0/src/utils/file_handling/__init__.py +0 -4
  89. mtppy2_0-0.2.0/src/utils/type_conversion_test.py +0 -114
  90. {mtppy2_0-0.2.0 → mtppy2_0-0.3.0}/LICENSE +0 -0
  91. {mtppy2_0-0.2.0 → mtppy2_0-0.3.0}/setup.cfg +0 -0
  92. {mtppy2_0-0.2.0 → mtppy2_0-0.3.0}/src/MTPPy2.0.egg-info/dependency_links.txt +0 -0
  93. {mtppy2_0-0.2.0 → mtppy2_0-0.3.0}/src/MTPPy2.0.egg-info/top_level.txt +0 -0
  94. {mtppy2_0-0.2.0 → mtppy2_0-0.3.0}/src/examples/__init__.py +0 -0
  95. {mtppy2_0-0.2.0 → mtppy2_0-0.3.0}/src/examples/modbus/__init__.py +0 -0
  96. {mtppy2_0-0.2.0 → mtppy2_0-0.3.0}/src/examples/modbus/m15_pea_test.py +0 -0
  97. {mtppy2_0-0.2.0 → mtppy2_0-0.3.0}/src/examples/pea_alarm_base.py +0 -0
  98. {mtppy2_0-0.2.0 → mtppy2_0-0.3.0}/src/examples/rmtp/__init__.py +0 -0
  99. {mtppy2_0-0.2.0 → mtppy2_0-0.3.0}/src/examples/scratch/__init__.py +0 -0
  100. {mtppy2_0-0.2.0 → mtppy2_0-0.3.0}/src/mtppy/__init__.py +0 -0
  101. {mtppy2_0-0.2.0 → mtppy2_0-0.3.0}/src/mtppy/feas/__init__.py +0 -0
  102. {mtppy2_0-0.2.0 → mtppy2_0-0.3.0}/src/mtppy/feas/modbus/__init__.py +12 -12
  103. {mtppy2_0-0.2.0 → mtppy2_0-0.3.0}/src/mtppy/feas/modbus/io_procedure.py +1 -1
  104. {mtppy2_0-0.2.0 → mtppy2_0-0.3.0}/src/mtppy/part1/__init__.py +0 -0
  105. {mtppy2_0-0.2.0 → mtppy2_0-0.3.0}/src/mtppy/part1/empty_folder_test.py +0 -0
  106. {mtppy2_0-0.2.0 → mtppy2_0-0.3.0}/src/mtppy/part3/__init__.py +0 -0
  107. {mtppy2_0-0.2.0 → mtppy2_0-0.3.0}/src/mtppy/part3/data_assembly_set/__init__.py +0 -0
  108. {mtppy2_0-0.2.0 → mtppy2_0-0.3.0}/src/mtppy/part3/data_assembly_set/active_elements/__init__.py +0 -0
  109. {mtppy2_0-0.2.0 → mtppy2_0-0.3.0}/src/mtppy/part3/data_assembly_set/active_elements/active_element.py +0 -0
  110. {mtppy2_0-0.2.0 → mtppy2_0-0.3.0}/src/mtppy/part3/data_assembly_set/active_elements/drives/__init__.py +0 -0
  111. {mtppy2_0-0.2.0 → mtppy2_0-0.3.0}/src/mtppy/part3/data_assembly_set/active_elements/drives/ana_drv.py +0 -0
  112. {mtppy2_0-0.2.0 → mtppy2_0-0.3.0}/src/mtppy/part3/data_assembly_set/active_elements/drives/ana_drv_test.py +0 -0
  113. {mtppy2_0-0.2.0 → mtppy2_0-0.3.0}/src/mtppy/part3/data_assembly_set/active_elements/drives/bin_drv.py +0 -0
  114. {mtppy2_0-0.2.0 → mtppy2_0-0.3.0}/src/mtppy/part3/data_assembly_set/active_elements/drives/bin_drv_test.py +0 -0
  115. {mtppy2_0-0.2.0 → mtppy2_0-0.3.0}/src/mtppy/part3/data_assembly_set/active_elements/drives/mon_ana_drv.py +0 -0
  116. {mtppy2_0-0.2.0 → mtppy2_0-0.3.0}/src/mtppy/part3/data_assembly_set/active_elements/drives/mon_ana_drv_test.py +0 -0
  117. {mtppy2_0-0.2.0 → mtppy2_0-0.3.0}/src/mtppy/part3/data_assembly_set/active_elements/drives/mon_bin_drv.py +0 -0
  118. {mtppy2_0-0.2.0 → mtppy2_0-0.3.0}/src/mtppy/part3/data_assembly_set/active_elements/drives/mon_bin_drv_test.py +0 -0
  119. {mtppy2_0-0.2.0 → mtppy2_0-0.3.0}/src/mtppy/part3/data_assembly_set/active_elements/pid/__init__.py +0 -0
  120. {mtppy2_0-0.2.0 → mtppy2_0-0.3.0}/src/mtppy/part3/data_assembly_set/active_elements/valves/__init__.py +0 -0
  121. {mtppy2_0-0.2.0 → mtppy2_0-0.3.0}/src/mtppy/part3/data_assembly_set/active_elements/valves/ana_vlv.py +0 -0
  122. {mtppy2_0-0.2.0 → mtppy2_0-0.3.0}/src/mtppy/part3/data_assembly_set/active_elements/valves/ana_vlv_test.py +0 -0
  123. {mtppy2_0-0.2.0 → mtppy2_0-0.3.0}/src/mtppy/part3/data_assembly_set/active_elements/valves/bin_vlv.py +0 -0
  124. {mtppy2_0-0.2.0 → mtppy2_0-0.3.0}/src/mtppy/part3/data_assembly_set/active_elements/valves/bin_vlv_test.py +0 -0
  125. {mtppy2_0-0.2.0 → mtppy2_0-0.3.0}/src/mtppy/part3/data_assembly_set/active_elements/valves/mon_ana_vlv.py +0 -0
  126. {mtppy2_0-0.2.0 → mtppy2_0-0.3.0}/src/mtppy/part3/data_assembly_set/active_elements/valves/mon_ana_vlv_test.py +0 -0
  127. {mtppy2_0-0.2.0 → mtppy2_0-0.3.0}/src/mtppy/part3/data_assembly_set/active_elements/valves/mon_bin_vlv.py +0 -0
  128. {mtppy2_0-0.2.0 → mtppy2_0-0.3.0}/src/mtppy/part3/data_assembly_set/active_elements/valves/mon_bin_vlv_test.py +0 -0
  129. {mtppy2_0-0.2.0 → mtppy2_0-0.3.0}/src/mtppy/part3/data_assembly_set/base_functions/__init__.py +0 -0
  130. {mtppy2_0-0.2.0 → mtppy2_0-0.3.0}/src/mtppy/part3/data_assembly_set/base_functions/operation_mode.py +0 -0
  131. {mtppy2_0-0.2.0 → mtppy2_0-0.3.0}/src/mtppy/part3/data_assembly_set/base_functions/operation_mode_test.py +0 -0
  132. {mtppy2_0-0.2.0 → mtppy2_0-0.3.0}/src/mtppy/part3/data_assembly_set/base_functions/oslevel.py +0 -0
  133. {mtppy2_0-0.2.0 → mtppy2_0-0.3.0}/src/mtppy/part3/data_assembly_set/base_functions/source_mode.py +0 -0
  134. {mtppy2_0-0.2.0 → mtppy2_0-0.3.0}/src/mtppy/part3/data_assembly_set/base_functions/source_mode_test.py +0 -0
  135. {mtppy2_0-0.2.0 → mtppy2_0-0.3.0}/src/mtppy/part3/data_assembly_set/base_functions/wqc.py +0 -0
  136. {mtppy2_0-0.2.0 → mtppy2_0-0.3.0}/src/mtppy/part3/data_assembly_set/base_functions/wqc_test.py +0 -0
  137. {mtppy2_0-0.2.0 → mtppy2_0-0.3.0}/src/mtppy/part3/data_assembly_set/data_assembly.py +0 -0
  138. {mtppy2_0-0.2.0 → mtppy2_0-0.3.0}/src/mtppy/part3/data_assembly_set/diagnostic_elements/__init__.py +0 -0
  139. {mtppy2_0-0.2.0 → mtppy2_0-0.3.0}/src/mtppy/part3/data_assembly_set/diagnostic_elements/diagnostic_element.py +0 -0
  140. {mtppy2_0-0.2.0 → mtppy2_0-0.3.0}/src/mtppy/part3/data_assembly_set/indicator_elements/__init__.py +0 -0
  141. {mtppy2_0-0.2.0 → mtppy2_0-0.3.0}/src/mtppy/part3/data_assembly_set/indicator_elements/indicator_element.py +0 -0
  142. {mtppy2_0-0.2.0 → mtppy2_0-0.3.0}/src/mtppy/part3/data_assembly_set/indicator_elements/views/__init__.py +0 -0
  143. {mtppy2_0-0.2.0 → mtppy2_0-0.3.0}/src/mtppy/part3/data_assembly_set/indicator_elements/views/ana_view.py +0 -0
  144. {mtppy2_0-0.2.0 → mtppy2_0-0.3.0}/src/mtppy/part3/data_assembly_set/indicator_elements/views/bin_view.py +0 -0
  145. {mtppy2_0-0.2.0 → mtppy2_0-0.3.0}/src/mtppy/part3/data_assembly_set/indicator_elements/views/dint_view.py +0 -0
  146. {mtppy2_0-0.2.0 → mtppy2_0-0.3.0}/src/mtppy/part3/data_assembly_set/indicator_elements/views/string_view.py +0 -0
  147. {mtppy2_0-0.2.0 → mtppy2_0-0.3.0}/src/mtppy/part3/data_assembly_set/operation_elements/__init__.py +0 -0
  148. {mtppy2_0-0.2.0 → mtppy2_0-0.3.0}/src/mtppy/part3/data_assembly_set/operation_elements/operation_element.py +0 -0
  149. {mtppy2_0-0.2.0 → mtppy2_0-0.3.0}/src/mtppy/part3/data_assembly_set/pea_elements/__init__.py +0 -0
  150. {mtppy2_0-0.2.0 → mtppy2_0-0.3.0}/src/mtppy/part3/data_assembly_set/pea_elements/pea_element.py +0 -0
  151. {mtppy2_0-0.2.0 → mtppy2_0-0.3.0}/src/mtppy/part3/data_assembly_set/pea_elements/pea_information_label/__init__.py +0 -0
  152. {mtppy2_0-0.2.0 → mtppy2_0-0.3.0}/src/mtppy/part3/data_assembly_set/pea_elements/pea_information_label/pea_information_label.py +0 -0
  153. {mtppy2_0-0.2.0 → mtppy2_0-0.3.0}/src/mtppy/part3/data_assembly_set/pea_elements/web_server_url_info/__init__.py +0 -0
  154. {mtppy2_0-0.2.0 → mtppy2_0-0.3.0}/src/mtppy/part3/data_assembly_set/pea_elements/web_server_url_info/web_server_url_info.py +0 -0
  155. {mtppy2_0-0.2.0 → mtppy2_0-0.3.0}/src/mtppy/part3/definitions/__init__.py +0 -0
  156. {mtppy2_0-0.2.0 → mtppy2_0-0.3.0}/src/mtppy/part3/definitions/mtp_access.py +0 -0
  157. {mtppy2_0-0.2.0 → mtppy2_0-0.3.0}/src/mtppy/part4/__init__.py +0 -0
  158. {mtppy2_0-0.2.0 → mtppy2_0-0.3.0}/src/mtppy/part4/automation_services/__init__.py +0 -0
  159. {mtppy2_0-0.2.0 → mtppy2_0-0.3.0}/src/mtppy/part4/automation_services/base_functions/__init__.py +0 -0
  160. {mtppy2_0-0.2.0 → mtppy2_0-0.3.0}/src/mtppy/part4/automation_services/base_functions/service_operator_interaction.py +0 -0
  161. {mtppy2_0-0.2.0 → mtppy2_0-0.3.0}/src/mtppy/part4/automation_services/base_functions/service_source_mode_test.py +0 -0
  162. {mtppy2_0-0.2.0 → mtppy2_0-0.3.0}/src/mtppy/part4/automation_services/helpers/__init__.py +0 -0
  163. {mtppy2_0-0.2.0 → mtppy2_0-0.3.0}/src/mtppy/part4/automation_services/helpers/state_machine.py +0 -0
  164. {mtppy2_0-0.2.0 → mtppy2_0-0.3.0}/src/mtppy/part4/automation_services/helpers/state_machine_test.py +0 -0
  165. {mtppy2_0-0.2.0 → mtppy2_0-0.3.0}/src/mtppy/part4/automation_services/procedure.py +0 -0
  166. {mtppy2_0-0.2.0 → mtppy2_0-0.3.0}/src/mtppy/part4/automation_services/procedure_test.py +0 -0
  167. {mtppy2_0-0.2.0 → mtppy2_0-0.3.0}/src/mtppy/part4/automation_services/service_elements/__init__.py +0 -0
  168. {mtppy2_0-0.2.0 → mtppy2_0-0.3.0}/src/mtppy/part4/automation_services/service_elements/parameter_elements/__init__.py +0 -0
  169. {mtppy2_0-0.2.0 → mtppy2_0-0.3.0}/src/mtppy/part4/automation_services/service_elements/parameter_elements/ana_serv_param.py +0 -0
  170. {mtppy2_0-0.2.0 → mtppy2_0-0.3.0}/src/mtppy/part4/automation_services/service_elements/parameter_elements/ana_serv_param_test.py +0 -0
  171. {mtppy2_0-0.2.0 → mtppy2_0-0.3.0}/src/mtppy/part4/automation_services/service_elements/parameter_elements/bin_serv_param.py +0 -0
  172. {mtppy2_0-0.2.0 → mtppy2_0-0.3.0}/src/mtppy/part4/automation_services/service_elements/parameter_elements/bin_serv_param_test.py +0 -0
  173. {mtppy2_0-0.2.0 → mtppy2_0-0.3.0}/src/mtppy/part4/automation_services/service_elements/parameter_elements/common_serv_param.py +0 -0
  174. {mtppy2_0-0.2.0 → mtppy2_0-0.3.0}/src/mtppy/part4/automation_services/service_elements/parameter_elements/dint_serv_param.py +0 -0
  175. {mtppy2_0-0.2.0 → mtppy2_0-0.3.0}/src/mtppy/part4/automation_services/service_elements/parameter_elements/dint_serv_param_test.py +0 -0
  176. {mtppy2_0-0.2.0 → mtppy2_0-0.3.0}/src/mtppy/part4/automation_services/service_elements/parameter_elements/parameter_element_test.py +0 -0
  177. {mtppy2_0-0.2.0 → mtppy2_0-0.3.0}/src/mtppy/part4/automation_services/service_elements/parameter_elements/string_serv_param.py +0 -0
  178. {mtppy2_0-0.2.0 → mtppy2_0-0.3.0}/src/mtppy/part4/automation_services/service_elements/parameter_elements/string_serv_param_test.py +0 -0
  179. {mtppy2_0-0.2.0 → mtppy2_0-0.3.0}/src/mtppy/part4/automation_services/service_elements/service_control_test.py +0 -0
  180. {mtppy2_0-0.2.0 → mtppy2_0-0.3.0}/src/mtppy/part4/automation_services/service_elements/service_element.py +0 -0
  181. {mtppy2_0-0.2.0 → mtppy2_0-0.3.0}/src/mtppy/part4/automation_services/service_test.py +0 -0
  182. {mtppy2_0-0.2.0 → mtppy2_0-0.3.0}/src/mtppy/part4/definitions/__init__.py +0 -0
  183. {mtppy2_0-0.2.0 → mtppy2_0-0.3.0}/src/mtppy/part4/definitions/command_codes.py +0 -0
  184. {mtppy2_0-0.2.0 → mtppy2_0-0.3.0}/src/mtppy/part4/process_values/__init__.py +0 -0
  185. {mtppy2_0-0.2.0 → mtppy2_0-0.3.0}/src/mtppy/part4/process_values/base_functions/__init__.py +0 -0
  186. {mtppy2_0-0.2.0 → mtppy2_0-0.3.0}/src/mtppy/part4/process_values/base_functions/vqc.py +0 -0
  187. {mtppy2_0-0.2.0 → mtppy2_0-0.3.0}/src/mtppy/part4/process_values/input_elements/__init__.py +0 -0
  188. {mtppy2_0-0.2.0 → mtppy2_0-0.3.0}/src/mtppy/part4/process_values/input_elements/ana_process_value_in.py +0 -0
  189. {mtppy2_0-0.2.0 → mtppy2_0-0.3.0}/src/mtppy/part4/process_values/input_elements/bin_process_value_in.py +0 -0
  190. {mtppy2_0-0.2.0 → mtppy2_0-0.3.0}/src/mtppy/part4/process_values/input_elements/dint_process_value_in.py +0 -0
  191. {mtppy2_0-0.2.0 → mtppy2_0-0.3.0}/src/mtppy/part4/process_values/input_elements/input_element.py +0 -0
  192. {mtppy2_0-0.2.0 → mtppy2_0-0.3.0}/src/mtppy/part4/process_values/input_elements/string_process_value_in.py +0 -0
  193. {mtppy2_0-0.2.0 → mtppy2_0-0.3.0}/src/mtppy/part5/__init__.py +0 -0
  194. {mtppy2_0-0.2.0 → mtppy2_0-0.3.0}/src/mtppy/part5/definitions/__init__.py +0 -0
  195. {mtppy2_0-0.2.0 → mtppy2_0-0.3.0}/src/mtppy/part5/definitions/iec61131_data_types.py +0 -0
  196. {mtppy2_0-0.2.0 → mtppy2_0-0.3.0}/src/mtppy/part5/definitions/iec61131_data_types_test.py +0 -0
  197. {mtppy2_0-0.2.0 → mtppy2_0-0.3.0}/src/mtppy/part5/definitions/opcua_data_types.py +0 -0
  198. {mtppy2_0-0.2.0 → mtppy2_0-0.3.0}/src/mtppy/part5/definitions/opcua_data_types_test.py +0 -0
  199. {mtppy2_0-0.2.0 → mtppy2_0-0.3.0}/src/mtppy/part5/definitions/w3c_xml_data_types.py +0 -0
  200. {mtppy2_0-0.2.0 → mtppy2_0-0.3.0}/src/mtppy/part5/definitions/w3c_xml_data_types_test.py +0 -0
  201. {mtppy2_0-0.2.0 → mtppy2_0-0.3.0}/src/mtppy/part5/server_assembly_set/__init__.py +0 -0
  202. {mtppy2_0-0.2.0 → mtppy2_0-0.3.0}/src/mtppy/part6/__init__.py +0 -0
  203. {mtppy2_0-0.2.0 → mtppy2_0-0.3.0}/src/mtppy/part6/alarm_set/__init__.py +0 -0
  204. {mtppy2_0-0.2.0 → mtppy2_0-0.3.0}/src/mtppy/part6/alarm_set/alarm.py +0 -0
  205. {mtppy2_0-0.2.0 → mtppy2_0-0.3.0}/src/mtppy/part6/alarm_set/alarm_test.py +0 -0
  206. {mtppy2_0-0.2.0 → mtppy2_0-0.3.0}/src/mtppy/pea/__init__.py +0 -0
  207. {mtppy2_0-0.2.0 → mtppy2_0-0.3.0}/src/mtppy/pea/data_assembly_factory.py +0 -0
  208. {mtppy2_0-0.2.0 → mtppy2_0-0.3.0}/src/mtppy/pea/data_assembly_factory_test.py +0 -0
  209. {mtppy2_0-0.2.0 → mtppy2_0-0.3.0}/src/mtppy/pea/mtp_generator/__init__.py +0 -0
  210. {mtppy2_0-0.2.0 → mtppy2_0-0.3.0}/src/mtppy/pea/mtp_generator/mtp_generator.py +0 -0
  211. {mtppy2_0-0.2.0 → mtppy2_0-0.3.0}/src/mtppy/pea/mtp_generator/mtp_generator_test.py +0 -0
  212. {mtppy2_0-0.2.0 → mtppy2_0-0.3.0}/src/mtppy/pea/pea_opcua_server/__init__.py +0 -0
  213. {mtppy2_0-0.2.0 → mtppy2_0-0.3.0}/src/mtppy/pea/pea_opcua_server/marshalling.py +0 -0
  214. {mtppy2_0-0.2.0 → mtppy2_0-0.3.0}/src/mtppy/pea/pea_opcua_server/opcua_options_provider/__init__.py +0 -0
  215. {mtppy2_0-0.2.0 → mtppy2_0-0.3.0}/src/mtppy/pea/pea_opcua_server/opcua_options_provider/instances/basic_opcua_options_provider.py +0 -0
  216. {mtppy2_0-0.2.0 → mtppy2_0-0.3.0}/src/mtppy/pea/pea_opcua_server/opcua_options_provider/opcua_options_provider.py +0 -0
  217. {mtppy2_0-0.2.0 → mtppy2_0-0.3.0}/src/mtppy/pea/pea_opcua_server/subscription_list.py +0 -0
  218. {mtppy2_0-0.2.0 → mtppy2_0-0.3.0}/src/mtppy/pea/pea_test.py +0 -0
  219. {mtppy2_0-0.2.0 → mtppy2_0-0.3.0}/src/mtppy/pea/rmtp_pea_test.py +0 -0
  220. {mtppy2_0-0.2.0 → mtppy2_0-0.3.0}/src/mtppy/pea/service_factory_test.py +0 -0
  221. {mtppy2_0-0.2.0/src/mtppy/pea/user_logic → mtppy2_0-0.3.0/src/mtppy/utils}/__init__.py +0 -0
  222. {mtppy2_0-0.2.0 → mtppy2_0-0.3.0}/src/mtppy/utils/data_assembly_dict.py +0 -0
  223. {mtppy2_0-0.2.0 → mtppy2_0-0.3.0}/src/mtppy/utils/data_assembly_dict_test.py +0 -0
  224. {mtppy2_0-0.2.0 → mtppy2_0-0.3.0}/src/mtppy/utils/data_item_com_test.py +0 -0
  225. {mtppy2_0-0.2.0 → mtppy2_0-0.3.0}/src/mtppy/utils/data_item_test.py +0 -0
  226. {mtppy2_0-0.2.0 → mtppy2_0-0.3.0}/src/mtppy/utils/logging.py +0 -0
  227. {mtppy2_0-0.2.0 → mtppy2_0-0.3.0}/src/mtppy/utils/logging_test.py +0 -0
  228. {mtppy2_0-0.2.0/src/mtppy/utils → mtppy2_0-0.3.0/src/mtppy/utils/mtp_file_handling}/__init__.py +0 -0
  229. {mtppy2_0-0.2.0 → mtppy2_0-0.3.0}/src/mtppy/utils/mtp_file_handling/extract_manifest_from_mtp_file.py +0 -0
  230. {mtppy2_0-0.2.0 → mtppy2_0-0.3.0}/src/mtppy/utils/mtp_file_handling/extract_mtp_file.py +0 -0
  231. {mtppy2_0-0.2.0 → mtppy2_0-0.3.0}/src/mtppy/utils/mtp_file_handling/is_valid_mtp.py +0 -0
  232. {mtppy2_0-0.2.0 → mtppy2_0-0.3.0}/src/mtppy/utils/mtp_file_handling/is_valid_path_for_manifest.py +0 -0
  233. {mtppy2_0-0.2.0 → mtppy2_0-0.3.0}/src/mtppy/utils/mtp_file_handling/is_valid_path_to_manifest.py +0 -0
  234. {mtppy2_0-0.2.0 → mtppy2_0-0.3.0}/src/mtppy/utils/mtp_file_handling/is_valid_path_to_mtp.py +0 -0
  235. {mtppy2_0-0.2.0 → mtppy2_0-0.3.0}/src/mtppy/utils/mtp_file_handling/load_manifest_file.py +0 -0
  236. {mtppy2_0-0.2.0/src/mtppy/utils/mtp_file_handling → mtppy2_0-0.3.0/src/mtppy/utils/mtp_file_handling/mtp_reader}/__init__.py +0 -0
  237. {mtppy2_0-0.2.0 → mtppy2_0-0.3.0}/src/mtppy/utils/mtp_file_handling/mtp_reader/mtp_reader.py +0 -0
  238. {mtppy2_0-0.2.0 → mtppy2_0-0.3.0}/src/mtppy/utils/mtp_file_handling/mtp_reader/mtp_reader_test.py +0 -0
  239. {mtppy2_0-0.2.0 → mtppy2_0-0.3.0}/src/mtppy/utils/mtp_file_handling/mtp_reader/mtp_xml.py +0 -0
  240. {mtppy2_0-0.2.0 → mtppy2_0-0.3.0}/src/mtppy/utils/mtp_file_handling/mtp_reader/mtp_xml_test.py +0 -0
  241. {mtppy2_0-0.2.0/src/mtppy/utils/mtp_file_handling/mtp_reader → mtppy2_0-0.3.0/src/mtppy/utils/mtp_file_handling/mtp_writer}/__init__.py +0 -0
  242. {mtppy2_0-0.2.0 → mtppy2_0-0.3.0}/src/mtppy/utils/mtp_file_handling/mtp_writer/mtp_writer.py +0 -0
  243. {mtppy2_0-0.2.0 → mtppy2_0-0.3.0}/src/mtppy/utils/mtp_file_handling/mtp_writer/ressources/get_content_types.py +0 -0
  244. {mtppy2_0-0.2.0 → mtppy2_0-0.3.0}/src/mtppy/utils/mtp_file_handling/mtp_writer/ressources/get_rels.py +0 -0
  245. {mtppy2_0-0.2.0 → mtppy2_0-0.3.0}/src/mtppy/utils/mtp_file_handling/mtp_writer/test_mtp_writer.py +0 -0
  246. {mtppy2_0-0.2.0 → mtppy2_0-0.3.0}/src/mtppy/utils/mtp_file_handling/write_manifest_file.py +0 -0
  247. {mtppy2_0-0.2.0 → mtppy2_0-0.3.0}/src/mtppy/utils/mtp_file_handling/write_manifest_file_test.py +0 -0
  248. {mtppy2_0-0.2.0 → mtppy2_0-0.3.0}/src/mtppy/utils/mtp_file_handling/write_mtp_file.py +0 -0
  249. {mtppy2_0-0.2.0 → mtppy2_0-0.3.0}/src/mtppy/utils/mtp_file_handling/write_mtp_file_test.py +0 -0
  250. {mtppy2_0-0.2.0 → mtppy2_0-0.3.0}/src/mtppy/utils/testing.py +0 -0
  251. {mtppy2_0-0.2.0 → mtppy2_0-0.3.0}/src/tools/__init__.py +0 -0
  252. {mtppy2_0-0.2.0 → mtppy2_0-0.3.0}/src/tools/create_bugreport.py +0 -0
  253. {mtppy2_0-0.2.0 → mtppy2_0-0.3.0}/src/utils/__init__.py +0 -0
  254. {mtppy2_0-0.2.0/src/mtppy/utils/mtp_file_handling/mtp_writer → mtppy2_0-0.3.0/src/utils/file_handling}/__init__.py +0 -0
  255. {mtppy2_0-0.2.0 → mtppy2_0-0.3.0}/src/utils/file_handling/cleanup_folder.py +0 -0
  256. {mtppy2_0-0.2.0 → mtppy2_0-0.3.0}/src/utils/file_handling/get_utc_foldername_with_ms.py +0 -0
  257. {mtppy2_0-0.2.0 → mtppy2_0-0.3.0}/src/utils/file_handling/get_work_dir.py +0 -0
  258. {mtppy2_0-0.2.0 → mtppy2_0-0.3.0}/src/utils/file_handling/is_valid_path_for_json.py +0 -0
  259. {mtppy2_0-0.2.0 → mtppy2_0-0.3.0}/src/utils/file_handling/is_valid_path_to_json.py +0 -0
  260. {mtppy2_0-0.2.0 → mtppy2_0-0.3.0}/src/utils/file_handling/load_json_file.py +0 -0
  261. {mtppy2_0-0.2.0 → mtppy2_0-0.3.0}/src/utils/file_handling/read_file_from_file_archive.py +0 -0
  262. {mtppy2_0-0.2.0 → mtppy2_0-0.3.0}/src/utils/file_handling/read_file_string.py +0 -0
  263. {mtppy2_0-0.2.0 → mtppy2_0-0.3.0}/src/utils/file_handling/validate_json_data.py +0 -0
  264. {mtppy2_0-0.2.0 → mtppy2_0-0.3.0}/src/utils/file_handling/write_json_file.py +0 -0
  265. {mtppy2_0-0.2.0 → mtppy2_0-0.3.0}/src/utils/get_uuid.py +0 -0
  266. {mtppy2_0-0.2.0 → mtppy2_0-0.3.0}/src/utils/get_uuid_test.py +0 -0
  267. {mtppy2_0-0.2.0 → mtppy2_0-0.3.0}/src/utils/logging.py +0 -0
  268. {mtppy2_0-0.2.0 → mtppy2_0-0.3.0}/src/utils/logging_test.py +0 -0
  269. {mtppy2_0-0.2.0 → mtppy2_0-0.3.0}/src/utils/opcua/check_node.py +0 -0
  270. {mtppy2_0-0.2.0 → mtppy2_0-0.3.0}/src/utils/resolve_unit/resolve_unit.py +0 -0
  271. {mtppy2_0-0.2.0 → mtppy2_0-0.3.0}/src/utils/resolve_unit/unit_lib.py +0 -0
  272. {mtppy2_0-0.2.0 → mtppy2_0-0.3.0}/src/utils/resolve_unit/unit_lib_test.py +0 -0
  273. {mtppy2_0-0.2.0 → mtppy2_0-0.3.0}/src/utils/type_conversion.py +0 -0
  274. {mtppy2_0-0.2.0 → mtppy2_0-0.3.0}/tests/test_data_item_handshake.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: MTPPy2.0
3
- Version: 0.2.0
3
+ Version: 0.3.0
4
4
  Summary: Open-source modular automation with MTP 2.0
5
5
  Author: Dresden University of Technology, Process-to-Order Group
6
6
  Author-email: Julius Lorenz <julius.lorenz@tu-dresden.de>, Leon Urbas <leon.urbas@tu-dresden.de>
@@ -18,13 +18,16 @@ Classifier: Topic :: Scientific/Engineering
18
18
  Requires-Python: >=3.13
19
19
  Description-Content-Type: text/markdown
20
20
  License-File: LICENSE
21
- Requires-Dist: opcua~=0.98.13
22
21
  Requires-Dist: jsonschema>=4.26.0
23
22
  Requires-Dist: chardet>=7.6.0
24
23
  Requires-Dist: aiohttp>=3.12.0
25
24
  Requires-Dist: pymodbus>=3.15.0
26
25
  Requires-Dist: simple-pid>=2.0.1
27
- Requires-Dist: pymodbus>=3.15.0
26
+ Requires-Dist: rich>=14.0.0
27
+ Requires-Dist: pyserial>=3.5
28
+ Requires-Dist: windows-curses>=2.4.2; sys_platform == "win32"
29
+ Requires-Dist: lark>=1.3.1
30
+ Requires-Dist: opcua>=0.98.13
28
31
  Dynamic: license-file
29
32
 
30
33
  # MTPPy2.0
@@ -38,7 +41,7 @@ Towards that end MTPPy2.0 implements several parts of the PNO MTP 2.0 specificat
38
41
 
39
42
  ## Status
40
43
  [![Latest Release](https://gitlab.hrz.tu-chemnitz.de/process-to-order-group/mtppy2.0/-/badges/release.svg)](https://gitlab.hrz.tu-chemnitz.de/process-to-order-group/mtppy2.0/-/releases)
41
- [![coverage report](https://gitlab.hrz.tu-chemnitz.de/process-to-order-group/mtppy2.0/badges/main/coverage.svg)](https://gitlab.hrz.tu-chemnitz.de/process-to-order-group/mtppy2.0/-/commits/main)
44
+ [![coverage report](https://gitlab.hrz.tu-chemnitz.de/process-to-order-group/mtppy2.0/badges/main/coverage.svg)](https://gitlab.hrz.tu-chemnitz.de/process-to-order-group/mtppy2.0/-/commits/develop)
42
45
 
43
46
  ## License
44
47
  MTPPy2.0 is licensed under the [MIT license](./LICENSE).
@@ -9,7 +9,7 @@ Towards that end MTPPy2.0 implements several parts of the PNO MTP 2.0 specificat
9
9
 
10
10
  ## Status
11
11
  [![Latest Release](https://gitlab.hrz.tu-chemnitz.de/process-to-order-group/mtppy2.0/-/badges/release.svg)](https://gitlab.hrz.tu-chemnitz.de/process-to-order-group/mtppy2.0/-/releases)
12
- [![coverage report](https://gitlab.hrz.tu-chemnitz.de/process-to-order-group/mtppy2.0/badges/main/coverage.svg)](https://gitlab.hrz.tu-chemnitz.de/process-to-order-group/mtppy2.0/-/commits/main)
12
+ [![coverage report](https://gitlab.hrz.tu-chemnitz.de/process-to-order-group/mtppy2.0/badges/main/coverage.svg)](https://gitlab.hrz.tu-chemnitz.de/process-to-order-group/mtppy2.0/-/commits/develop)
13
13
 
14
14
  ## License
15
15
  MTPPy2.0 is licensed under the [MIT license](./LICENSE).
@@ -0,0 +1,179 @@
1
+ [project]
2
+ name = "MTPPy2.0"
3
+ version = "0.3.0"
4
+ description = "Open-source modular automation with MTP 2.0"
5
+ readme="README.md"
6
+ license = "MIT"
7
+ license-files = ["LICENSE"]
8
+ requires-python = ">=3.13"
9
+ authors = [
10
+ { name = "Dresden University of Technology, Process-to-Order Group" },
11
+ { name = "Julius Lorenz", email="julius.lorenz@tu-dresden.de" },
12
+ { name = "Leon Urbas", email="leon.urbas@tu-dresden.de" },
13
+ ]
14
+ classifiers = [
15
+ "Development Status :: 3 - Alpha",
16
+ "Intended Audience :: Developers",
17
+ "Intended Audience :: Education",
18
+ "Intended Audience :: Science/Research",
19
+ "Intended Audience :: Manufacturing",
20
+ "Operating System :: OS Independent",
21
+ "Programming Language :: Python :: 3.13",
22
+ "Topic :: Scientific/Engineering",
23
+ ]
24
+ dependencies = [
25
+ "jsonschema>=4.26.0",
26
+ "chardet>=7.6.0",
27
+ "aiohttp>=3.12.0",
28
+ "pymodbus>=3.15.0",
29
+ "simple-pid>=2.0.1",
30
+ "rich>=14.0.0",
31
+ "pyserial>=3.5",
32
+ "windows-curses>=2.4.2; sys_platform == 'win32'",
33
+ "lark>=1.3.1",
34
+ "opcua>=0.98.13",
35
+ ]
36
+
37
+ [project.urls]
38
+ Homepage = "https://gitlab.hrz.tu-chemnitz.de/process-to-order-group/mtppy2.0"
39
+ Issues= "https://gitlab.hrz.tu-chemnitz.de/process-to-order-group/mtppy2.0/-/boards"
40
+
41
+
42
+ [build-system]
43
+ requires = ["setuptools~=82.0.1"]
44
+ build-backend = "setuptools.build_meta"
45
+
46
+ [project.scripts]
47
+ mtp_inspector = "tools.mtp_inspector:main"
48
+ minimal_recipe = "tools.minimal_recipe:main"
49
+ pea_inspector = "tools.pea_inspector:main"
50
+ fea_inspector = "tools.fea_inspector:main"
51
+ modbus_cli = "tools.modbus_cli:main"
52
+ inspector_tc = "tools.inspector_tc:main"
53
+ rmtp_pea = "mtppy.pea.rmtp_pea:main"
54
+
55
+ [dependency-groups]
56
+ dev = [
57
+ "black>=26.5.1",
58
+ "circular-import-detector>=1.0.18",
59
+ "hypothesis>=6.168.0",
60
+ "ipykernel>=7.3.0",
61
+ "linkchecker>=10.6.0",
62
+ "mkdocstrings[python]>=1.0.6",
63
+ "opcua-client>=0.8.4",
64
+ "py-spy>=0.4.2",
65
+ "pytest~=9.1.1",
66
+ "pytest-console-scripts>=1.4.1",
67
+ "pytest-cov>=7.1.0",
68
+ "pytest-coverage>=0.0",
69
+ "pytest-mock>=3.15.1",
70
+ "pytest-timeout>=2.4.0",
71
+ "ruff>=0.16.0",
72
+ "setuptools~=82.0.1",
73
+ "streamlit>=1.63.0",
74
+ "streamlit-autorefresh>=1.0.1",
75
+ "zensical>=0.0.51",
76
+ ]
77
+
78
+ [tool.setuptools.dynamic]
79
+ version = { attr = "mtppy.__version__" }
80
+
81
+ [tool.setuptools.packages.find]
82
+ where = ["src"]
83
+
84
+ [tool.setuptools]
85
+ package-dir = { "" = "src" }
86
+
87
+ [tool.coverage.run]
88
+ include = [
89
+ "*/src/mtppy/*"
90
+ ]
91
+ omit = [
92
+ "*/venv/*",
93
+ "*/.venv/*",
94
+ "*/__pycache__/*",
95
+ "*/setup.py",
96
+ "*/distutils/*",
97
+ "*/build/*",
98
+ "*/*_test.py",
99
+ "*/test_*.py",
100
+ ]
101
+
102
+ [tool.uv]
103
+
104
+ [tool.pytest]
105
+ pythonpath = ["src"]
106
+ testpaths = ["src", "tests"]
107
+ filterwarnings = [
108
+ "ignore::UserWarning",
109
+ 'ignore:datetime.datetime.utcnow\(\) is deprecated:DeprecationWarning',
110
+ ]
111
+
112
+ [tool.ruff]
113
+ line-length = 88
114
+ target-version = "py310"
115
+
116
+ [tool.ruff.lint]
117
+ select = ["ALL"]
118
+ ignore = [
119
+ "ANN002", "ANN003", # missing-type-args / missing-type-kwargs (noisy for *args/**kwargs)
120
+ "D203", # incompatible with D211
121
+ "D212", "D213", # incompatible with each other
122
+ "D205", # missing blank line after summary
123
+ "D413", # missing blank line after last section
124
+ "PLR0913", # too many arguments (common in dataclass-heavy code)
125
+ "PLR0917", # too many positional arguments (DataItem / DataAssembly constructors)
126
+ # Boolean-typed params are pervasive: PNO MTP 2.0 DataItems are boolean and
127
+ # their write callbacks are invoked positionally as ``cb(value)``, so the
128
+ # boolean-trap rules cannot be satisfied without breaking the API.
129
+ "FBT001", # boolean-typed positional argument
130
+ "FBT002", # boolean default positional argument
131
+ "FBT003", # boolean positional value in call
132
+ ]
133
+
134
+ [tool.ruff.lint.per-file-ignores]
135
+ # The tests/ directory uses rootdir-based imports (no __init__.py by design).
136
+ "tests/**/*.py" = [
137
+ "INP001", # implicit namespace package
138
+ ]
139
+ # CLI tools print to stdout by design.
140
+ "src/tools/**/*.py" = [
141
+ "T201", # print() is the intended CLI output mechanism
142
+ ]
143
+ # Test files: docstrings, magic values, type annotations, and boolean params
144
+ # are not expected at the same strictness as production code.
145
+ "*_test.py" = [
146
+ "ANN001", "ANN201", "ANN202", # missing type annotations
147
+ "D101", "D102", "D103", "D104", "D107", # missing docstrings
148
+ "PLR2004", # magic value in comparison (test assertions)
149
+ "ERA001", # commented-out code
150
+ "ARG002", # unused method argument (fixtures)
151
+ "FBT001", "FBT002", "FBT003", # boolean positional args
152
+ "EM101", "EM102", "TRY003", # exception message style
153
+ "PLC0415", # import inside function
154
+ "F841", # unused variable
155
+ "N802", # function naming
156
+ "PT006", # pytest parametrize names type
157
+ "S101", # assert
158
+ "C901", # complex structure
159
+ "PLR0917", # too many positional arguments
160
+ ]
161
+ "test_*.py" = [
162
+ "ANN001", "ANN201", "ANN202",
163
+ "D101", "D102", "D103", "D104", "D107",
164
+ "PLR2004",
165
+ "ERA001",
166
+ "ARG002",
167
+ "FBT001", "FBT002", "FBT003",
168
+ "EM101", "EM102", "TRY003",
169
+ "PLC0415",
170
+ "F841",
171
+ "N802",
172
+ "PT006",
173
+ "S101",
174
+ "C901",
175
+ "PLR0917",
176
+ ]
177
+
178
+ [tool.ruff.lint.pydocstyle]
179
+ convention = "google"
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: MTPPy2.0
3
- Version: 0.2.0
3
+ Version: 0.3.0
4
4
  Summary: Open-source modular automation with MTP 2.0
5
5
  Author: Dresden University of Technology, Process-to-Order Group
6
6
  Author-email: Julius Lorenz <julius.lorenz@tu-dresden.de>, Leon Urbas <leon.urbas@tu-dresden.de>
@@ -18,13 +18,16 @@ Classifier: Topic :: Scientific/Engineering
18
18
  Requires-Python: >=3.13
19
19
  Description-Content-Type: text/markdown
20
20
  License-File: LICENSE
21
- Requires-Dist: opcua~=0.98.13
22
21
  Requires-Dist: jsonschema>=4.26.0
23
22
  Requires-Dist: chardet>=7.6.0
24
23
  Requires-Dist: aiohttp>=3.12.0
25
24
  Requires-Dist: pymodbus>=3.15.0
26
25
  Requires-Dist: simple-pid>=2.0.1
27
- Requires-Dist: pymodbus>=3.15.0
26
+ Requires-Dist: rich>=14.0.0
27
+ Requires-Dist: pyserial>=3.5
28
+ Requires-Dist: windows-curses>=2.4.2; sys_platform == "win32"
29
+ Requires-Dist: lark>=1.3.1
30
+ Requires-Dist: opcua>=0.98.13
28
31
  Dynamic: license-file
29
32
 
30
33
  # MTPPy2.0
@@ -38,7 +41,7 @@ Towards that end MTPPy2.0 implements several parts of the PNO MTP 2.0 specificat
38
41
 
39
42
  ## Status
40
43
  [![Latest Release](https://gitlab.hrz.tu-chemnitz.de/process-to-order-group/mtppy2.0/-/badges/release.svg)](https://gitlab.hrz.tu-chemnitz.de/process-to-order-group/mtppy2.0/-/releases)
41
- [![coverage report](https://gitlab.hrz.tu-chemnitz.de/process-to-order-group/mtppy2.0/badges/main/coverage.svg)](https://gitlab.hrz.tu-chemnitz.de/process-to-order-group/mtppy2.0/-/commits/main)
44
+ [![coverage report](https://gitlab.hrz.tu-chemnitz.de/process-to-order-group/mtppy2.0/badges/main/coverage.svg)](https://gitlab.hrz.tu-chemnitz.de/process-to-order-group/mtppy2.0/-/commits/develop)
42
45
 
43
46
  ## License
44
47
  MTPPy2.0 is licensed under the [MIT license](./LICENSE).
@@ -21,6 +21,7 @@ src/examples/scratch/__init__.py
21
21
  src/examples/scratch/pea_minimal.py
22
22
  src/mtppy/__init__.py
23
23
  src/mtppy/feas/__init__.py
24
+ src/mtppy/feas/common/__init__.py
24
25
  src/mtppy/feas/modbus/__init__.py
25
26
  src/mtppy/feas/modbus/config_loader.py
26
27
  src/mtppy/feas/modbus/config_loader_test.py
@@ -32,6 +33,7 @@ src/mtppy/feas/modbus/io_procedure.py
32
33
  src/mtppy/feas/modbus/io_procedure_test.py
33
34
  src/mtppy/feas/modbus/io_service.py
34
35
  src/mtppy/feas/modbus/io_service_test.py
36
+ src/mtppy/feas/pea/__init__.py
35
37
  src/mtppy/part1/__init__.py
36
38
  src/mtppy/part1/empty_folder_test.py
37
39
  src/mtppy/part3/__init__.py
@@ -161,23 +163,24 @@ src/mtppy/pea/rmtp_pea.py
161
163
  src/mtppy/pea/rmtp_pea_test.py
162
164
  src/mtppy/pea/service_factory.py
163
165
  src/mtppy/pea/service_factory_test.py
166
+ src/mtppy/pea/application_logic/__init__.py
167
+ src/mtppy/pea/application_logic/application_logic_pea.py
168
+ src/mtppy/pea/application_logic/application_logic_registry.py
169
+ src/mtppy/pea/application_logic/application_logic_registry_test.py
170
+ src/mtppy/pea/application_logic/uml_state_machine_service.py
171
+ src/mtppy/pea/application_logic/uml_state_machine_service_scenario_test.py
172
+ src/mtppy/pea/application_logic/uml_state_machine_service_test.py
164
173
  src/mtppy/pea/mtp_generator/__init__.py
165
174
  src/mtppy/pea/mtp_generator/mtp_generator.py
166
175
  src/mtppy/pea/mtp_generator/mtp_generator_test.py
167
176
  src/mtppy/pea/pea_opcua_server/__init__.py
168
177
  src/mtppy/pea/pea_opcua_server/marshalling.py
169
178
  src/mtppy/pea/pea_opcua_server/pea_opcua_server.py
179
+ src/mtppy/pea/pea_opcua_server/pea_opcua_server_test.py
170
180
  src/mtppy/pea/pea_opcua_server/subscription_list.py
171
181
  src/mtppy/pea/pea_opcua_server/opcua_options_provider/__init__.py
172
182
  src/mtppy/pea/pea_opcua_server/opcua_options_provider/opcua_options_provider.py
173
183
  src/mtppy/pea/pea_opcua_server/opcua_options_provider/instances/basic_opcua_options_provider.py
174
- src/mtppy/pea/user_logic/__init__.py
175
- src/mtppy/pea/user_logic/user_logic_pea.py
176
- src/mtppy/pea/user_logic/user_logic_registry.py
177
- src/mtppy/pea/user_logic/user_logic_registry_test.py
178
- src/mtppy/pea/user_logic/user_logic_service.py
179
- src/mtppy/pea/user_logic/user_logic_service_scenario_test.py
180
- src/mtppy/pea/user_logic/user_logic_service_test.py
181
184
  src/mtppy/utils/__init__.py
182
185
  src/mtppy/utils/data_assembly_dict.py
183
186
  src/mtppy/utils/data_assembly_dict_test.py
@@ -211,15 +214,30 @@ src/mtppy/utils/mtp_file_handling/mtp_writer/ressources/get_content_types.py
211
214
  src/mtppy/utils/mtp_file_handling/mtp_writer/ressources/get_rels.py
212
215
  src/tools/__init__.py
213
216
  src/tools/create_bugreport.py
214
- src/tools/inspect_mtp.py
217
+ src/tools/fea_inspector.py
218
+ src/tools/inspector_tc.py
219
+ src/tools/list_ports.py
215
220
  src/tools/minimal_recipe.py
216
- src/tools/scan_pea.py
221
+ src/tools/modbus_cli.py
222
+ src/tools/mtp_inspector.py
223
+ src/tools/pea_cli.py
224
+ src/tools/pea_inspector.py
225
+ src/tools/sync_memories.py
226
+ src/tools/share/client_grammar_base.py
227
+ src/tools/share/modbus_client_function.py
228
+ src/tools/share/modbus_client_function_test.py
229
+ src/tools/share/modbus_client_grammar.py
230
+ src/tools/share/modbus_client_grammar_test.py
231
+ src/tools/share/pea_client_function.py
232
+ src/tools/share/pea_client_grammar.py
233
+ src/tools/share/pea_client_grammar_test.py
217
234
  src/utils/__init__.py
218
235
  src/utils/get_uuid.py
219
236
  src/utils/get_uuid_test.py
220
237
  src/utils/logging.py
221
238
  src/utils/logging_test.py
222
239
  src/utils/type_conversion.py
240
+ src/utils/type_conversion_hypothesis_test.py
223
241
  src/utils/type_conversion_test.py
224
242
  src/utils/file_handling/__init__.py
225
243
  src/utils/file_handling/cleanup_folder.py
@@ -237,4 +255,6 @@ src/utils/resolve_unit/resolve_unit.py
237
255
  src/utils/resolve_unit/unit_lib.py
238
256
  src/utils/resolve_unit/unit_lib_test.py
239
257
  tests/test_data_item_handshake.py
240
- tests/test_examples.py
258
+ tests/test_examples.py
259
+ tests/test_pol_write_wo_timestamp.py
260
+ tests/test_reveal_direct_write.py
@@ -0,0 +1,8 @@
1
+ [console_scripts]
2
+ fea_inspector = tools.fea_inspector:main
3
+ inspector_tc = tools.inspector_tc:main
4
+ minimal_recipe = tools.minimal_recipe:main
5
+ modbus_cli = tools.modbus_cli:main
6
+ mtp_inspector = tools.mtp_inspector:main
7
+ pea_inspector = tools.pea_inspector:main
8
+ rmtp_pea = mtppy.pea.rmtp_pea:main
@@ -0,0 +1,12 @@
1
+ jsonschema>=4.26.0
2
+ chardet>=7.6.0
3
+ aiohttp>=3.12.0
4
+ pymodbus>=3.15.0
5
+ simple-pid>=2.0.1
6
+ rich>=14.0.0
7
+ pyserial>=3.5
8
+ lark>=1.3.1
9
+ opcua>=0.98.13
10
+
11
+ [:sys_platform == "win32"]
12
+ windows-curses>=2.4.2
@@ -5,10 +5,13 @@ __copyright__ = (
5
5
  )
6
6
  __license__ = "MIT"
7
7
 
8
- from mtppy.part3.data_assembly_set.active_elements.pid.pid_ctrl import PIDCtrl
9
- from mtppy.utils.logging import logger
8
+ from typing import TYPE_CHECKING
9
+
10
10
  from mtppy.part4.automation_services.service import Service
11
- from mtppy.pea.user_logic.user_logic_registry import register
11
+ from mtppy.pea.application_logic.application_logic_registry import register
12
+
13
+ if TYPE_CHECKING:
14
+ from mtppy.part3.data_assembly_set.active_elements.pid.pid_ctrl import PIDCtrl
12
15
 
13
16
  __requirements_mtp__ = "M15.mtp"
14
17
 
@@ -28,6 +31,7 @@ Spezifikation für produce.auto.starting.entry:
28
31
 
29
32
  @register("produce.auto.starting.entry")
30
33
  def reset_units(context: Service) -> bool:
34
+ """Reset display units to zero and configure the PID controller."""
31
35
  context.get_param(DA_PRESSURE_UNITS).V = 0
32
36
  context.get_param(DA_TEMP_UNITS).V = 0
33
37
  context.get_param(DA_VOLUME_UNITS).V = 0
@@ -52,6 +56,7 @@ Spezifikation für produce.auto.starting.do:
52
56
 
53
57
  @register("produce.auto.starting.do")
54
58
  def start_generator(context: Service) -> bool:
59
+ """Start the generator and open the outlet valve."""
55
60
  start_stop = context.get_param(DA_START_STOP)
56
61
  valve = context.get_param(DA_VALVE)
57
62
  p_out_sp = context.get_param("p_out_sp")
@@ -72,6 +77,7 @@ Spezifikation für produce.auto.holding.do:
72
77
 
73
78
  @register("produce.auto.holding.do")
74
79
  def hold_generator(context: Service) -> bool:
80
+ """Close the outlet valve."""
75
81
  context.get_param(DA_VALVE).CloseAut = 1
76
82
  return True
77
83
 
@@ -84,21 +90,25 @@ Spezifikation für produce.auto.unholding.do:
84
90
 
85
91
  @register("produce.auto.unholding.do")
86
92
  def unhold_generator(context: Service) -> bool:
93
+ """Open the outlet valve."""
87
94
  context.get_param(DA_VALVE).OpenAut = 1
88
95
  return True
89
96
 
90
97
 
91
98
  """
92
99
  Spezifikation für produce.auto.completing.do sowie stopping und aborting:
93
- Stoppe den Generator (DA_START_STOP.V = 1) und schließe das
100
+ Stoppe den Generator (DA_START_STOP.V = 1) und schließe das
94
101
  Auslassventil (DA_VALVE.V = 0).
95
102
  """
96
103
 
97
104
 
98
105
  @register(
99
- "produce.auto.completing.do", "produce.auto.stopping.do", "produce.auto.aborting.do"
106
+ "produce.auto.completing.do",
107
+ "produce.auto.stopping.do",
108
+ "produce.auto.aborting.do",
100
109
  )
101
110
  def stop_generator(context: Service) -> bool:
111
+ """Stop the generator and close the outlet valve."""
102
112
  start_stop = context.get_param(DA_START_STOP)
103
113
  valve = context.get_param(DA_VALVE)
104
114
 
@@ -17,7 +17,8 @@ from mtppy.feas.modbus import (
17
17
  load_register_mappings,
18
18
  )
19
19
  from mtppy.part3.data_assembly_set.data_assembly import DataAssembly
20
- from mtppy.pea.user_logic.user_logic_pea import UserLogicPEA
20
+ from mtppy.part4.automation_services.procedure import Procedure
21
+ from mtppy.pea.application_logic.application_logic_pea import ApplicationLogicPEA
21
22
  from mtppy.utils.logging import CHOICES, logger, setLogLevel
22
23
 
23
24
  DEFAULT_HOST = "localhost"
@@ -27,7 +28,7 @@ DEFAULT_CYCLE_TIME = 0.5
27
28
  CONFIG_PATH = Path(__file__).with_name("m15_modbus.json")
28
29
 
29
30
 
30
- class M15Pea(UserLogicPEA):
31
+ class M15Pea(ApplicationLogicPEA):
31
32
  """PEA that exposes M15 registers as internal DataAssemblies."""
32
33
 
33
34
  def __init__(
@@ -41,19 +42,21 @@ class M15Pea(UserLogicPEA):
41
42
  ssd: str = "",
42
43
  code: str = "",
43
44
  ) -> None:
45
+ """Create the PEA, Modbus client, I/O service, and data-assembly wiring."""
44
46
  super().__init__(endpoint=endpoint, mtp=mtp, ssd=ssd, code=code)
45
47
  self.modbus_client = ModbusTcpClient(host, port=modbus_port)
46
48
 
47
49
  internal_data_assemblies, mappings, assignments = load_register_mappings(
48
- config_path, dict(self.data_assemblies)
50
+ config_path,
51
+ dict(self.data_assemblies),
49
52
  )
50
53
  if mtp:
51
54
  matching_data_assemblies = self._matching_requirement_data_assemblies(
52
- internal_data_assemblies
55
+ internal_data_assemblies,
53
56
  )
54
57
  for mapping in mappings:
55
58
  matching_data_assembly = matching_data_assemblies.get(
56
- mapping.data_assembly.tag_name
59
+ mapping.data_assembly.tag_name,
57
60
  )
58
61
  if matching_data_assembly is not None:
59
62
  mapping.data_assembly = matching_data_assembly
@@ -71,7 +74,8 @@ class M15Pea(UserLogicPEA):
71
74
  self._assign_data_assemblies(assignments, internal_data_assemblies)
72
75
 
73
76
  def _matching_requirement_data_assemblies(
74
- self, modbus_data_assemblies: dict[str, DataAssembly]
77
+ self,
78
+ modbus_data_assemblies: dict[str, DataAssembly],
75
79
  ) -> dict[str, DataAssembly]:
76
80
  """Validate and return rMTP assemblies matching Modbus configuration.
77
81
 
@@ -89,14 +93,15 @@ class M15Pea(UserLogicPEA):
89
93
  requirement_data_assembly = self.data_assemblies.get(tag_name)
90
94
  if requirement_data_assembly is None:
91
95
  logger.warning(
92
- f"Modbus DataAssembly {tag_name!r} is missing from requirements MTP"
96
+ f"Modbus DataAssembly {tag_name!r} is missing from "
97
+ "requirements MTP",
93
98
  )
94
99
  continue
95
100
  if type(requirement_data_assembly) is not type(modbus_data_assembly):
96
101
  logger.warning(
97
102
  f"Modbus DataAssembly {tag_name!r} has class "
98
103
  f"{type(modbus_data_assembly).__name__}, but requirements MTP "
99
- f"defines {type(requirement_data_assembly).__name__}"
104
+ f"defines {type(requirement_data_assembly).__name__}",
100
105
  )
101
106
  continue
102
107
  matching_data_assemblies[tag_name] = requirement_data_assembly
@@ -117,19 +122,19 @@ class M15Pea(UserLogicPEA):
117
122
  procedure = self._find_procedure(procedure_name)
118
123
  if procedure is None:
119
124
  logger.critical(
120
- f"procedure {procedure_name!r} not found for assignment"
125
+ f"procedure {procedure_name!r} not found for assignment",
121
126
  )
122
127
  continue
123
128
  for tag_name in tag_names:
124
129
  if tag_name not in data_assemblies:
125
130
  logger.critical(
126
131
  f"DataAssembly {tag_name!r} not found for assignment "
127
- f"to procedure {procedure_name!r}"
132
+ f"to procedure {procedure_name!r}",
128
133
  )
129
134
  continue
130
135
  procedure.add_required_equipment(data_assemblies[tag_name])
131
136
 
132
- def _find_procedure(self, name: str):
137
+ def _find_procedure(self, name: str) -> Procedure | None:
133
138
  """Find a procedure by name among all registered services.
134
139
 
135
140
  Args:
@@ -147,7 +152,8 @@ class M15Pea(UserLogicPEA):
147
152
  def start(self) -> None:
148
153
  """Start the OPC UA server and the cyclic Modbus I/O service."""
149
154
  if not self.modbus_client.connect():
150
- raise ConnectionError("unable to connect to the M15 Modbus server")
155
+ msg = "unable to connect to the M15 Modbus server"
156
+ raise ConnectionError(msg)
151
157
  super().start()
152
158
  self.io_service.activate_and_run()
153
159
 
@@ -175,7 +181,7 @@ def parse_args(args: list[str] | None = None) -> argparse.Namespace:
175
181
  "--user-logic",
176
182
  dest="user_logic",
177
183
  default="",
178
- help="Python module containing the user logic",
184
+ help="Python module containing the application logic",
179
185
  )
180
186
  parser.add_argument(
181
187
  "-m",