首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >SMC LEC 6的python协议实现:写入多个线圈

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

Stack Overflow用户
提问于 2021-06-21 17:13:24
回答 1查看 127关注 0票数 0

minimalmodbus没有提供一种一次性设置多个线圈的方法。我找不到解决办法。

目标:

SMC 6控制器数据表中的modbus协议描述,请参阅链接。通过使用pyton库minimalmodbus发送列出的modbus命令,我尝试遵循示例中的说明,从第7页开始。

我想发送命令01 0F 00 10 00 08 01 02 BE 97,但没有找到使用minimalmodbus的方法。函数代码15 (OF)没有实现。

我想做的是:

我的推论如下:

  • 我想设置多个线圈:0F
  • 从位置开始:00 10
  • 我想设置8个线圈:00 08,或一个字节01
  • 我想要做的是将这个字节设置为值2 (02),或者用二进制00000010

我认为这可以通过分别设置这些立场来实现:

代码语言:javascript
运行
复制
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)

但执行器不动..。

谢谢你,简

EN

Stack Overflow用户

回答已采纳

发布于 2021-06-22 12:59:54

我能够通过在最小modbus类中深入一点并向设备发送原始有效载荷来发送该命令:

00 10 00 08 01 02

代码语言:javascript
运行
复制
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)
票数 0
EN
查看全部 1 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68072096

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档