使用CODESYS-语言编程实现MODBUS-TCP-SERVER功能-改-(4)_第1页
使用CODESYS-语言编程实现MODBUS-TCP-SERVER功能-改-(4)_第2页
使用CODESYS-语言编程实现MODBUS-TCP-SERVER功能-改-(4)_第3页
使用CODESYS-语言编程实现MODBUS-TCP-SERVER功能-改-(4)_第4页
使用CODESYS-语言编程实现MODBUS-TCP-SERVER功能-改-(4)_第5页
已阅读5页,还剩5页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、精品好资料学习推荐Codesys语言编程实现Modbus Tcp ServerCoDeSysprogramming languageto achievethe Modbus TcpServer蒋勇飞(施耐德电气 上海 200072)中文摘要:PLC_OPEN 是工业自动化编程领域的一个标准,Codesys是德国3S 公司开发的软件系统平台,它是完整支持PLC_OPEN标准的软件系统平台(即IEC61131-3标准)。支持标准IL 、ST、 FBD 、LD、 CFC、 SFC 六种PLC编程语言,用户可以在同一项目中选择不同的语言编辑子程序,功能模块等。目前许多公司的自动化控制器都是基于这个平台

2、开发的,例如施耐德,倍福,ABB,易福门,派芬,和利时等。使用Codesys编程实现Modbus Tcp Server的功能,方便了客户使用带以太网接口的控制器和HMI或PC的通讯。降低了客户的成本,增强了系统使用的灵活性。中文关键字:以太网接口,通讯协议,人机界面,ModbusTcp服务器,CodesysAbstract:PLC_OPENastandardinthe fieldofindustrial automationprogrammingCodesysGermany3Shas developedsoftwareplatform, which isthethecompletesuppor

3、tPLC_OPENstandardsoftwareplatform(ie,IEC61131-3 standard).Supports standardIL, ST,FBD,LD,CFC,the SFCsixPLCprogramming languages,user canthesameproject,choose a different languageeditingsubroutine,function module.Manyautomationcontrolleraredevelopedbased on this platform,such asSchneider,Beckhoff, AB

4、B, Ifm,Fin, andHollysys.TouseCodesysprogrammingModbus Tcp Server,andconvenient forcustomers to usethe communicationcontrollerand HMIor PCwithan Ethernet interface.Reduced ourcosts, enhancetheflexibilityofthesystem.Keywords:Ethernet port, Communication protocol, HMI, Modbus Tcp Server, Codesys引言Modbu

5、s Tcp 应用层协议及数据帧介绍Modbus-TCP已成为当今开放的互联网标准之一,并为互联网标准的组织IETF(互联网工程任务委员会)认可。由于Modbus协议部分未经改动,众所周知的Modbus服务和对象模式依然有效,只是将它的作为传输层协议移植到TCP/IP上。Modbus Tcp应用层的协议是独立于通讯媒介,根据客户/服务器原理组织的。客户发送请求帧来请求服务,服务器回应响应帧。请求帧和响应帧包含了参数和/或数据。在图 1中显示了标准Modbus Tcp帧格式。标准的Modbus通讯中从站地址和CRC校验的处理优先于功能码,但在Modbus Tcp中地址和校验由底层的Tcp协议完成。

6、Modbus Tcp和Modbus_RTU 在数据报文的结构上存在的差异是报文帧头由MBAP 替换了Slave ID。MBAP由7个字节组成,并且出现在每个Modbus Tcp 信息帧的头部,这7个字节分别由Transaction Identifier(2个字节,传输标志),Protocol Identifier(2个字节,协议标志),Length(2个字节),Unit Identifier(一个字节,设备站号)。图 1: 使用Modbus-TCP,命令和用户数据可不经任何修改而封装在TCP/IP的数据容器中图 2: Modbus-TCP ADU在经过以太网TCP/IP协议封装之后的结构1.

7、实现MODBUS_TCP SERVER 的硬件及软件配置1.1该项目选择LTI 公司的MOTION ONE PAC控制器(型号:LACP242,INTEL_ATOM CPU ,1.1GHZ)硬件资源:ETHERNET 10/100M 接口,软件CODESYS2.3 软件平台(图3) 图3.Codesys2.3软件配置平台1.2选择3S公司CODESYS2.3软件平台内的TCP/IP通讯库函数SyslibSockets.lib ,同时主要使用到的功能函数如下:SysSockInetAddr(ip):绑定指定的以太网接口的IP地址,控制器本体上的以太网端口的IP 地址SysSockHtons(po

8、rt):绑定以太网端口,MODBUS_TCP 通常使用502端口SysSockCreate(SOCKET_AF_INET,SOCKET_STREAM,0):Tcp/IP Socket的创建SysSockBind(socketId, ADR(), SIZEOF():Tcp/IP Socket绑定指定端口和IP 地址SysSockListen(socketId, 255):Tcp/IP Socket进行端口监听SysSockSelect(SOCKET_FD_SETSIZE, ADR(), 0, 0, ADR():TCP/IP client的选择SysSockAccept(socketId, ADR

9、(), ADR():TCP/IP Socket 接受client 设备的链接SysSockRecv(SocketHandle,ADR(),SIZEOF(),1):TCP/IP Socket 接收client 设备的数据包SysSockSend(SocketHandle,ADR(),(),1):TCP/IP Socket 返回数据包,发送至Client设备SysSockClose(socketId): 关闭TCP/IP Socket。1.3 MODBUS_TCP server的创建过程 创建MODBUS_TCP server的过程主要分为以下几个步骤:1.3.1 TCP/IP Socket库文件

10、的安装在CODESYS2.3软件平台的library manager 栏目下添加SyslibSockets.lib。之后则可以正常调用以太网通讯函数。1.3.2 申明各种通讯参数变量及数据结构,例如MODBUS_TCP SERVER IP地址及端口,收发数据的数组: Var_Global addressPointer:POINTER TO SOCKADDRESS; address:SOCKADDRESS; ip:STRING:=192.168.39.100; (*控制器本体 IP 地址*) port: WORD:=502; (*MODBUS-TCP 端口*) objectArray:ARRAY

11、0.6 OF REAL; tcp_connect_state:BOOL;(*TCP/IP连接状态字*)protocol_id:INT; (*协议标志ID,modbus id=00 00*) device_id:INT; (*设备站号ID*)END_VAR1.3.3 MODBUS_TCP SERVER 主程序说明。主程序结构框图及部分程序如下:主程序通过调用SyslibSockets.lib库内部的Sockets函数完成端口绑定,并实施对应端口的监听,当Modbus Tcp客户端请求建立连接时候,服务器端建立连接,并进行数据的交换读写,为了便于判断客户端和服务器端的连接状态,程序做了实时的报文刷

12、新,当通讯建立连接之后,服务器端没有接收到新的报文,且维持一段时间后,则按照通讯中断处理,关闭Sockets,并重新初始化参数,服务器端再次进入监听状态,这种控制模式可以辨识网络物理断线和客户端异常断开这些情况。address.sin_addr:=SysSockInetAddr(ip);IF terminate=FALSE THENCASE tcp_state OF0: socketId := SysSockCreate(SOCKET_AF_INET,SOCKET_STREAM,0); IF socketId SOCKET_INVALID THEN SysSockSetOption(socke

13、tId, SOCKET_SOL, SOCKET_SO_REUSEADDR, ADR(dwValue), SIZEOF (dwValue); tcp_state := 10; END_IF10:bResult := SysSockBind(socketId, ADR(address), SIZEOF(address);IF bResult THENtcp_state := 20;END_IF50:SocketHandle := SlaveSocketList.fd_arrayTCPindex;IF SocketHandle = socketId THENdiSize := SIZEOF(Addr

14、ess);SocketHandle:=SysSockAccept(socketId, ADR(Address), ADR(address);tcp_state := 100;END_IF100: (* SysSockSend(socketId,ADR(send),SIZEOF(send),1);*)SysSockRecv(SocketHandle,ADR(receive1),SIZEOF(receive1),1); IF protocol_id=0 AND device_id=0 AND receive110 THEN (*modbus_tcp,protocol_id=0*) frame_pr

15、ocess();tcp_state := 120; END_IF;END_CASE;END_IF;1.3.4 创建MODBUS_TCP SERVER 报文处理程序(部分子程序)当服务器端 接收到客户端的报文之后,经过了Modbus Tcp 协议ID和功能码有效性判断之后,调用报文处理程序,在报文处理程序中,主要是根据01,02,03,04,05,06,15,16 MODBU-TCP读写字,读写位功能码分别进行处理。例如进行写寄存器功能的处理时,先判断写入寄存器的起始地址和写入寄存器个数,再进行带地址偏移的赋值,在赋值过程中要进行高低字节的转换,以保证数据的正确性。Frame_process (

16、*MODBUS_TCP报文处理*) IF (send_do =FALSE )THEN CASE input_byte12 OF 03:(*读寄存器*) address_temp:=SHL(BYTE_TO_INT(input_byte13),8) + ( BYTE_TO_INT(input_byte14); FOR move_to_send:=address_temp TO address_temp+(length_temp)*2 DO output_byte4+move_to_send-address_temp:=mw_areamove_to_send+address_temp+1; END_

17、FOR; END_CASE; END_IF;2 .MODBUS_TCP server 的验证使用在MODBUS_TCP sever通讯程序完成之后,通过wireshark以太网抓包软件分析MODBUS-TCP报文,并使用Easybuilder800触摸屏软件实现了触摸屏和PAC控制器的MODBUS_TCP通讯。 图4. wireshark以太网抓包软件分析的MODBUS-TCP报文 图5. 使用Easybuilder800触摸屏软件配置通讯接口 图6. 使用Easybuilder800触摸屏软件监控控制器变量状态结论使用Codesys软件平台的sockets 编程可以实现PAC控制器和任意公开协议的以太网设备进行通讯,Codesys内部的库函数的功能丰富,PAC控制器通讯编程的灵活性远比PLC强大。参考文献:1 郝

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论