Warm tip: This article is reproduced from serverfault.com, please click

controller-SMC LEC 6的python minimummodbus协议实现:写入多个线圈

(controller - python minimalmodbus protocol implementation for SMC LEC 6: write to multiple coils)

发布于 2021-06-21 17:13:24

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
  • 我想设置8个线圈:00 08,或一个字节01
  • 我想要做的是将此字节设置为值 2 ( 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)

执行器虽然不动...

谢谢,扬

Questioner
Jan Alexander
Viewed
0
Jan Alexander 2021-06-22 20:59:54

通过在最小的 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)