vs编程软件基于MFC的计算机与PLC以太网通讯软件开发
燕科帆;朱厚耀;林贺邦;李嘉龙
【摘 要】近几年随着网络软件开发技术越来越成熟,网络软件的开发与设计变得非常重要.传统工业控制领域,上位机基本上都使用控制器配套的组态软件,这种方式往往价格昂贵,并且通信协议不公开而受到限制,不适合许多低需求和高灵活度的企业,因此自主开发上位机软件变得非常有必要.在VS2013 IDE编程环境下,利用MFC封装的CSocket类,开发了基于ModbusT?CP协议的上位机基础通讯软件,用来和ABB AC500系列PLC进行以太网通讯.
【期刊名称】《机电工程技术》
【年(卷),期】2018(049)010
【总页数】4页(P126-129)
【关键词】ABB PLC;ModbusTCP协议;CSocket;MFC
【作 者】燕科帆;朱厚耀;林贺邦;李嘉龙
【作者单位】广州大学机械与电气工程学院,广东广州 510006;广州大学机械与电气工程学院,广东广州 510006;广州大学机械与电气工程学院,广东广州 510006;广州大学机械与电气工程学院,广东广州 510006
【正文语种】中 文
【中图分类】TP273.5
0 引言
在整个上位机软件的开发过程里面,最重要的部分是上位机对于下位机的数据监测,这就要解决二者之间的通信问题,实现稳定的通信才能稳定地进行数据监测和数据交换。传统的通信方法是采用RS-232C或者RS-485串行方式,但是随着对于传输数据量、设备之间的传输距离以及通信的实时性要求越来越高,传统的串行通信方式慢慢的不能满足大部分企业的要求[1]。同时,由于国际上现场总线的标准非常多,导致难以实现控制系统集成的统一。所以国际上大部分厂商开始将生产的PLC与以太网技术进行结合,PLC控制器与基于TCP∕IP的以太网结合,可以实现开放、分散的工业控制系统,按照相关的协议就可以进行PLC与计算机的通讯[2]。
1 ABB AC500系列PLC通讯功能
1.1 概述
AC500系列是ABB公司新一代的模块式可编程控制器,是一款可升级的,灵活的自动化控制系统。系统的构建采用底板组合模块的结构。硬件上可选用的模块有CPU模块和底板、I∕O模块和底板、FBP总线适配器和底板以及通讯模块等,以上的各种模块均有许多型号,每种型号对应的配置都不一样,可以根据实际的需求选型。不同的CPU模块插在CPU底板上,不同的I∕O模块插在I∕O底板上,直接拼接在CPU底板的右侧,通过I∕O总线进行数据交换,其他的模块也是采用拼接的方法插在底板上,示例如图1所示。通讯模块有四种型号,分别是CM572-DP:PROFIBUSDP主站通讯模块、CM575-DN:DeviceNet主站通讯模块、CM577-ETH:以太网通讯模块、CM578-CN:CANopen主站通讯模块。
以太网通讯模块支持的协议包括TCP∕IP、UDP∕IP和Modbus TCP。其中本文的通讯采用基于Modbus TCP协议的以太网通讯,AC500的以太网通讯模块集成了“MOD⁃BUSon TCP∕IP”协议,所以可以通过Ethernet(以太网)进行MODBUS通讯[3]。
图1 AC500系列PLC硬件组成
1.2 Modbus/TCP协议简介
Modbus通信协议是全球最早用于工业现场的总线规约,由Modicon公司在1979年发明。由于免费发布,并且采用主从通信模式(Master∕Slave通信模式),在分散控制方面应用广泛,从而在全球得到了广泛的应用。Modbus通信协议具有串口和以太网多种版本,其中比较著名的是Modbus RTU、Modbus ASCII和 Modbus∕TCP 三种。其中Modbus∕TCP协议是通过一种简单的方式将Modbus帧嵌入到TCP帧中而形成的,由于TCP是基于可靠连接的服务,所以在Modbus TCP协议中没有CRC校验码,从而简化了协议的内容。
Modbus∕TCP数据帧的组成简单分成三个部分,分别是报文头、功能代码和数据。如图2所示。
图2 Modbus∕TCP数据帧
MBAP报文头分为四个域,一共七个字节。1、2字节是传输标志,标志某个Modbus询问∕应答的传输;3、4字节是协议标志,表示协议的种类;5、6字节是长度,表示后续字节的长度计数;7字节是单元标志。
功能代码共有三种类型,分别是公共功能代码、用户自定义功能代码和保留的功能代码。本文所用到的为公共功能代码,分别是十进制的03(读多个寄存器)和十进制的16(写多个寄存器)。其余的常见公共功能代码见表1所示[4]。
表1 Modbus常用公共功能代码位操作16位操作功能码(十进制)02 01 05 15 04 03 06 16常见功能代码读输入点读线圈写单个线圈写多个线圈读输入寄存器读多个寄存器写单个寄存器写多个寄存器
2 MFC CSocket类简介和通讯流程
2.1 MFC CSocket简介
MFC(Microsoft Foundation Classes)是微软基础类库,是一个C++的类库,封装了大部分windows API函数。它提供了两个类,这两个类都封装了socket,分别是CAsync⁃Socket和CSocket,CSocket是CAsyncSocket子类,二者的区别在于CAsyncSocket是异步套接字,而CSocket是同步套接字。
使用MFC的socket类可以从这两个socket类中继承出自己的socket类,再根据需求增加所
继承的socket类功能。如果需要使用这两个socket类,一定要从这两个类中继承出自己的socket类,通过修改虚函数来实现特定基本功能。有了这两个类就可以方便的处理同步与异步问题。
本文采用的是CSocket类,需要实现的功能是读写数据,因此需要用到的虚函数为OnReceive(),需要对该虚函数进行重载。当有一个socket向CSocket继承类发送数据的时候,CSocket继承类的OnReceive()虚函数会被自动执行,因此接收数据可以在OnReceive()虚函数里通过定义的Receive()函数来实现。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。