工控网首页
>

应用设计

>

基于西门子PLC S7-200的无线通信控制系统

基于西门子PLC S7-200的无线通信控制系统

2005/11/23 16:23:00
一、 背景   2002年开始开发焦炉四大机车自动化系统(见下图)的时候,遇到了无线通信的难题,众所周知目前的电台不能直接支持PPI协议,别的的无线通信的方案要么成本过高,要么性能不稳定,不可靠。 所以早期的时候,都是用自由口,自己编写基于主、从通信协议的通信程序,不过很不灵活,协议一旦确定就很难更改,如果有升级和变动,都需要大量的修改代码,维护极不方便。   后来西门子推出了Micro Win32引入了库的概念,可以直接提供Moubus Rtu Slave库供开发人员使用,但是只提供Moubus Slave,没有提供Moubus Client,所以PLC直接通过Moubus协议访问还是有问题。
二、 实施方案   Modbus是一个公开协议,包括ASCII、RTU和TCP几种,很显然我选择了Rtu,因为西门子提供的Slave就是基于Rtu协议的。   我们知道Modbus支持好多功能,如下表:
  如果在PLC中把所有的功能都实现了,不光代码编写较为繁琐,对PLC本身的程序和容量空间都是考验。所以根据需要我仅实现3和16号指令,详细的协议如下:   1、 读取保持寄存器(单个和多个,以字为最小单位) 发送命令帧:
返回命令帧:
说明: 命令正确: 1) 设备地址相同Addr0=Addr1 2) 功能码相同 3) 返回的数据字节数N=DataNum×2 DataNum的范围(0~120) 4) 返回数据的意义 a=HoldStart n= DataNum-1
命令有误: 1) 没有任何返回 2) 返回异议帧
2、 设置保持寄存器(多个,以字为最小单位) 发送命令帧:
返回命令帧:
说明: 数据字节数:bytN= DataNum×2 命令正确: 1) 设备地址相同Addr0=Addr1 2) 功能码相同 3) 地址相同 4) 数据量相同 命令有误: 1) 没有任何返回 2) 返回异议帧
  有了协议,有知道了西门子库的开发方法,剩下的事,就是开工,下面详细介绍最终的完成成果:   Modbus RTU客户程序由于建立在PLC中,所以它的读写函数的处理方法和一般上位机的读写程序不一样,PLC内部的程序执行是扫描式的,而读写数据时的通信却是过程的需要一定时间来等待的,所以读写的函数不是独立的,它需要一个专门的服务程序来反馈执行的结果。同时需要注意的是,读写操作在某一时刻只允许一个执行(最好读写操作之间留一定时间间隔)。   此外,西门子提供的Modbus RTU Slave程序不支持广播命令。 I、地址定义 1、 V变量区的占用 一共需要V变量区786个字节。在程序设计时,用户程序不要占用该内存区。 特别注意:V变量区的占用地址是相对的,通过修改库内存地址,可以改变使用V变量区的范围。
2、 定时器的占用 占用了定时器T100,用户程序不要再使用T100了。 变量名 说明 备注 T100 10ms定时器 II、接口函数说明 1、YFMBUS_INIT a. 名称:YFMBUS_INIT b. 类型: c. 功能:Modbus RTU Client初始化 d. 参数:
2、YFMBUS_ Server a. 名称:YFMBUS_Server b. 类型: c. 功能:Modbus RTU Client服务程序,负责通信后台的处理 d. 参数: 名 称 类 型 说 明 备 注 Done BOOL 0 - 服务空闲 1 - 正在服务 输出 3、YFMBUS_ReadVW a. 名称:YFMBUS_ ReadVW b. 类型: c. 功能:读取指定VW变量区的数据 d. 参数:
inErrorAddr的反馈信息:
4、YFMBUS_WriteVW a. 名称:YFMBUS_ WriteVW b. 类型: c. 功能:写指定VW变量区的数据 d. 参数:
inErrorAddr的反馈信息:
III、样例程序 网格 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的应用. 北京金日:叶帆 公司网址:http://www.bjjr.com.cn 我的Blog:http://blog.csdn.net/yefanqiu
投诉建议

提交

查看更多评论
其他资讯

查看更多

VB串口通信示例

西门子PPI通信控件