diff --git a/.vscode/PythonImportHelper-v2-Completion.json b/.vscode/PythonImportHelper-v2-Completion.json index 480304c..47e497a 100644 --- a/.vscode/PythonImportHelper-v2-Completion.json +++ b/.vscode/PythonImportHelper-v2-Completion.json @@ -89,6 +89,14 @@ "detail": "client", "documentation": {} }, + { + "label": "svg2paths2", + "importPath": "svgpathtools", + "description": "svgpathtools", + "isExtraImport": true, + "detail": "svgpathtools", + "documentation": {} + }, { "label": "two_byte_convert", "kind": 2, @@ -116,6 +124,15 @@ "detail": "client", "documentation": {} }, + { + "label": "collect_coordinates", + "kind": 2, + "importPath": "client", + "description": "client", + "peekOfCode": "def collect_coordinates():\n # собираем предварительные данные\n x = two_byte_convert(client.read_holding_registers(2332, 2, MODBUS_SLAVE_ID))\n y = two_byte_convert(client.read_holding_registers(2334, 2, MODBUS_SLAVE_ID))\n z = two_byte_convert(client.read_holding_registers(2336, 2, MODBUS_SLAVE_ID))\n u = two_byte_convert(client.read_holding_registers(2338, 2, MODBUS_SLAVE_ID))\n v = two_byte_convert(client.read_holding_registers(2340, 2, MODBUS_SLAVE_ID))\n w = two_byte_convert(client.read_holding_registers(2342, 2, MODBUS_SLAVE_ID))\n print(\n f\"Предварительные данные X {x * 0.001}, Y {y * 0.001}, Z {z*0.001}, U {u*0.001}, V {v*0.001}, W {w*0.001}\"", + "detail": "client", + "documentation": {} + }, { "label": "get_or_set_speed", "kind": 2, @@ -130,7 +147,7 @@ "kind": 2, "importPath": "client", "description": "client", - "peekOfCode": "def set_user_register(n, values):\n client.write_registers(indent + s + k * n, values, MODBUS_SLAVE_ID)\ndef to_double(integr):\n return [(integr >> 16) & 0xFFFF, integr & 0xFFFF]\nclient = ModbusTcpClient(\n host=MODBUS_SERVER_HOST,\n port=MODBUS_SERVER_PORT,\n)\nclient.connect()\n# максимальное количество coils = 286", + "peekOfCode": "def set_user_register(n, values):\n client.write_registers(indent + s + k * n, values, MODBUS_SLAVE_ID)\ndef to_double(integr):\n return [(integr >> 16) & 0xFFFF, integr & 0xFFFF]\ndef set_user_reg_800(data):\n for item in data:\n d, values = item\n set_user_register(d, values)\ndef start_in_auto():\n # старт в авторежиме single loop", "detail": "client", "documentation": {} }, @@ -139,7 +156,25 @@ "kind": 2, "importPath": "client", "description": "client", - "peekOfCode": "def to_double(integr):\n return [(integr >> 16) & 0xFFFF, integr & 0xFFFF]\nclient = ModbusTcpClient(\n host=MODBUS_SERVER_HOST,\n port=MODBUS_SERVER_PORT,\n)\nclient.connect()\n# максимальное количество coils = 286\n# bulb(0)\n# get_coordinates()", + "peekOfCode": "def to_double(integr):\n return [(integr >> 16) & 0xFFFF, integr & 0xFFFF]\ndef set_user_reg_800(data):\n for item in data:\n d, values = item\n set_user_register(d, values)\ndef start_in_auto():\n # старт в авторежиме single loop\n client.write_register(20002, 1, MODBUS_SLAVE_ID)\nclient = ModbusTcpClient(", + "detail": "client", + "documentation": {} + }, + { + "label": "set_user_reg_800", + "kind": 2, + "importPath": "client", + "description": "client", + "peekOfCode": "def set_user_reg_800(data):\n for item in data:\n d, values = item\n set_user_register(d, values)\ndef start_in_auto():\n # старт в авторежиме single loop\n client.write_register(20002, 1, MODBUS_SLAVE_ID)\nclient = ModbusTcpClient(\n host=MODBUS_SERVER_HOST,\n port=MODBUS_SERVER_PORT,", + "detail": "client", + "documentation": {} + }, + { + "label": "start_in_auto", + "kind": 2, + "importPath": "client", + "description": "client", + "peekOfCode": "def start_in_auto():\n # старт в авторежиме single loop\n client.write_register(20002, 1, MODBUS_SLAVE_ID)\nclient = ModbusTcpClient(\n host=MODBUS_SERVER_HOST,\n port=MODBUS_SERVER_PORT,\n)\nclient.connect()\n# максимальное количество coils = 286\n# bulb(0)", "detail": "client", "documentation": {} }, diff --git a/client.py b/client.py index b77fc6e..4d21b37 100644 --- a/client.py +++ b/client.py @@ -71,6 +71,20 @@ def get_coordinates(): raise e +def collect_coordinates(): + # собираем предварительные данные + x = two_byte_convert(client.read_holding_registers(2332, 2, MODBUS_SLAVE_ID)) + y = two_byte_convert(client.read_holding_registers(2334, 2, MODBUS_SLAVE_ID)) + z = two_byte_convert(client.read_holding_registers(2336, 2, MODBUS_SLAVE_ID)) + u = two_byte_convert(client.read_holding_registers(2338, 2, MODBUS_SLAVE_ID)) + v = two_byte_convert(client.read_holding_registers(2340, 2, MODBUS_SLAVE_ID)) + w = two_byte_convert(client.read_holding_registers(2342, 2, MODBUS_SLAVE_ID)) + print( + f"Предварительные данные X {x * 0.001}, Y {y * 0.001}, Z {z*0.001}, U {u*0.001}, V {v*0.001}, W {w*0.001}" + ) + return [x, y, z, u, v, w] + + def get_or_set_speed(number=None): result = client.read_holding_registers(20200, 1, MODBUS_SLAVE_ID) print("сейчас скорость", result.registers[0] * 0.1) @@ -88,6 +102,17 @@ def to_double(integr): return [(integr >> 16) & 0xFFFF, integr & 0xFFFF] +def set_user_reg_800(data): + for item in data: + d, values = item + set_user_register(d, values) + + +def start_in_auto(): + # старт в авторежиме single loop + client.write_register(20002, 1, MODBUS_SLAVE_ID) + + client = ModbusTcpClient( host=MODBUS_SERVER_HOST, port=MODBUS_SERVER_PORT, @@ -99,7 +124,22 @@ client.connect() # get_coordinates() # get_or_set_speed(10) try: - data = [ + total = 0 + state = None + step = 0 + counter = 0 + type = "rel" + paths = [ + ("line", 100, 100, 0), + ("line", 100, -100, 0), + ("line", -100, -100, 0), + ("line", -100, 100, 0), + ("line", 0, -50, 0), + ] + + # ставим пользовательские переменные в ноль + set_user_reg_800( + [ (0, to_double(0)), (1, to_double(0)), (2, to_double(0)), @@ -107,83 +147,56 @@ try: (4, [0, 0]), (5, [0, 0]), ] - for item in data: - d, values = item - set_user_register(d, values) - # старт в авторежиме single loop - client.write_register(20002, 1, MODBUS_SLAVE_ID) + ) + + # старт в авторежиме single loop + start_in_auto() - total = 0 - state = None - step = 0 - counter = 0 while True: time.sleep(1) total += 1 green_light = client.read_coils(0, 1, MODBUS_SLAVE_ID).bits[0] print(f"total {total}, state {state}, green light {green_light}") - + if state == green_light: continue state = green_light - + if state == True: continue - step += 1 - # собираем предварительные данные - # x = two_byte_convert(client.read_holding_registers(2332, 2, MODBUS_SLAVE_ID)) - # y = two_byte_convert(client.read_holding_registers(2334, 2, MODBUS_SLAVE_ID)) - # z = two_byte_convert(client.read_holding_registers(2336, 2, MODBUS_SLAVE_ID)) - # u = two_byte_convert(client.read_holding_registers(2338, 2, MODBUS_SLAVE_ID)) - # v = two_byte_convert(client.read_holding_registers(2340, 2, MODBUS_SLAVE_ID)) - # w = two_byte_convert(client.read_holding_registers(2342, 2, MODBUS_SLAVE_ID)) - # print( - # f"Предварительные данные X {x * 0.001}, Y {y * 0.001}, Z {z*0.001}, U {u*0.001}, V {v*0.001}, W {w*0.001}" - # ) - - # работаем с REL относительными координатами - x = 0 - y = 0 - z = 0 - - w = 100 - h = 100 - if step == 1: - x -= w * 1000 - elif step == 2: - y -= h * 1000 - elif step == 3: - x += w * 1000 - elif step == 4: - y += h * 1000 - elif step == 5: - z += h * 1000 - elif step == 6: - z -= h * 1000 + if type == "rel": + # работаем с REL относительными координатами + x = 0 + y = 0 + z = 0 else: + # работаем с абсолютными координатами + x, y, z, u, v, w = collect_coordinates() + + if step >= len(paths): counter += 1 step = 0 - state = None + + current_step = paths[step] + line_type, *coord = current_step - data = [ - (0, to_double(x)), - (1, to_double(y)), - (2, to_double(z)), - (3, [0, 0]), - (4, [0, 0]), - (5, [0, 0]), - ] - for item in data: - d, values = item - set_user_register(d, values) - result = client.read_holding_registers( - indent + s + k * d, k, MODBUS_SLAVE_ID + if line_type == "line": + x, y, z = coord + set_user_reg_800( + [ + (0, to_double(x)), + (1, to_double(y)), + (2, to_double(z)), + ] ) - print(s + d, "===", two_byte_convert(result) * 0.001) - + bulb(4) + + bulb(0) + step += 1 + except Exception as e: diff --git a/poetry.lock b/poetry.lock index 086b093..756dde8 100644 --- a/poetry.lock +++ b/poetry.lock @@ -221,6 +221,48 @@ files = [ [package.extras] cp2110 = ["hidapi"] +[[package]] +name = "scipy" +version = "1.14.0" +description = "Fundamental algorithms for scientific computing in Python" +optional = false +python-versions = ">=3.10" +files = [ + {file = "scipy-1.14.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:7e911933d54ead4d557c02402710c2396529540b81dd554fc1ba270eb7308484"}, + {file = "scipy-1.14.0-cp310-cp310-macosx_12_0_arm64.whl", hash = "sha256:687af0a35462402dd851726295c1a5ae5f987bd6e9026f52e9505994e2f84ef6"}, + {file = "scipy-1.14.0-cp310-cp310-macosx_14_0_arm64.whl", hash = "sha256:07e179dc0205a50721022344fb85074f772eadbda1e1b3eecdc483f8033709b7"}, + {file = "scipy-1.14.0-cp310-cp310-macosx_14_0_x86_64.whl", hash = "sha256:6a9c9a9b226d9a21e0a208bdb024c3982932e43811b62d202aaf1bb59af264b1"}, + {file = "scipy-1.14.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:076c27284c768b84a45dcf2e914d4000aac537da74236a0d45d82c6fa4b7b3c0"}, + {file = "scipy-1.14.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:42470ea0195336df319741e230626b6225a740fd9dce9642ca13e98f667047c0"}, + {file = "scipy-1.14.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:176c6f0d0470a32f1b2efaf40c3d37a24876cebf447498a4cefb947a79c21e9d"}, + {file = "scipy-1.14.0-cp310-cp310-win_amd64.whl", hash = "sha256:ad36af9626d27a4326c8e884917b7ec321d8a1841cd6dacc67d2a9e90c2f0359"}, + {file = "scipy-1.14.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:6d056a8709ccda6cf36cdd2eac597d13bc03dba38360f418560a93050c76a16e"}, + {file = "scipy-1.14.0-cp311-cp311-macosx_12_0_arm64.whl", hash = "sha256:f0a50da861a7ec4573b7c716b2ebdcdf142b66b756a0d392c236ae568b3a93fb"}, + {file = "scipy-1.14.0-cp311-cp311-macosx_14_0_arm64.whl", hash = "sha256:94c164a9e2498e68308e6e148646e486d979f7fcdb8b4cf34b5441894bdb9caf"}, + {file = "scipy-1.14.0-cp311-cp311-macosx_14_0_x86_64.whl", hash = "sha256:a7d46c3e0aea5c064e734c3eac5cf9eb1f8c4ceee756262f2c7327c4c2691c86"}, + {file = "scipy-1.14.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9eee2989868e274aae26125345584254d97c56194c072ed96cb433f32f692ed8"}, + {file = "scipy-1.14.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9e3154691b9f7ed73778d746da2df67a19d046a6c8087c8b385bc4cdb2cfca74"}, + {file = "scipy-1.14.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:c40003d880f39c11c1edbae8144e3813904b10514cd3d3d00c277ae996488cdb"}, + {file = "scipy-1.14.0-cp311-cp311-win_amd64.whl", hash = "sha256:5b083c8940028bb7e0b4172acafda6df762da1927b9091f9611b0bcd8676f2bc"}, + {file = "scipy-1.14.0-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:bff2438ea1330e06e53c424893ec0072640dac00f29c6a43a575cbae4c99b2b9"}, + {file = "scipy-1.14.0-cp312-cp312-macosx_12_0_arm64.whl", hash = "sha256:bbc0471b5f22c11c389075d091d3885693fd3f5e9a54ce051b46308bc787e5d4"}, + {file = "scipy-1.14.0-cp312-cp312-macosx_14_0_arm64.whl", hash = "sha256:64b2ff514a98cf2bb734a9f90d32dc89dc6ad4a4a36a312cd0d6327170339eb0"}, + {file = "scipy-1.14.0-cp312-cp312-macosx_14_0_x86_64.whl", hash = "sha256:7d3da42fbbbb860211a811782504f38ae7aaec9de8764a9bef6b262de7a2b50f"}, + {file = "scipy-1.14.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d91db2c41dd6c20646af280355d41dfa1ec7eead235642178bd57635a3f82209"}, + {file = "scipy-1.14.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a01cc03bcdc777c9da3cfdcc74b5a75caffb48a6c39c8450a9a05f82c4250a14"}, + {file = "scipy-1.14.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:65df4da3c12a2bb9ad52b86b4dcf46813e869afb006e58be0f516bc370165159"}, + {file = "scipy-1.14.0-cp312-cp312-win_amd64.whl", hash = "sha256:4c4161597c75043f7154238ef419c29a64ac4a7c889d588ea77690ac4d0d9b20"}, + {file = "scipy-1.14.0.tar.gz", hash = "sha256:b5923f48cb840380f9854339176ef21763118a7300a88203ccd0bdd26e58527b"}, +] + +[package.dependencies] +numpy = ">=1.23.5,<2.3" + +[package.extras] +dev = ["cython-lint (>=0.12.2)", "doit (>=0.36.0)", "mypy (==1.10.0)", "pycodestyle", "pydevtool", "rich-click", "ruff (>=0.0.292)", "types-psutil", "typing_extensions"] +doc = ["jupyterlite-pyodide-kernel", "jupyterlite-sphinx (>=0.13.1)", "jupytext", "matplotlib (>=3.5)", "myst-nb", "numpydoc", "pooch", "pydata-sphinx-theme (>=0.15.2)", "sphinx (>=5.0.0)", "sphinx-design (>=0.4.0)"] +test = ["Cython", "array-api-strict", "asv", "gmpy2", "hypothesis (>=6.30)", "meson", "mpmath", "ninja", "pooch", "pytest", "pytest-cov", "pytest-timeout", "pytest-xdist", "scikit-umfpack", "threadpoolctl"] + [[package]] name = "setuptools" version = "72.1.0" @@ -248,6 +290,33 @@ files = [ {file = "six-1.16.0.tar.gz", hash = "sha256:1e61c37477a1626458e36f7b1d82aa5c9b094fa4802892072e49de9c60c4c926"}, ] +[[package]] +name = "svgpathtools" +version = "1.6.1" +description = "A collection of tools for manipulating and analyzing SVG Path objects and Bezier curves." +optional = false +python-versions = "*" +files = [ + {file = "svgpathtools-1.6.1-py2.py3-none-any.whl", hash = "sha256:39967f9a817b8a12cc6dd1646fc162d522fca6c3fd5f8c94913c15ee4cb3a906"}, + {file = "svgpathtools-1.6.1.tar.gz", hash = "sha256:7054e6de1953e295bf565d535d585695453b09f8db4a2f7c4853348732097a3e"}, +] + +[package.dependencies] +numpy = "*" +scipy = "*" +svgwrite = "*" + +[[package]] +name = "svgwrite" +version = "1.4.3" +description = "A Python library to create SVG drawings." +optional = false +python-versions = ">=3.6" +files = [ + {file = "svgwrite-1.4.3-py3-none-any.whl", hash = "sha256:bb6b2b5450f1edbfa597d924f9ac2dd099e625562e492021d7dd614f65f8a22d"}, + {file = "svgwrite-1.4.3.zip", hash = "sha256:a8fbdfd4443302a6619a7f76bc937fc683daf2628d9b737c891ec08b8ce524c3"}, +] + [[package]] name = "tomli" version = "2.0.1" @@ -388,4 +457,4 @@ testing = ["coverage (>=5.0.3)", "zope.event", "zope.testing"] [metadata] lock-version = "2.0" python-versions = "3.10.12" -content-hash = "fb99dcafd58fb92524e36eaac634c3dde9966e9cb14bfba758076e057ae0fb5a" +content-hash = "c7d6bddfce25fa53e5a29e91975eacc36d85962e2d132e0f892a2fdfb956bbef" diff --git a/pyproject.toml b/pyproject.toml index 3690771..a6aca3f 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -11,6 +11,7 @@ modbus = "^3.2" pymodbustcp = "^0.2.2" pymodbus = "^3.7.0" pymodbus3 = "^1.0.0" +svgpathtools = "^1.6.1" [build-system] diff --git a/svg_convert.py b/svg_convert.py new file mode 100644 index 0000000..61044ba --- /dev/null +++ b/svg_convert.py @@ -0,0 +1,5 @@ +from svgpathtools import svg2paths2 +paths, attributes, svg_attributes = svg2paths2('test.svg') + +print(paths) +print(attributes) \ No newline at end of file diff --git a/test.svg b/test.svg new file mode 100644 index 0000000..f81d15e --- /dev/null +++ b/test.svg @@ -0,0 +1,5 @@ + + + + \ No newline at end of file