第一版:目前设定框架:
-
BaseModbusClient:基础的modbus使用,无ROS
-
从pymodbus模块中取出需要的方法:定义为初始化、连接、关闭、读、写;
-
在
_writeRegisters保留了控制器扩展多个数字I/O从机的接口slave;其默认值为0;
-
-
D12_modbus_client:控制器功能,根据控制器手册设定需要的同步相关方法(函数)。
-
需要功能:
- 读保持寄存器
- 急停
- 停止
- 多轴相对移动
- 多轴绝对移动
- 带速度的相对移动
- 带速度的绝对移动
- 所有轴回原点:
- 指定多轴回原点:
-
功能设置:
-
原有功能:读或写;
-
检查:检查是否完成;check_complete(i,value)
-
-
-
ROS_Modbus:
-
两部分内容:
-
对传入的value的包装
Split_command()类:三个函数:- 无速度消息的分割包装;
- 有速度消息的分割包装;
- 是否是X的判断:分割传入的消息:
-
判断是否分割消息:
-
将3个轴的操作分开:
-
检测针对几个通道(chx);
-
生成相应的参数:起始地址、值、寄存器数量;
-
-
操作命令的中转传递:
-
原因:因为电源功耗问题,目前做不到四轴同步移动;同时为了更方便的操作;
-
根据上面类的分割包装后的value,依次将XYZ的移动命令传递给下一功能包;
-
基本可分为两种:
-
读/停止: 和value基本无关,判断的是是否要读/停止:读:1代表读;停止:0代表停止;
-
绝对移动/带速度的绝对移动/指定速度回零:
依次传递命令;判断是否上一条命令完成;
用ROS的参数服务器相关功能;
-
-
-
-
-
node节点:导入包,使用生成的订阅器,订阅并针对任务进行处理;
-
启动客户端;
-
检查 X轴 初始化的速度和微步细分设定值是否一致,不一致提出警告;
-
设定订阅器,回调函数
回调函数中以序号对应各个功能:
#ROS_Modbus: 操作映射表 oper_map = { 1:"multiAxisStateRead", # 读保持寄存器状态 2:"multiAxisStop", # 停止 3:"multiAxisRelativeMove", # 相对移动 4:"multiAxisAbsoluteMove", # 绝对移动 5:"multiAxisRelativeSpeedMove", # 相对移动 + 指定速度 6:"multiAxisAbsoluteSpeedMove", # 绝对移动 + 指定速度 7:"multiAxisHoming", # 回零点 }
-
-
d12_controller_mapping: 控制器的参数集
-
msg设定:将所有滑台操作融合为一个操作指令消息
-
主轴电机需要的数字IO控制代码(简版)