(已结束)2010-10-31-工控擂台-MODBUS通讯? 点击:752 | 回复:11



饶歌

    
  • 精华:4帖
  • 求助:0帖
  • 帖子:330帖 | 6019回
  • 年度积分:0
  • 历史总积分:23673
  • 注册:2010年2月20日
发表于:2010-10-29 20:21:32
楼主

        设备站号为3,MODBUS RTU协议,端口参数:9600、8 N 1,需要读取设备40100-40120地址数据。

        请选用任一PLC实现与该设备的通讯。

 

        本周末结贴,9个最优回帖分别获得20MP、10MP、10MP、10MP、20积分、20积分、20积分、20积分、20积分!

        MP介绍:gongkongMP即工控币,是中国工控网的用户积分与回馈系统的一个网络虚拟计价单位,类似于大家熟悉的QB,1个MP=1元人民币。

        MP有什么用?兑换服务:以1个MP=1元来置换中国工控网的相关服务。 兑换现金:非积分获得的MP可兑换等值现金(满100MP后、用户可通过用户管理后台申请兑换)。




ye_w

  • 精华:21帖
  • 求助:1帖
  • 帖子:69帖 | 5217回
  • 年度积分:0
  • 历史总积分:46739
  • 注册:2002年4月17日
发表于:2010-10-29 20:40:07
1楼

使用siemen s7-200是不错的选择。

西门子S7-200在V4.0 SP5以上的软件就集成了modbus主站库,该主站库使用的自由口指令实现的,所以当串口调用了modbus库之后,该口在运行情况下就不能编程通讯了,必须拨模式开关让PLC处于停止状态。当然推荐使用2口的CPU,比如CPU224XP或CPU226。下面就是用CPU226来实现楼主的功能。

 

使用PORT0与3号设备相连;PORT1与PC相连,实现在线监视变量的读取。

 

1、CPU选择

2、Modbus库,可以用于PORT0和PORT1,选择支持PORT0的库功能块
 
3、程序
3.1  调用 Modbus RTU 主站初始化和控制子程序
使用 SM0.0 调用 MBUS_CTRL 完成主站的初始化,并启动其功能控制:

各参数意义如下:

a       EN 使能  必须保证每一扫描周期都能被使能(SM0.0)

b      Mode 模式  为1是时,使能modbus协议功能,为0时恢复系统PPI协议

c       Baud  波特率 ,选择9600,与要求相符

d       Parity 校验 ,校验方式选择,0无校验(就是楼主的N),1奇校验, 2偶校验

e        Timeout   ,超时,主站等待从站响应的时间,单位是ms,典型是1000ms,允许设置的范围是1~32767。这个值设置合理才能确保响应。

f         Done     ,完成位,初始化完成,该位自动置1.这样就可以启动MBUS_MSG 读写操作

g        Error     ,初始化错误代码(只有在Done位为1时才有效)

      0= 无错误                      1= 校验选择非法                    2= 波特率选择非法                        3= 模式选择非法
3.2  调用 Modbus RTU 主站读写子程序MBUS_MSG,发送一个Modbus 请求;
a      EN  使能,同一时刻只能有一个读写功能使能
b.     First  读写请求位  ,每一个新的读写请求必须使用脉冲触发
c       Slave  从站地址,可选择的范围 1~247。选择3,与楼主要求相符。
d       RW   读写功能选择   0 =读,1=写
e       Addr  读写从站的地址  
f        Count  数据个数,为21个字
g        DataPtr   数据指针  读回的数据放到这个数据区中
h         Done    完成位,读/写功能完成
i          Error   错误代码 ,只有在Done位为1时,错误代码才有效
3.3  在 CPU 的 V 数据区中为库指令分配存储区(Library Memory)

Modbus Master 指令库需要一个284个字节的全局 V 存储区。

饶歌

  • 精华:4帖
  • 求助:0帖
  • 帖子:330帖 | 6019回
  • 年度积分:0
  • 历史总积分:23673
  • 注册:2010年2月20日
发表于:2010-10-29 20:43:20
2楼

需要有PLC程序                          

rifle

  • 精华:0帖
  • 求助:0帖
  • 帖子:3帖 | 423回
  • 年度积分:0
  • 历史总积分:2333
  • 注册:2005年3月24日
发表于:2010-10-29 20:46:34
3楼

等着看,调用modbus库的就算了。

最好是接收,发送,效验等一步一步的写出来的。

ye_w

  • 精华:21帖
  • 求助:1帖
  • 帖子:69帖 | 5217回
  • 年度积分:0
  • 历史总积分:46739
  • 注册:2002年4月17日
发表于:2010-10-29 21:42:15
4楼
错误代码汇总:
0 = 无错误
1 = 响应校验错误
2 = 未用
3 = 接收超时(从站无响应)
4 = 请求参数错误(slave address, Modbus address, count, RW)
5 = Modbus/自由口未使能
6 = Modbus正在忙于其它请求
7 = 响应错误(响应不是请求的操作)
8 = 响应CRC校验和错误
-
101 = 从站不支持请求的功能
102 = 从站不支持数据地址
103 = 从站不支持此种数据类型
104 = 从站设备故障
105 = 从站接受了信息,但是响应被延迟
106 = 从站忙,拒绝了该信息
107 = 从站拒绝了信息
108 = 从站存储器奇偶错误

另外还有常见的错误
如果多个 MBUS_MSG 指令同时使能会造成 6 号错误
从站 delay 参数设的时间过长会造成主站 3 号错误
从站掉电或不运行,网络故障都会造成主站 3 号错误

ANDYLIU008

  • 精华:1帖
  • 求助:2帖
  • 帖子:25帖 | 475回
  • 年度积分:0
  • 历史总积分:1867
  • 注册:2009年12月12日
发表于:2010-10-31 08:31:37
5楼
这个要和老鸟们学习一下

曹虎明

  • 精华:0帖
  • 求助:0帖
  • 帖子:26帖 | 923回
  • 年度积分:0
  • 历史总积分:4903
  • 注册:2004年7月07日
发表于:2010-10-31 09:40:12
6楼

西门子200 确实不错 很好用的  以前要加模块才能连modbus 现在好 有modbus库  我昨天调的一个项目正好这样用的 224XP 

nineapple

  • 精华:1帖
  • 求助:0帖
  • 帖子:35帖 | 751回
  • 年度积分:10
  • 历史总积分:6582
  • 注册:2005年12月14日
发表于:2010-10-31 22:56:39
7楼

正在写一个AC800M的modbus通讯编程文档,可惜还没写完

对于MODBUS的通讯,最好有MODSACN 32之类的软件进行辅助调试

同时也可以买一个USB TO COM RS232/485的转换器,方便笔记本调试。

最后,讲一下地址40000开头的应该是HOLDING REGISTER ,属于读/写数据

如果地址是30000开头那么是INPUT REGISTER ,属于读数据。

0000开头的属于COIL 属于DO/DI 读写

10000开头的属于INPUT STATUS ,属于DI ,读数据。

-----------------------------------

另外光写一个程序的擂台一点意思都没有,很多新手看了还是不懂。

正如我当初写程序的时候,那个地址就折腾了好久,什么40100里面的4是功能码,地址从100开始。

而且有些PLC还有OFFSET, 地址给的是40100,却要从099开始读起,等等。

----------------------------------

zhanziling

  • 精华:0帖
  • 求助:13帖
  • 帖子:37帖 | 1242回
  • 年度积分:0
  • 历史总积分:6032
  • 注册:2009年4月06日
发表于:2010-11-01 12:27:02
8楼
学习一下

莫子辰

  • 精华:1帖
  • 求助:11帖
  • 帖子:20帖 | 939回
  • 年度积分:0
  • 历史总积分:5186
  • 注册:2010年5月12日
发表于:2010-11-02 10:24:48
9楼

用三菱的和ABB的做过MODBUS ascii通讯

 

要是PLC支持MODBUS就简单了,三菱2N的不知道 做RTU还要写CRC校验程序

djgxy

  • 精华:0帖
  • 求助:0帖
  • 帖子:4帖 | 1200回
  • 年度积分:100
  • 历史总积分:20331
  • 注册:2020年6月23日
发表于:2010-11-03 08:13:04
10楼

Modbus RTU协议与S7-200:

S7-200 CPU上的通讯口Port0可以支持Modbus RTU协议,成为Modbus RTU从站。此功能是通过S7-200的自由口通讯模式实现,因此可以通过无线数据电台等慢速通讯设备传输。
如果想在S7-200 CPU与其他支持Modbus RTU的设备使用Modbus RTU协议通讯,需要由有S7-200 CPU做Modbus主站。S7-200 CPU做主站必须由用户自己用自由口模式,按相关协议编程。
在S7-200控制系统应用中,Modbus RTU从站指令库只支持CPU上的通讯0口(Port0)。要实现Modbus RTU通讯,需要Step7-Micro/WIN32 V3.2以上版本的编程软件,而且须安装Step7-Micro/WIN32 V3.2 Instruction Library(指令库)。Modbus RTU功能是通过指令库中预先编好的程序功能块实现的。

饶歌

  • 精华:4帖
  • 求助:0帖
  • 帖子:330帖 | 6019回
  • 年度积分:0
  • 历史总积分:23673
  • 注册:2010年2月20日
发表于:2010-11-08 21:56:20
11楼

20MP获得者:ye_w                         ye_w

10MP获得者:nineapple                nineapple

                          djgxy                          djgxy 
20积分获得者:空缺                         




热门招聘
相关主题

官方公众号

智造工程师