Compare commits
5 Commits
7f1e794f48
...
main
Author | SHA1 | Date | |
---|---|---|---|
569e9bdf43 | |||
e0135cad21 | |||
42cd10c799 | |||
78fd7ccbc9 | |||
edeeb04a62 |
@ -234,6 +234,126 @@
|
|||||||
"name": "r_safe_region03",
|
"name": "r_safe_region03",
|
||||||
"retain": false,
|
"retain": false,
|
||||||
"type": "bool"
|
"type": "bool"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"addr": 40100,
|
||||||
|
"addr_1st": 0,
|
||||||
|
"addr_2nd": 0,
|
||||||
|
"bit_bias": 0,
|
||||||
|
"byte_bias": 0,
|
||||||
|
"function": "",
|
||||||
|
"len": 1,
|
||||||
|
"name": "signal_0",
|
||||||
|
"retain": false,
|
||||||
|
"type": "bool"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"addr": 40101,
|
||||||
|
"addr_1st": 0,
|
||||||
|
"addr_2nd": 0,
|
||||||
|
"bit_bias": 0,
|
||||||
|
"byte_bias": 0,
|
||||||
|
"function": "",
|
||||||
|
"len": 1,
|
||||||
|
"name": "signal_1",
|
||||||
|
"retain": false,
|
||||||
|
"type": "bool"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"addr": 40102,
|
||||||
|
"addr_1st": 0,
|
||||||
|
"addr_2nd": 0,
|
||||||
|
"bit_bias": 0,
|
||||||
|
"byte_bias": 0,
|
||||||
|
"function": "",
|
||||||
|
"len": 1,
|
||||||
|
"name": "signal_2",
|
||||||
|
"retain": false,
|
||||||
|
"type": "bool"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"addr": 40103,
|
||||||
|
"addr_1st": 0,
|
||||||
|
"addr_2nd": 0,
|
||||||
|
"bit_bias": 0,
|
||||||
|
"byte_bias": 0,
|
||||||
|
"function": "",
|
||||||
|
"len": 1,
|
||||||
|
"name": "signal_3",
|
||||||
|
"retain": false,
|
||||||
|
"type": "bool"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"addr": 40104,
|
||||||
|
"addr_1st": 0,
|
||||||
|
"addr_2nd": 0,
|
||||||
|
"bit_bias": 0,
|
||||||
|
"byte_bias": 0,
|
||||||
|
"function": "",
|
||||||
|
"len": 1,
|
||||||
|
"name": "signal_4",
|
||||||
|
"retain": false,
|
||||||
|
"type": "bool"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"addr": 40105,
|
||||||
|
"addr_1st": 0,
|
||||||
|
"addr_2nd": 0,
|
||||||
|
"bit_bias": 0,
|
||||||
|
"byte_bias": 0,
|
||||||
|
"function": "",
|
||||||
|
"len": 1,
|
||||||
|
"name": "signal_5",
|
||||||
|
"retain": false,
|
||||||
|
"type": "bool"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"addr": 40106,
|
||||||
|
"addr_1st": 0,
|
||||||
|
"addr_2nd": 0,
|
||||||
|
"bit_bias": 0,
|
||||||
|
"byte_bias": 0,
|
||||||
|
"function": "",
|
||||||
|
"len": 1,
|
||||||
|
"name": "signal_6",
|
||||||
|
"retain": false,
|
||||||
|
"type": "bool"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"addr": 40107,
|
||||||
|
"addr_1st": 0,
|
||||||
|
"addr_2nd": 0,
|
||||||
|
"bit_bias": 0,
|
||||||
|
"byte_bias": 0,
|
||||||
|
"function": "",
|
||||||
|
"len": 1,
|
||||||
|
"name": "signal_7",
|
||||||
|
"retain": false,
|
||||||
|
"type": "bool"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"addr": 40108,
|
||||||
|
"addr_1st": 0,
|
||||||
|
"addr_2nd": 0,
|
||||||
|
"bit_bias": 0,
|
||||||
|
"byte_bias": 0,
|
||||||
|
"function": "",
|
||||||
|
"len": 1,
|
||||||
|
"name": "signal_8",
|
||||||
|
"retain": false,
|
||||||
|
"type": "bool"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"addr": 40109,
|
||||||
|
"addr_1st": 0,
|
||||||
|
"addr_2nd": 0,
|
||||||
|
"bit_bias": 0,
|
||||||
|
"byte_bias": 0,
|
||||||
|
"function": "",
|
||||||
|
"len": 1,
|
||||||
|
"name": "signal_9",
|
||||||
|
"retain": false,
|
||||||
|
"type": "bool"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"rdwr": [
|
"rdwr": [
|
||||||
|
@ -361,6 +361,196 @@
|
|||||||
<c name="value"/>
|
<c name="value"/>
|
||||||
<c name="value_single" type="10" value=""/>
|
<c name="value_single" type="10" value=""/>
|
||||||
</l>
|
</l>
|
||||||
|
<l>
|
||||||
|
<c name="addr" type="2" value="40100"/>
|
||||||
|
<c name="addr_1st" type="2" value="0"/>
|
||||||
|
<c name="addr_2nd" type="2" value="0"/>
|
||||||
|
<c name="bit_bias" type="2" value="0"/>
|
||||||
|
<c name="byte_bias" type="4" value="0"/>
|
||||||
|
<c name="description" type="10" value=""/>
|
||||||
|
<c name="dev_name" type="10" value="autotest"/>
|
||||||
|
<c name="dev_type" type="10" value="MODBUS"/>
|
||||||
|
<c name="end_addr" type="2" value="40100"/>
|
||||||
|
<c name="function" type="10" value=""/>
|
||||||
|
<c name="len" type="2" value="1"/>
|
||||||
|
<c name="name" type="10" value="signal_0"/>
|
||||||
|
<c name="retain" type="1" value="false"/>
|
||||||
|
<c name="rw" type="10" value="rd"/>
|
||||||
|
<c name="type" type="10" value="bool"/>
|
||||||
|
<c name="value"/>
|
||||||
|
<c name="value_single" type="10" value=""/>
|
||||||
|
</l>
|
||||||
|
<l>
|
||||||
|
<c name="addr" type="2" value="40101"/>
|
||||||
|
<c name="addr_1st" type="2" value="0"/>
|
||||||
|
<c name="addr_2nd" type="2" value="0"/>
|
||||||
|
<c name="bit_bias" type="2" value="0"/>
|
||||||
|
<c name="byte_bias" type="4" value="0"/>
|
||||||
|
<c name="description" type="10" value=""/>
|
||||||
|
<c name="dev_name" type="10" value="autotest"/>
|
||||||
|
<c name="dev_type" type="10" value="MODBUS"/>
|
||||||
|
<c name="end_addr" type="2" value="40101"/>
|
||||||
|
<c name="function" type="10" value=""/>
|
||||||
|
<c name="len" type="2" value="1"/>
|
||||||
|
<c name="name" type="10" value="signal_1"/>
|
||||||
|
<c name="retain" type="1" value="false"/>
|
||||||
|
<c name="rw" type="10" value="rd"/>
|
||||||
|
<c name="type" type="10" value="bool"/>
|
||||||
|
<c name="value"/>
|
||||||
|
<c name="value_single" type="10" value=""/>
|
||||||
|
</l>
|
||||||
|
<l>
|
||||||
|
<c name="addr" type="2" value="40102"/>
|
||||||
|
<c name="addr_1st" type="2" value="0"/>
|
||||||
|
<c name="addr_2nd" type="2" value="0"/>
|
||||||
|
<c name="bit_bias" type="2" value="0"/>
|
||||||
|
<c name="byte_bias" type="4" value="0"/>
|
||||||
|
<c name="description" type="10" value=""/>
|
||||||
|
<c name="dev_name" type="10" value="autotest"/>
|
||||||
|
<c name="dev_type" type="10" value="MODBUS"/>
|
||||||
|
<c name="end_addr" type="2" value="40102"/>
|
||||||
|
<c name="function" type="10" value=""/>
|
||||||
|
<c name="len" type="2" value="1"/>
|
||||||
|
<c name="name" type="10" value="signal_2"/>
|
||||||
|
<c name="retain" type="1" value="false"/>
|
||||||
|
<c name="rw" type="10" value="rd"/>
|
||||||
|
<c name="type" type="10" value="bool"/>
|
||||||
|
<c name="value"/>
|
||||||
|
<c name="value_single" type="10" value=""/>
|
||||||
|
</l>
|
||||||
|
<l>
|
||||||
|
<c name="addr" type="2" value="40103"/>
|
||||||
|
<c name="addr_1st" type="2" value="0"/>
|
||||||
|
<c name="addr_2nd" type="2" value="0"/>
|
||||||
|
<c name="bit_bias" type="2" value="0"/>
|
||||||
|
<c name="byte_bias" type="4" value="0"/>
|
||||||
|
<c name="description" type="10" value=""/>
|
||||||
|
<c name="dev_name" type="10" value="autotest"/>
|
||||||
|
<c name="dev_type" type="10" value="MODBUS"/>
|
||||||
|
<c name="end_addr" type="2" value="40103"/>
|
||||||
|
<c name="function" type="10" value=""/>
|
||||||
|
<c name="len" type="2" value="1"/>
|
||||||
|
<c name="name" type="10" value="signal_3"/>
|
||||||
|
<c name="retain" type="1" value="false"/>
|
||||||
|
<c name="rw" type="10" value="rd"/>
|
||||||
|
<c name="type" type="10" value="bool"/>
|
||||||
|
<c name="value"/>
|
||||||
|
<c name="value_single" type="10" value=""/>
|
||||||
|
</l>
|
||||||
|
<l>
|
||||||
|
<c name="addr" type="2" value="40104"/>
|
||||||
|
<c name="addr_1st" type="2" value="0"/>
|
||||||
|
<c name="addr_2nd" type="2" value="0"/>
|
||||||
|
<c name="bit_bias" type="2" value="0"/>
|
||||||
|
<c name="byte_bias" type="4" value="0"/>
|
||||||
|
<c name="description" type="10" value=""/>
|
||||||
|
<c name="dev_name" type="10" value="autotest"/>
|
||||||
|
<c name="dev_type" type="10" value="MODBUS"/>
|
||||||
|
<c name="end_addr" type="2" value="40104"/>
|
||||||
|
<c name="function" type="10" value=""/>
|
||||||
|
<c name="len" type="2" value="1"/>
|
||||||
|
<c name="name" type="10" value="signal_4"/>
|
||||||
|
<c name="retain" type="1" value="false"/>
|
||||||
|
<c name="rw" type="10" value="rd"/>
|
||||||
|
<c name="type" type="10" value="bool"/>
|
||||||
|
<c name="value"/>
|
||||||
|
<c name="value_single" type="10" value=""/>
|
||||||
|
</l>
|
||||||
|
<l>
|
||||||
|
<c name="addr" type="2" value="40105"/>
|
||||||
|
<c name="addr_1st" type="2" value="0"/>
|
||||||
|
<c name="addr_2nd" type="2" value="0"/>
|
||||||
|
<c name="bit_bias" type="2" value="0"/>
|
||||||
|
<c name="byte_bias" type="4" value="0"/>
|
||||||
|
<c name="description" type="10" value=""/>
|
||||||
|
<c name="dev_name" type="10" value="autotest"/>
|
||||||
|
<c name="dev_type" type="10" value="MODBUS"/>
|
||||||
|
<c name="end_addr" type="2" value="40105"/>
|
||||||
|
<c name="function" type="10" value=""/>
|
||||||
|
<c name="len" type="2" value="1"/>
|
||||||
|
<c name="name" type="10" value="signal_5"/>
|
||||||
|
<c name="retain" type="1" value="false"/>
|
||||||
|
<c name="rw" type="10" value="rd"/>
|
||||||
|
<c name="type" type="10" value="bool"/>
|
||||||
|
<c name="value"/>
|
||||||
|
<c name="value_single" type="10" value=""/>
|
||||||
|
</l>
|
||||||
|
<l>
|
||||||
|
<c name="addr" type="2" value="40106"/>
|
||||||
|
<c name="addr_1st" type="2" value="0"/>
|
||||||
|
<c name="addr_2nd" type="2" value="0"/>
|
||||||
|
<c name="bit_bias" type="2" value="0"/>
|
||||||
|
<c name="byte_bias" type="4" value="0"/>
|
||||||
|
<c name="description" type="10" value=""/>
|
||||||
|
<c name="dev_name" type="10" value="autotest"/>
|
||||||
|
<c name="dev_type" type="10" value="MODBUS"/>
|
||||||
|
<c name="end_addr" type="2" value="40106"/>
|
||||||
|
<c name="function" type="10" value=""/>
|
||||||
|
<c name="len" type="2" value="1"/>
|
||||||
|
<c name="name" type="10" value="signal_6"/>
|
||||||
|
<c name="retain" type="1" value="false"/>
|
||||||
|
<c name="rw" type="10" value="rd"/>
|
||||||
|
<c name="type" type="10" value="bool"/>
|
||||||
|
<c name="value"/>
|
||||||
|
<c name="value_single" type="10" value=""/>
|
||||||
|
</l>
|
||||||
|
<l>
|
||||||
|
<c name="addr" type="2" value="40107"/>
|
||||||
|
<c name="addr_1st" type="2" value="0"/>
|
||||||
|
<c name="addr_2nd" type="2" value="0"/>
|
||||||
|
<c name="bit_bias" type="2" value="0"/>
|
||||||
|
<c name="byte_bias" type="4" value="0"/>
|
||||||
|
<c name="description" type="10" value=""/>
|
||||||
|
<c name="dev_name" type="10" value="autotest"/>
|
||||||
|
<c name="dev_type" type="10" value="MODBUS"/>
|
||||||
|
<c name="end_addr" type="2" value="40107"/>
|
||||||
|
<c name="function" type="10" value=""/>
|
||||||
|
<c name="len" type="2" value="1"/>
|
||||||
|
<c name="name" type="10" value="signal_7"/>
|
||||||
|
<c name="retain" type="1" value="false"/>
|
||||||
|
<c name="rw" type="10" value="rd"/>
|
||||||
|
<c name="type" type="10" value="bool"/>
|
||||||
|
<c name="value"/>
|
||||||
|
<c name="value_single" type="10" value=""/>
|
||||||
|
</l>
|
||||||
|
<l>
|
||||||
|
<c name="addr" type="2" value="40108"/>
|
||||||
|
<c name="addr_1st" type="2" value="0"/>
|
||||||
|
<c name="addr_2nd" type="2" value="0"/>
|
||||||
|
<c name="bit_bias" type="2" value="0"/>
|
||||||
|
<c name="byte_bias" type="4" value="0"/>
|
||||||
|
<c name="description" type="10" value=""/>
|
||||||
|
<c name="dev_name" type="10" value="autotest"/>
|
||||||
|
<c name="dev_type" type="10" value="MODBUS"/>
|
||||||
|
<c name="end_addr" type="2" value="40108"/>
|
||||||
|
<c name="function" type="10" value=""/>
|
||||||
|
<c name="len" type="2" value="1"/>
|
||||||
|
<c name="name" type="10" value="signal_8"/>
|
||||||
|
<c name="retain" type="1" value="false"/>
|
||||||
|
<c name="rw" type="10" value="rd"/>
|
||||||
|
<c name="type" type="10" value="bool"/>
|
||||||
|
<c name="value"/>
|
||||||
|
<c name="value_single" type="10" value=""/>
|
||||||
|
</l>
|
||||||
|
<l>
|
||||||
|
<c name="addr" type="2" value="40109"/>
|
||||||
|
<c name="addr_1st" type="2" value="0"/>
|
||||||
|
<c name="addr_2nd" type="2" value="0"/>
|
||||||
|
<c name="bit_bias" type="2" value="0"/>
|
||||||
|
<c name="byte_bias" type="4" value="0"/>
|
||||||
|
<c name="description" type="10" value=""/>
|
||||||
|
<c name="dev_name" type="10" value="autotest"/>
|
||||||
|
<c name="dev_type" type="10" value="MODBUS"/>
|
||||||
|
<c name="end_addr" type="2" value="40109"/>
|
||||||
|
<c name="function" type="10" value=""/>
|
||||||
|
<c name="len" type="2" value="1"/>
|
||||||
|
<c name="name" type="10" value="signal_9"/>
|
||||||
|
<c name="retain" type="1" value="false"/>
|
||||||
|
<c name="rw" type="10" value="rd"/>
|
||||||
|
<c name="type" type="10" value="bool"/>
|
||||||
|
<c name="value"/>
|
||||||
|
<c name="value_single" type="10" value=""/>
|
||||||
|
</l>
|
||||||
<l>
|
<l>
|
||||||
<c name="addr" type="2" value="40500"/>
|
<c name="addr" type="2" value="40500"/>
|
||||||
<c name="addr_1st" type="2" value="0"/>
|
<c name="addr_1st" type="2" value="0"/>
|
||||||
|
3
assets/configs/requirements.txt
Normal file
3
assets/configs/requirements.txt
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
loguru==0.7.2
|
||||||
|
paramiko==3.5.0
|
||||||
|
pymodbus==3.7.2
|
Binary file not shown.
@ -16,6 +16,7 @@ password = "luoshi2019" # for real robot
|
|||||||
xService_port = 6666
|
xService_port = 6666
|
||||||
external_port = 8080
|
external_port = 8080
|
||||||
modbus_port = 502
|
modbus_port = 502
|
||||||
|
upgrade_port = 4567
|
||||||
interval = 0.5 # interval after actions being triggered, such as modbus/socket/external communication operations
|
interval = 0.5 # interval after actions being triggered, such as modbus/socket/external communication operations
|
||||||
heartbeat_interval = 2
|
heartbeat_interval = 2
|
||||||
RADIAN = 57.3 # 180 / 3.1415926
|
RADIAN = 57.3 # 180 / 3.1415926
|
||||||
|
201
code/common.py
201
code/common.py
@ -1,7 +1,13 @@
|
|||||||
|
import os.path
|
||||||
|
import socket
|
||||||
import time
|
import time
|
||||||
import openapi
|
import openapi
|
||||||
import json
|
import json
|
||||||
import clibs
|
import clibs
|
||||||
|
from socket import *
|
||||||
|
from ctypes import *
|
||||||
|
import hashlib
|
||||||
|
import struct
|
||||||
|
|
||||||
|
|
||||||
def initialization():
|
def initialization():
|
||||||
@ -28,7 +34,7 @@ def initialization():
|
|||||||
pd.push_file_to_server(config_file, f"{user_settings}/{filename}")
|
pd.push_file_to_server(config_file, f"{user_settings}/{filename}")
|
||||||
pd.push_file_to_server(config_file, f"{interactive_data}/{filename}")
|
pd.push_file_to_server(config_file, f"{interactive_data}/{filename}")
|
||||||
|
|
||||||
io_device_autotest = {'ai_num': 0, 'ao_num': 0, 'di_num': 16, 'do_num': 16, 'extend_attr': {'mode': 'slaver', 'name': 'autotest', 'type': 'MODBUS'}, 'id': 7, 'name': 'autotest', 'type': 6}
|
io_device_autotest = {"ai_num": 0, "ao_num": 0, "di_num": 16, "do_num": 16, "extend_attr": {"mode": "slaver", "name": "autotest", "type": "MODBUS"}, "id": 7, "name": "autotest", "type": 6}
|
||||||
io_device_file_local = f"..\\assets\\configs\\{io_device_file}"
|
io_device_file_local = f"..\\assets\\configs\\{io_device_file}"
|
||||||
io_device_file_local_tmp = f"..\\assets\\configs\\{io_device_file}_tmp"
|
io_device_file_local_tmp = f"..\\assets\\configs\\{io_device_file}_tmp"
|
||||||
io_device_file_remote = f"{user_settings}/{io_device_file}"
|
io_device_file_remote = f"{user_settings}/{io_device_file}"
|
||||||
@ -84,8 +90,9 @@ def initialization():
|
|||||||
ec.modify_system_time(time.strftime("%Y-%m-%d %H:%M:%S", time.localtime(time.time())))
|
ec.modify_system_time(time.strftime("%Y-%m-%d %H:%M:%S", time.localtime(time.time())))
|
||||||
|
|
||||||
# 关闭拖动
|
# 关闭拖动
|
||||||
clibs.logger.info("关闭拖动模式...")
|
if robot_type.upper()[:2] not in ["XB", "NB"]:
|
||||||
hr.set_drag_params(False, 1, 2)
|
clibs.logger.info("关闭拖动模式...")
|
||||||
|
hr.set_drag_params(False, 1, 2)
|
||||||
|
|
||||||
# 关闭碰撞检测
|
# 关闭碰撞检测
|
||||||
clibs.logger.info("关闭碰撞检测...")
|
clibs.logger.info("关闭碰撞检测...")
|
||||||
@ -114,4 +121,190 @@ def initialization():
|
|||||||
md.r_clear_alarm()
|
md.r_clear_alarm()
|
||||||
|
|
||||||
|
|
||||||
initialization()
|
def fw_updater(local_file_path):
|
||||||
|
fw_size = os.path.getsize(local_file_path)
|
||||||
|
if fw_size > 10000000:
|
||||||
|
# get previous version of xCore
|
||||||
|
hr = openapi.HmiRequest()
|
||||||
|
version_previous = hr.get_robot_params["version"]
|
||||||
|
hr.close()
|
||||||
|
|
||||||
|
# var def
|
||||||
|
remote_file_path = './upgrade/lircos.zip'
|
||||||
|
fw_content = bytearray()
|
||||||
|
package_data = bytearray()
|
||||||
|
package_data_with_head = bytearray()
|
||||||
|
|
||||||
|
# socket connect
|
||||||
|
clibs.logger.info(f"正在连接 {clibs.ip_addr}:{clibs.upgrade_port}...")
|
||||||
|
try:
|
||||||
|
tcp_socket = socket(AF_INET, SOCK_STREAM)
|
||||||
|
tcp_socket.connect((clibs.ip_addr, clibs.upgrade_port))
|
||||||
|
tcp_socket.setblocking(True)
|
||||||
|
except Exception as Err:
|
||||||
|
clibs.logger.error(f"{Err} | 连接 {clibs.ip_addr}:{clibs.upgrade_port} 失败...")
|
||||||
|
exit(1)
|
||||||
|
|
||||||
|
# get firmware content of binary format
|
||||||
|
clibs.logger.info(f"正在读取 {local_file_path} 文件内容...")
|
||||||
|
with open(local_file_path, 'rb') as f_fw:
|
||||||
|
fw_content += f_fw.read()
|
||||||
|
|
||||||
|
# construct package data: http://confluence.i.rokae.com/pages/viewpage.action?pageId=15634148
|
||||||
|
clibs.logger.info("正在构造数据包,以及包头...")
|
||||||
|
# 1 protocol id
|
||||||
|
protocol_id = c_ushort(htons(0)) # 2 bytes
|
||||||
|
package_data += protocol_id
|
||||||
|
|
||||||
|
# 2 write type
|
||||||
|
write_type = c_ubyte(0)
|
||||||
|
package_data += bytes(write_type)
|
||||||
|
|
||||||
|
# 3 md5
|
||||||
|
md5_hash = hashlib.md5()
|
||||||
|
md5_hash.update(fw_content)
|
||||||
|
fw_md5 = md5_hash.hexdigest()
|
||||||
|
i = 0
|
||||||
|
while i < len(fw_md5):
|
||||||
|
_ = (fw_md5[i:i + 2])
|
||||||
|
package_data += bytes.fromhex(_)
|
||||||
|
i += 2
|
||||||
|
|
||||||
|
# 4 remote path len
|
||||||
|
remote_file_path_len = c_ushort(htons(len(remote_file_path)))
|
||||||
|
package_data += remote_file_path_len
|
||||||
|
|
||||||
|
# 5 remote path
|
||||||
|
package_data += remote_file_path.encode("ascii")
|
||||||
|
|
||||||
|
# 6 file
|
||||||
|
package_data += fw_content
|
||||||
|
|
||||||
|
# construct communication protocol: http://confluence.i.rokae.com/pages/viewpage.action?pageId=15634045
|
||||||
|
# 1 get package data with header
|
||||||
|
package_size = c_uint(htonl(len(package_data)))
|
||||||
|
package_type = c_ubyte(1) # 0-无协议 1-文件 2-json
|
||||||
|
package_reserve = c_ubyte(0) # 预留位
|
||||||
|
|
||||||
|
package_data_with_head += package_size
|
||||||
|
package_data_with_head += package_type
|
||||||
|
package_data_with_head += package_reserve
|
||||||
|
package_data_with_head += package_data
|
||||||
|
|
||||||
|
# 2 send data to server
|
||||||
|
clibs.logger.info("正在发送数据到 xCore,升级控制器无需重启,升级配置文件会自动软重启...")
|
||||||
|
start = 0
|
||||||
|
len_of_package = len(package_data_with_head)
|
||||||
|
while start < len_of_package:
|
||||||
|
end = 10240 + start
|
||||||
|
if end > len_of_package:
|
||||||
|
end = len_of_package
|
||||||
|
sent = tcp_socket.send((package_data_with_head[start:end]))
|
||||||
|
time.sleep(0.01)
|
||||||
|
if sent == 0:
|
||||||
|
raise RuntimeError("socket connection broken")
|
||||||
|
else:
|
||||||
|
start += sent
|
||||||
|
|
||||||
|
waited = 5 if fw_size > 10000000 else 25
|
||||||
|
time.sleep(waited)
|
||||||
|
|
||||||
|
if fw_size > 10000000:
|
||||||
|
# get current version of xCore
|
||||||
|
hr = openapi.HmiRequest()
|
||||||
|
version_current = hr.get_robot_params["version"]
|
||||||
|
hr.close()
|
||||||
|
|
||||||
|
clibs.logger.info(f"控制器升级成功:from {version_previous} to {version_current} :)")
|
||||||
|
else:
|
||||||
|
clibs.logger.info(f"配置文件升级成功 :)")
|
||||||
|
|
||||||
|
tcp_socket.close()
|
||||||
|
|
||||||
|
|
||||||
|
class UpgradeJsonCmd(object):
|
||||||
|
def __init__(self):
|
||||||
|
self.__c = None
|
||||||
|
self.__sock_conn()
|
||||||
|
|
||||||
|
def __sock_conn(self):
|
||||||
|
# socket connect
|
||||||
|
clibs.logger.info(f"正在连接 {clibs.ip_addr}:{clibs.upgrade_port}...")
|
||||||
|
try:
|
||||||
|
self.__c = socket(AF_INET, SOCK_STREAM)
|
||||||
|
self.__c.connect((clibs.ip_addr, clibs.upgrade_port))
|
||||||
|
self.__c.setblocking(True)
|
||||||
|
self.__c.settimeout(3)
|
||||||
|
except Exception as Err:
|
||||||
|
clibs.logger.error(f"{Err} | 连接 {clibs.ip_addr}:{clibs.upgrade_port} 失败...")
|
||||||
|
exit(1)
|
||||||
|
|
||||||
|
@staticmethod
|
||||||
|
def __do_package(cmd):
|
||||||
|
package_size = struct.pack('!I', len(cmd))
|
||||||
|
package_type = struct.pack('B', 2)
|
||||||
|
reserved_byte = struct.pack('B', 0)
|
||||||
|
return package_size + package_type + reserved_byte + cmd
|
||||||
|
|
||||||
|
def __recv_result(self, cmd):
|
||||||
|
time.sleep(2)
|
||||||
|
try:
|
||||||
|
res = self.__c.recv(10240).decode()
|
||||||
|
except timeout:
|
||||||
|
res = "ResponseNone"
|
||||||
|
clibs.logger.info(f"请求命令 {cmd.decode()} 的返回信息:\n{res[8:]}")
|
||||||
|
self.__c.close()
|
||||||
|
time.sleep(2)
|
||||||
|
|
||||||
|
def __exec(self, command: dict):
|
||||||
|
try:
|
||||||
|
self.__c.recv(10240)
|
||||||
|
except timeout:
|
||||||
|
pass
|
||||||
|
cmd = json.dumps(command, separators=(",", ":")).encode("utf-8")
|
||||||
|
self.__c.sendall(self.__do_package(cmd))
|
||||||
|
self.__recv_result(cmd)
|
||||||
|
|
||||||
|
def erase_cfg(self):
|
||||||
|
# 一键抹除机器人配置(.rc_cfg)、交互数据配置(interactive_data),但保留用户日志
|
||||||
|
# 场景:如果xCore版本升级跨度过大,配置文件可能不兼容导致无法启动,可以使用该功能抹除配置,重新生成配置。
|
||||||
|
# 机器人参数、零点等会丢失!
|
||||||
|
self.__exec({"cmd": "erase"})
|
||||||
|
|
||||||
|
def clear_rubbish(self):
|
||||||
|
self.__exec({"cmd": "clearRubbish"})
|
||||||
|
|
||||||
|
def soft_reboot(self):
|
||||||
|
self.__exec({"cmd": "soft_reboot"})
|
||||||
|
|
||||||
|
def version_query(self):
|
||||||
|
self.__exec({"query": "version"})
|
||||||
|
|
||||||
|
def robot_reboot(self):
|
||||||
|
self.__exec({"cmd": "reboot"})
|
||||||
|
|
||||||
|
def reset_passwd(self):
|
||||||
|
# 不生效,有问题
|
||||||
|
self.__exec({"cmd": "passwd"})
|
||||||
|
|
||||||
|
def backup_origin(self):
|
||||||
|
# xCore
|
||||||
|
# .rc_cfg /
|
||||||
|
# interactive_data /
|
||||||
|
# module /
|
||||||
|
# demo_project /
|
||||||
|
# robot_cfg /
|
||||||
|
# dev_eni.xml
|
||||||
|
# ecat_license
|
||||||
|
# libemllI8254x.so & libemllI8254x_v3.so
|
||||||
|
# set_network_parameters
|
||||||
|
self.__exec({"cmd": "backup_origin"})
|
||||||
|
|
||||||
|
def origin_recovery(self):
|
||||||
|
self.__exec({"cmd": "recover"})
|
||||||
|
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
# initialization()
|
||||||
|
# fw_updater()
|
||||||
|
pass
|
||||||
|
@ -139,6 +139,13 @@ class ModbusRequest(object):
|
|||||||
clibs.logger.info(f"40018-{action} 执行{actions}安全区 safe region 03")
|
clibs.logger.info(f"40018-{action} 执行{actions}安全区 safe region 03")
|
||||||
sleep(clibs.interval)
|
sleep(clibs.interval)
|
||||||
|
|
||||||
|
def r_write_signals(self, addr: int, value): # OK | 40100 - 40109: signal_0 ~ signal_9
|
||||||
|
if -1 < addr < 10 and addr.is_integer():
|
||||||
|
self.__c.write_register(40100+addr, value)
|
||||||
|
clibs.logger.info(f"{40100+addr}-{value} 将寄存器 signal_{addr} 赋值为 {value}")
|
||||||
|
else:
|
||||||
|
clibs.logger.error(f"{40100+addr}-{value} 地址错误,无法赋值!")
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def w_alarm_state(self): # OK
|
def w_alarm_state(self): # OK
|
||||||
res = self.__c.read_holding_registers(40500, 1).registers[0]
|
res = self.__c.read_holding_registers(40500, 1).registers[0]
|
||||||
@ -418,7 +425,10 @@ class HmiRequest(object):
|
|||||||
return res.get("data", f"{msg_id} has no data item")
|
return res.get("data", f"{msg_id} has no data item")
|
||||||
sleep(clibs.interval*2)
|
sleep(clibs.interval*2)
|
||||||
else: # 尝试在上一次分割的日志中查找,只做一次
|
else: # 尝试在上一次分割的日志中查找,只做一次
|
||||||
res = find_response("".join([clibs.log_path, sorted(listdir(clibs.log_path))[-3]]))
|
try:
|
||||||
|
res = find_response("".join([clibs.log_path, sorted(listdir(clibs.log_path))[-3]]))
|
||||||
|
except IndexError:
|
||||||
|
res = None
|
||||||
if res is not None:
|
if res is not None:
|
||||||
return res.get("data", f"{msg_id} has no data item")
|
return res.get("data", f"{msg_id} has no data item")
|
||||||
elif flag == 1:
|
elif flag == 1:
|
||||||
@ -428,7 +438,10 @@ class HmiRequest(object):
|
|||||||
return res
|
return res
|
||||||
sleep(clibs.interval*2)
|
sleep(clibs.interval*2)
|
||||||
else:
|
else:
|
||||||
res = find_response_xs("".join([clibs.log_path, sorted(listdir(clibs.log_path))[-3]]))
|
try:
|
||||||
|
res = find_response_xs("".join([clibs.log_path, sorted(listdir(clibs.log_path))[-3]]))
|
||||||
|
except IndexError:
|
||||||
|
res = None
|
||||||
if res is not None:
|
if res is not None:
|
||||||
return res
|
return res
|
||||||
self.__sth_wrong(11, f"无法找到请求 {msg_id} 的返回结果")
|
self.__sth_wrong(11, f"无法找到请求 {msg_id} 的返回结果")
|
||||||
@ -600,7 +613,7 @@ class HmiRequest(object):
|
|||||||
|
|
||||||
@staticmethod
|
@staticmethod
|
||||||
def __package_xs(cmd):
|
def __package_xs(cmd):
|
||||||
return f"{dumps(cmd, separators=(",", ":"))}\r".encode()
|
return "".join([dumps(cmd, separators=(",", ":")), "\r"]).encode()
|
||||||
|
|
||||||
def __unpackage(self, sock):
|
def __unpackage(self, sock):
|
||||||
def to_read(conn, mask):
|
def to_read(conn, mask):
|
||||||
@ -1757,7 +1770,7 @@ class HmiRequest(object):
|
|||||||
:return: None
|
:return: None
|
||||||
"""
|
"""
|
||||||
origin_code_list = self.get_filtered_error_code["g"]["log_code.data"]["code_list"]
|
origin_code_list = self.get_filtered_error_code["g"]["log_code.data"]["code_list"]
|
||||||
# [{'id': 10000, 'title': 'HMI请求包解析错误'}, {'id': 10002, 'title': '快速调整启动失败'}]
|
# [{"id": 10000, "title": "HMI请求包解析错误"}, {"id": 10002, "title": "快速调整启动失败"}]
|
||||||
if action == "clear":
|
if action == "clear":
|
||||||
code_list = []
|
code_list = []
|
||||||
elif action == "add":
|
elif action == "add":
|
||||||
@ -1902,8 +1915,8 @@ class ExternalCommunication(object):
|
|||||||
def close_reduced_mode(self): # OK
|
def close_reduced_mode(self): # OK
|
||||||
return self.__exec_cmd("close_reduced_mode", "关闭缩减模式(不限操作模式)", self.exec_desc)
|
return self.__exec_cmd("close_reduced_mode", "关闭缩减模式(不限操作模式)", self.exec_desc)
|
||||||
|
|
||||||
def setdo_value(self, do_name: str, do_value: str): # NG | do_value 为 true/false
|
def setdo_value(self, do_name: str, do_value: str): # OK | do_value 为 true/false
|
||||||
return self.__exec_cmd(f"setdo:{do_name},{do_value}", f"设置 {do_name} 的值为 {do_value}", self.exec_desc)
|
return self.__exec_cmd(f"setdo:{do_name},{do_value}", f"设置 {do_name} 的值为 {do_value} ", self.exec_desc)
|
||||||
|
|
||||||
def modify_system_time(self, robot_time): # OK
|
def modify_system_time(self, robot_time): # OK
|
||||||
return self.__exec_cmd(f"set_robot_time:{robot_time}", f"修改控制器和示教器的时间为 {robot_time} 的", self.exec_desc)
|
return self.__exec_cmd(f"set_robot_time:{robot_time}", f"修改控制器和示教器的时间为 {robot_time} 的", self.exec_desc)
|
||||||
@ -2060,7 +2073,7 @@ class ExternalCommunication(object):
|
|||||||
def __exec_cmd(self, directive, description, more_desc=""):
|
def __exec_cmd(self, directive, description, more_desc=""):
|
||||||
self.s_string(directive)
|
self.s_string(directive)
|
||||||
result = self.r_string(directive).strip()
|
result = self.r_string(directive).strip()
|
||||||
clibs.logger.info(f"执行{description}指令 {directive},返回值为 {result}{more_desc}")
|
clibs.logger.info(f"执行{description}指令是 {directive},返回值为 {result}{more_desc}")
|
||||||
return result
|
return result
|
||||||
|
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user