minimalmodbus
不提供一次设置多个线圈的方法。我找不到解决方法。
SMC LEC 6 控制器数据表中的 modbus 协议描述,请参见链接。我尝试通过使用 pyton library 发送列出的 modbus 命令来遵循从第 7 页开始的示例中的说明minimalmodbus
。
我想发送命令01 0F 00 10 00 08 01 02 BE 97
,但找不到使用minimalmodbus
. 没有实现功能码15 ( OF
)。
我的推理如下:
0F
00 10
00 08
,或一个字节01
02
),或二进制00000010
我认为这可以通过单独设置这些位置来实现:
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)