问题描述
minimalmodbus
不提供一次设置多个线圈的方法。我找不到解决方法。
目标:
SMC LEC 6 控制器数据表中的 modbus 协议说明,请参阅 here。
我尝试按照从第 7 页开始的示例中的说明,使用 pyton 库 minimalmodbus
发送列出的 modbus 命令。
我想发送命令 01 0F 00 10 00 08 01 02 BE 97
,但没有找到使用 minimalmodbus
执行此操作的方法。没有函数代码 15 (OF
) 的实现。
我尝试做的:
我的推理如下:
我认为这可以通过单独设置这些位置来实现:
logging.debug('write step')
step_address = int('0010',16)
bin_2 = [0] * 8
bin_2[6] = 1
for pos,val in zip(list(range(8)),bin_2):
contr.write_bit(step_address + pos,val)
time.sleep(WAIT_TIME)
contr.write_bit(flags['DRIVE'],1); time.sleep(WAIT_TIME * 5)
执行器没有移动...
谢谢, 扬
解决方法
通过深入了解最小 modbus 类并将原始负载发送到设备,我能够发送有问题的命令:
00 10 00 08 01 02
contr._performCommand(15,'\x00\x10\x00\x08\01\02')
contr.write_bit(flags['DRIVE'],1)
time.sleep(WAIT_TIME * 3)
contr.write_bit(flags['DRIVE'],0)