记一次Profibus DP转MODBUS的实例
12年自动化专业毕业后,留在了一个钢厂工作,首先接触的便是西门子的PLC,接触的协议自然也是profibus DP、MPI、PPI、TCP/IP等与西门子相关的协议,对于MODBUS,仅仅停留在听说过,好像很厉害的层面上,一次偶然的机会,接触到了MODBUS协议,项目是300PLC通过PB-B-MODBUS总线桥(北京鼎实)与MODBUS从站通讯,PLC选择的是西门子CPU313-2DP,从站设备是一台加气机,主站CPU需要读取加气机的状态字及流量温度压力等数据,同时需要给控制字给加气机。由于之前没有接触过MODBUS协议及产品,再通读了网上的协议及PB-B-MODBUS总线桥的产品介绍之后便开始了测试。
1.首先,毫无疑问,需要进行硬件组态的配置:在安装完总线桥的GSD文件后,很轻松完成了组态;
2.然后我们要明白我们的目的,读写数据,数据存储在什么地方?怎么读取和写入?硬件组态方面还需要怎么进一步组态?读取完数据之后怎么处理?
上图显示的是加气机设备MODBUS协议的一小部分,以LNG出口温度为例,对每个数据进行解释,0x0035、0x0036指的是寄存器号,2指的是寄存器数目,int 32指的是数据类型,0.001指的是单位,R指的是只读,综合上述,我们知道了LNG出口温度这个数据存储在40000+53(16进制35转换)-1=40052开始的两个字中,PLC读取数据之后需要除以1000以得到正确数值
接下来需要对硬件组态进行进一步组态,双击总线桥,添加一个read 2 words模块,并设置好起始地址及其他必要设置,组态完成后如下图
从上图中我们便可以看出,将起始地址设置为52,PLC的I地址设置为256-259,便将MODBUS寄存器40052开始的两个字与PLC的PID256对应了起来,第一行的8DI的I地址为2,意味着IB2是总线桥的状态位,QB2是总线桥的控制位:具体含义见下图
这样,我们程序中给定一个启动MODBUS扫描信号,便可以读到LNG出口温度的数据了,读取的数据存储在PID256中,对PID256进行除以1000操作,便可以得到实际出口温度,同时,控制字状态字及其他温度压力等数据都可以通过这样的添加模块方式来进行读写。
通过这个项目,我对MODBUS协议有了一定的了解,我觉得关键在于组态和地址映射,测试时候可以使用MODBUS SIM和MODBUS SCAN软件进行测试,MODBUS Poll和MODBUS Slave也是可以的,使用软件测试完成后,有事半功倍的效果。并且在这次测试完成后,我又完成了S7-200与S7-200 SMART的MODBUS通讯测试,还有使用CP343-1通过第三方连接MODBUS设备的测试,,发现再神秘的东西,只要我们用心去了解它,去剖析它,问题都是变得简单,好事多磨,知识也是这样,它也害怕多磨!
ProfibusDPMODBU 相关文章:
- Windows CE 进程、线程和内存管理(11-09)
- RedHatLinux新手入门教程(5)(11-12)
- uClinux介绍(11-09)
- openwebmailV1.60安装教学(11-12)
- Linux嵌入式系统开发平台选型探讨(11-09)
- Windows CE 进程、线程和内存管理(二)(11-09)