基于西门子PLC200的无线通信控制系统
2008-03-11 16:19
204 查看
2002年开始开发焦炉四大机车自动化系统(见下图)的时候,遇到了无线通信的难题,众所周知目前的电台不能直接支持PPI协议,别的的无线通信的方案要么成本过高,要么性能不稳定,不可靠。
所以早期的时候,都是用自由口,自己编写基于主、从通信协议的通信程序,不过很不灵活,协议一旦确定就很难更改,如果有升级和变动,都需要大量的修改代码,维护极不方便。
后来西门子推出了Micro Win32引入了库的概念,可以直接提供Moubus Rtu Slave库供开发人员使用,但是只提供Moubus Slave,没有提供Moubus Client,所以PLC直接通过Moubus协议访问还是有问题。
![](https://oscdn.geek-share.com/Uploads/Images/Content/202012/09/8f465b6cdd139a12f04a17cdf8d94490.gif)
Modbus是一个公开协议,包括ASCII、RTU和TCP几种,很显然我选择了Rtu,因为西门子提供的Slave就是基于Rtu协议的。
我们知道Modbus支持好多功能,如果在PLC中把所有的功能都实现了,不光代码编写较为繁琐,对PLC本身的程序和容量空间都是考验。所以根据需要我仅实现3和16号指令.
Modbus RTU客户程序由于建立在PLC中,所以它的读写函数的处理方法和一般上位机的读写程序不一样,PLC内部的程序执行是扫描式的,而读写数据时的通信却是过程的需要一定时间来等待的,所以读写的函数不是独立的,它需要一个专门的服务程序来反馈执行的结果。同时需要注意的是,读写操作在某一时刻只允许一个执行(最好读写操作之间留一定时间间隔)。
此外,西门子提供的Modbus RTU Slave程序不支持广播命令。
完成后的使用该库的示例代码:
网格 1
// 网络注解
LD SM0.1 //PLC初次扫描
//--------------------------------
//PLC的端口号:0/1|波特率0-4800 1-9600 2-19200|校验:0-无 1-奇校验 2-偶校验
CALL YFMBUS_INIT, 0, 1, 2
//--------------------------------
MOVB 0, VB0
网格 2
LD SM0.0
//端口0 JRModbus客户端程序
CALL YFMBUS_Server, M0.1
网格 3
LD SM0.0
TON T32, +200
网格 4
LD T32
R T32, 1
AB<> 16#CC, VB0 //操作完毕
INCB VB10
LPS
AB> VB10, 1
MOVB 0, VB10
LRD
AB= VB10, 0 //读数据
//从站号|从站存放地址(VW100)|数据量|主PLC存放数据地址|反馈信息
CALL YFMBUS_ReadVW, 1, 50, 10, &VB50, &VB0
LPP
AB= VB10, 1 //写数据
//从站号|从站存放地址(VW200)|数据量|主PLC存放数据地址|反馈信息
CALL YFMBUS_WriteVW, 1, 100, 10, &VB100, &VB0
//----
INCW VW100 //测试数据 自加1
从实施以来,无线通信的数据包结构变化很大,但这个通信架构却没有再改变过,近两年的多时间在多个现场,它都运行的很稳定,完全实现了无线通信基于PLC的应用。
所以早期的时候,都是用自由口,自己编写基于主、从通信协议的通信程序,不过很不灵活,协议一旦确定就很难更改,如果有升级和变动,都需要大量的修改代码,维护极不方便。
后来西门子推出了Micro Win32引入了库的概念,可以直接提供Moubus Rtu Slave库供开发人员使用,但是只提供Moubus Slave,没有提供Moubus Client,所以PLC直接通过Moubus协议访问还是有问题。
![](https://oscdn.geek-share.com/Uploads/Images/Content/202012/09/8f465b6cdd139a12f04a17cdf8d94490.gif)
Modbus是一个公开协议,包括ASCII、RTU和TCP几种,很显然我选择了Rtu,因为西门子提供的Slave就是基于Rtu协议的。
我们知道Modbus支持好多功能,如果在PLC中把所有的功能都实现了,不光代码编写较为繁琐,对PLC本身的程序和容量空间都是考验。所以根据需要我仅实现3和16号指令.
Modbus RTU客户程序由于建立在PLC中,所以它的读写函数的处理方法和一般上位机的读写程序不一样,PLC内部的程序执行是扫描式的,而读写数据时的通信却是过程的需要一定时间来等待的,所以读写的函数不是独立的,它需要一个专门的服务程序来反馈执行的结果。同时需要注意的是,读写操作在某一时刻只允许一个执行(最好读写操作之间留一定时间间隔)。
此外,西门子提供的Modbus RTU Slave程序不支持广播命令。
完成后的使用该库的示例代码:
网格 1
// 网络注解
LD SM0.1 //PLC初次扫描
//--------------------------------
//PLC的端口号:0/1|波特率0-4800 1-9600 2-19200|校验:0-无 1-奇校验 2-偶校验
CALL YFMBUS_INIT, 0, 1, 2
//--------------------------------
MOVB 0, VB0
网格 2
LD SM0.0
//端口0 JRModbus客户端程序
CALL YFMBUS_Server, M0.1
网格 3
LD SM0.0
TON T32, +200
网格 4
LD T32
R T32, 1
AB<> 16#CC, VB0 //操作完毕
INCB VB10
LPS
AB> VB10, 1
MOVB 0, VB10
LRD
AB= VB10, 0 //读数据
//从站号|从站存放地址(VW100)|数据量|主PLC存放数据地址|反馈信息
CALL YFMBUS_ReadVW, 1, 50, 10, &VB50, &VB0
LPP
AB= VB10, 1 //写数据
//从站号|从站存放地址(VW200)|数据量|主PLC存放数据地址|反馈信息
CALL YFMBUS_WriteVW, 1, 100, 10, &VB100, &VB0
//----
INCW VW100 //测试数据 自加1
从实施以来,无线通信的数据包结构变化很大,但这个通信架构却没有再改变过,近两年的多时间在多个现场,它都运行的很稳定,完全实现了无线通信基于PLC的应用。
相关文章推荐
- 一种基于Android和JXTA协议模型的无线D2D通信技术[图]
- 基于java平台的与无线远程测控终端的串口通信
- 基于ZigBee的短距离无线通信网络技术
- 单片机基于2.4G无线收发模块NRF24L01的无线通信(基本测试通过)
- 基于arduino和蓝牙通信的智能窗户控制系统
- 64-基于TMS320C6455、XC5VSX95T 的6U CPCI无线通信处理平台
- 基于上海拜安光纤传感分析仪OSA搭建无线通信系统
- 【原创】基于无线通信基站、地址码和短信查询的地点查询解决方案
- [summ] 基于MPTCP的无线通信节能方案/MPTCP-based Energy Saving Techs in Wireless Networks
- 大三下------无线通信实习-----基于zigbee的无线电阻检测系统
- 基于西门子PLC200的无线通信控制系统
- 基于ARM的智能灯光控制系统(6)进程通信
- 基于ARM的智能灯光控制系统(6)进程通信
- 基于TMS320C6455、XC5VSX95T 的6U CPCI无线通信处理平台
- 基于ARM9的无线电台网络控制系统的设计与研究
- 基于西门子PLC200的无线通信控制系统
- 我读《基于WebRTC的无线实时通信QoS-QoE评估与预测》
- 单片机基于2.4G无线收发模块NRF24L01的无线通信(基本测试通过)续
- 基于ARM的智能灯光控制系统总结(13-网页CGI进程之进程通信头文件)
- 大三下------无线通信实习-----基于zigbee的无线光强检测系统