求助:PLC做主站的MODBUS通信 点击:2654 | 回复:8



拉姆

    
  • 精华:0帖
  • 求助:0帖
  • 帖子:3帖 | 7回
  • 年度积分:0
  • 历史总积分:17
  • 注册:2007年11月01日
发表于:2007-11-01 14:11:00
楼主
大家好,我打算采用MUDBUS协议来实现PLC与DSP的通信,由于一些原因我必须把PLC作为主站,在STEP 7 MicroWIN V4.0 SP4中我调用了MUDBUS RTU主站指令库。我想请教大家的是,当PLC要读DSP的寄存器中的值时,DSP回传数据帧后,这些数据会保存在PLC的寄存器中,那么如果是调用MUDBUS RTU主站指令库,PLC是不是自动的完成对数据帧的解包,也就是直接将要读取的数据放在指定的寄存器中?



我要做的通信过程是这样的:
DSP传给PLC一些故障的信息和数据,PLC把这些数据放到指定的寄存器中,这些指定的寄存器与触摸屏的一些寄存器一一对应,然后在屏上显示

由于我使用了MODBUS协议,我想用定义好的功能码03和06以及16
这个保持寄存器我想能不能把DSP中的寄存器做个映射,比如DSP的地址0x0001对应的是MODBUS地址的40001,那么我要读0x0001的值,我访问40001就可以了 

因此我定的协议是这样的:
PLC发的数据格式依次为 站地址、功能码、要读从站的首地址(即40001,而不是0x0001)、数据个数、校验码
而DSP给我回传的数据格式依次是:站地址、数据个数、数据、校验码

我的想法是这样的 :我们先固定好什么样的故障信息放入指定的寄存器 我要读故障信息 直接读这些地址就可以了 把这些信息读回我PLC的寄存器 由于已经做了规定 我自然知道这些数据是什么样的故障 那么PLC这方就不用做判断了 
我再把这些数据传到与触摸屏对应的寄存器中 ,供触摸屏读取来显示

整个通信过程就是这样的了 ,因为从来没做过,网上也找不到类似的资料,大家帮忙看看能不能实现啊?



拉姆

  • 精华:0帖
  • 求助:0帖
  • 帖子:3帖 | 7回
  • 年度积分:0
  • 历史总积分:17
  • 注册:2007年11月01日
发表于:2007-11-01 15:11:00
1楼
补充一下问题:
我用的PLC型号是S7-2OOCN,CPU是226
我下载了西门子网站上的MicronPower_2007的一个文档,上面介绍了PLC做主站的MODBUS通信,西门子开发了MODBUS主站指令库,可以通过调用库指令来完成通信.

但是我发现这个指令库似乎是为两台PLC之间的MODBUS通信而使用的,一台做主站,另一台做从站.

我的疑问是这个指令库能不能在PLC和DSP之间的通信中使用?如果我把DSP做从站,那么指令库中要求寻址的MODBUS地址是不是要映射成DSP的寄存器地址呢?

举个例子,我要读取DSP中寄存器0x0001--0x0005的数据,我把0x0001--0x0005的地址映射成MODBUS地址40001--40005,PLC调用MODBUS指令库发出指令要求读取40001--40005的数据,那么是否就会读到DSP的数据呢??

皓月

  • 精华:9帖
  • 求助:0帖
  • 帖子:483帖 | 5271回
  • 年度积分:0
  • 历史总积分:8863
  • 注册:2003年11月09日
发表于:2007-11-01 22:23:00
2楼
可以自己编写通讯代码,不受库文件限制

流血的狼

  • 精华:0帖
  • 求助:0帖
  • 帖子:28帖 | 329回
  • 年度积分:0
  • 历史总积分:405
  • 注册:2004年4月22日
发表于:2007-11-02 09:18:00
3楼
以上方法虽然可以实现,但是我觉得,实现一个工程项目要采取简单可靠的办法,你可以在profibus网络中增加一个节点,也就是增加MDOBUS转PRIFIBUS的设备,现在有这种设备购买,这样你不用写程序,只要定义地址就可以,

为了避免别人说我做广告,这样的设备你可以自己在网络上找。

拉姆

  • 精华:0帖
  • 求助:0帖
  • 帖子:3帖 | 7回
  • 年度积分:0
  • 历史总积分:17
  • 注册:2007年11月01日
发表于:2007-11-02 13:18:00
4楼
先感谢大家的答复!由于资金的限制,不能再在硬件上投入了.
还是有这个疑问,这个库指令是不是只能针对MODBUS定好的那几个功能码啊?比如01(读线圈),16(写多个保持寄存器),由于MODBUS的校验要CRC校验,如果我自己定义功能码,那么西门子开发的MODBUS主站的指令库还能不能用呢?我主要不想编写CRC校验的程序,如果用库指令的话,好象这个是自动生成校验码的.

拉姆

  • 精华:0帖
  • 求助:0帖
  • 帖子:3帖 | 7回
  • 年度积分:0
  • 历史总积分:17
  • 注册:2007年11月01日
发表于:2007-11-05 18:45:00
5楼
自己顶!经过努力,证实西门子的主站指令库是能使用的,用串口调试助手测试PLC的发送数据完全正确,但是新的问题出现了,就是我要读取的数据DSP回传PLC却接受不到,真不知道是哪出了问题.真是郁闷!!

皓月

  • 精华:9帖
  • 求助:0帖
  • 帖子:483帖 | 5271回
  • 年度积分:0
  • 历史总积分:8863
  • 注册:2003年11月09日
发表于:2007-11-05 21:27:00
6楼
我可以帮助你,具体用s7-200 plc 做modbus主站,使用自由口通讯模式,modbus库限制较多,我一般自己编写通讯代码,非常灵活
liumingqin623@hotmail.com

拉姆

  • 精华:0帖
  • 求助:0帖
  • 帖子:3帖 | 7回
  • 年度积分:0
  • 历史总积分:17
  • 注册:2007年11月01日
发表于:2007-11-11 00:59:00
7楼
楼上的也是有偿服务吗

皓月

  • 精华:9帖
  • 求助:0帖
  • 帖子:483帖 | 5271回
  • 年度积分:0
  • 历史总积分:8863
  • 注册:2003年11月09日
发表于:2007-11-11 22:06:00
8楼
受库文件限制,始终不能自由
如给你一段报文格式(如仪表的其他协议),始终不知怎么通讯
利用自由口通讯,简单而使用,解剖代码,一劳永逸。

热门招聘
相关主题

官方公众号

智造工程师