From 48b237ccb40726c3ad1df7c786bd20041da75b71 Mon Sep 17 00:00:00 2001 From: aarizona Date: Sat, 10 Aug 2024 20:32:20 +0300 Subject: [PATCH] square --- .vscode/PythonImportHelper-v2-Completion.json | 4 +- client.py | 91 +++++++++++++------ 2 files changed, 63 insertions(+), 32 deletions(-) diff --git a/.vscode/PythonImportHelper-v2-Completion.json b/.vscode/PythonImportHelper-v2-Completion.json index 89f4c49..480304c 100644 --- a/.vscode/PythonImportHelper-v2-Completion.json +++ b/.vscode/PythonImportHelper-v2-Completion.json @@ -139,7 +139,7 @@ "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(2)\n# get_coordinates()", + "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()", "detail": "client", "documentation": {} }, @@ -202,7 +202,7 @@ "kind": 5, "importPath": "client", "description": "client", - "peekOfCode": "client = ModbusTcpClient(\n host=MODBUS_SERVER_HOST,\n port=MODBUS_SERVER_PORT,\n)\nclient.connect()\n# максимальное количество coils = 286\n# bulb(2)\n# get_coordinates()\n# get_or_set_speed(10)\ntry:", + "peekOfCode": "client = ModbusTcpClient(\n host=MODBUS_SERVER_HOST,\n port=MODBUS_SERVER_PORT,\n)\nclient.connect()\n# максимальное количество coils = 286\n# bulb(0)\n# get_coordinates()\n# get_or_set_speed(10)\ntry:", "detail": "client", "documentation": {} }, diff --git a/client.py b/client.py index 5ed1847..b77fc6e 100644 --- a/client.py +++ b/client.py @@ -95,49 +95,78 @@ client = ModbusTcpClient( client.connect() # максимальное количество coils = 286 -# bulb(2) +# bulb(0) # get_coordinates() # get_or_set_speed(10) try: + data = [ + (0, to_double(0)), + (1, to_double(0)), + (2, to_double(0)), + (3, [0, 0]), + (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) - + 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 - - if green_light == False: - continue - + state = green_light - counter += 1 + + 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}" - ) - if counter == 1: - x -= 100 * 1000 - elif counter == 2: - y -= 100 * 1000 - elif counter == 3: - x += 100 * 1000 - elif counter == 4: - y += 100 * 1000 + # 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 else: - counter = 0 - + counter += 1 + step = 0 + state = None + data = [ (0, to_double(x)), (1, to_double(y)), @@ -149,12 +178,14 @@ try: 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) + result = client.read_holding_registers( + indent + s + k * d, k, MODBUS_SLAVE_ID + ) print(s + d, "===", two_byte_convert(result) * 0.001) - - client.write_coil(0, !green_light, MODBUS_SLAVE_ID) - + bulb(0) + + except Exception as e: print("error", e)