加载中…
个人资料
  • 博客等级:
  • 博客积分:
  • 博客访问:
  • 关注人气:
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

modbus 我所理解的master和slave

(2013-06-19 20:18:14)
分类: modbus

整理:

 

master  主站  拿数据  一个

slave   从站  放数据  多个(<247)

 

看代码直观点:

slave.py

http://s15/mw690/6fe87f87ge00936452b2e&690我所理解的master和slave" TITLE="modbus 我所理解的master和slave" />

运行后是这样:

http://s9/mw690/6fe87f87gdf8190f1f738&690我所理解的master和slave" TITLE="modbus 我所理解的master和slave" />


master.py

http://s6/mw690/6fe87f87ge00b444830e5&690我所理解的master和slave" TITLE="modbus 我所理解的master和slave" />


运行后是这样:

http://s11/mw690/6fe87f87gdf819535654a&690我所理解的master和slave" TITLE="modbus 我所理解的master和slave" />

 

从上面可知,slave.py将2.7被,打包解包成(16428,52429)存放在 block1,master.py到block1拿(16428,52429)再反过来打包解包成原来的float型2.7

 

在Modbus 模拟器上设置:

http://s9/mw690/6fe87f87ge008fdcb76e8&690我所理解的master和slave" TITLE="modbus 我所理解的master和slave" />


需要把数据打包再拆包为modbus能认识的东西才能放数值拿数值

slave端的unpack好像只能HH或>HH或H或>H,用>f就存不了,不知为什么。。。有待考究

 

slave 也可以通过 bb = slave_1.get_values('block1', 0, 2) 来得到数值

master 也可以通过cc = struct.unpack('>HH', struct.pack('>f', 2.8))
        master.execute(2, modbus_tk.defines.WRITE_MULTIPLE_REGISTERS, 0, output_value=cc)来放数值(如果该slave有可读可写权限)

 

一个slave可以设置多个block,但不同的block地址不可以一样。理解为可将slave切为多个地址段,每个block上的地址需要是连续的,如果需要在不连续的地址段放置数值即可使用多block。

 

查看端口是否已经开放 root权限
/etc/init.d/iptables status

 

/sbin/iptables -I INPUT -p tcp --dport 5023 -j ACCEPT   # 开启5023端口
/etc/rc.d/init.d/iptables save #保存配置
/etc/rc.d/init.d/iptables restart #重启服务 


===================================================================

 modbus_tk.defines.DISCRETE_INPUTS:  1位只读
 modbus_tk.defines.COILS:  1位读写
 modbus_tk.defines.ANALOG_INPUTS:  16位只读
 REGS_RW' : modbus_tk.defines.HOLDING_REGISTERS:  16位读写

( > | < )  (高位在前 | 低位在前) 注: 16位只读和16位读写用一种, 1位只读和1位读写不用
 
 格式符/C语言类型/Python类型
 x/pad byte/no value
 c/char/string of length 1
 b/signed char/integer
 B/unsigned char/integer
 ?/Bool/bool
 h/short/integer
 H/unsigned short/integer
 i/int/integer
 I/unsigned int/integer or long
 l/long/integer
 L/unsigned long/long
 q/long long/long
 Q/unsigned long long/long
 f/float/float
 d/double/float
 s/char[]/string
 p/char[]/string
 P/void */long
#

待续。。。

 

 

0

阅读 收藏 喜欢 打印举报/Report
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有