资源描述
用VC实现微机与PLC在以太网中的通讯*
(扬州大学信息工程学院电气工程系,扬州 225009)
摘要:介绍了一个使用Visual C++的Socket与OMRON PLC之间的通讯程序,并成功地应用在自动控制系统中,主要实现上位机与OMRON PLC之间的以太网通讯,并对它们之间的通讯协议作了描述,文中所介绍的通讯程序的设计方法具有一定参考价值。
关键词:可编程逻辑控制器,以太网,FINS,控制系统。
A Kind of Communication Program Between Host and OMRON PLC With VC in Ethernet
Cao Wei SHI Wang-wang CHEN Hong
(Information Engineering College of Yangzhou University, Yangzhou 225009,China)
Abstract: A kind of communication program developed with VC is introduced, which is successfully applied in the automatic control system, and mainly carry out the communication between host and OMRON PLC. The communication protocol between them is dealt with in detail. The design method of communication program has some reference value.
Keywords: PLC Ethernet FINS control system
1、引言
在分布式计算机监控系统中,PLC是常用的现场控制设备,PLC和微机之间的通讯常采用RS-232/RS-485串行通讯方式,这种方法对于数据量较大、通讯距离较远、实时性要求高的控制系统很难满足通讯需要。工业以太网特别是交换式以太网已经广泛用于工业控制中,是工业控制中的发展趋势。许多大型PLC厂商生产的PLC都配备了相应的以太网通讯单元,本文讨论OMRON PLC的以太网通讯体系结构,并以CJ1G型PLC的以太网模块ENT11为例实现与微机的通讯,上位机利用Visual C++的CAsynSocket类的UDP协议实现了微机和PLC以太网模块之间的FINS通讯,程序实现简单,并给出了核心程序。
2、PLC的网络体系结构与FINS协议
2.1 FINS协议与TCP/IP协议
OMRON公司的ETN11型以太网单元支持10Base-T型以太网,网络层和传输层采用TCP/IP和UDP/IP协议,应用层协议支持FTP、SMTP和FINS(Factory Interface Network Service),FINS通讯协议是OMRON开发的用于工厂自动化控制网络的指令/响应系统,使用FINS指令,且可实现网络间的无缝通信。网络对于每个系统层次都是有效的,用于信息
层的Ethernet,用于控制器层的Controller Link网络和用于器件层的DeviceNet(CompoBus/D),而且在Ethernet和Controller Link网络之间的通信,能够在三个网络层次间进行,像一个网络一样方便。使用FINS指令,上位机程序或PLC用户程序通过指令就能够读取另一个PLC数据区的数据,简化了用户程序。
以太网通讯使用IP地址,而FINS通讯使用节点号,节点号为以太网和Link网之间提供了一致的寻址方式,以太网单元能在IP地址和节点号之间转换,转换方式有自动转换、IP地址表和复合地址表。FINS通讯与TCP/IP协议之间的关系见图1。
图1 FINS协议和TCP/IP协议之间的关系
FINS帧本质上属于链路层,为了能利用TCP/IP协议传输FINS帧,将FINS信息作为UDP的数据区,封装在UDP中,从TCP/IP协议的角度看FINS信息,属于应用层数据。如果在PLC上安装以太网单元和Link通讯单元,就可以实现以太网和Link网之间的数据转发过程如图2所示。
图2 利用FINS中继的过程
图中,上位机发出带有FINS信息的以太网帧被中继PLC的以太网单元接收后,层层分解,直到抽取出FINS信息后,通过Link通讯模块转发FINS信息,目的PLC收到数据后作出响应,响应数据也采用FINS格式的数据,中继PLC收到数据后,转发给以太网单元,由以太网单元进行封装后与上位机通讯,上位机也作为以太网网段中的一个节点,也有相应的节点号和相同的地址转换规则。
2.2 FINS帧格式
在PLC之间采用FINS协议中的SEND、RECV或CMND命令进行数据通讯时,上述封装和分解过程在通讯模块内部自动实现,但对于上位机和以太网单元之间的通讯,FINS的报头和命令应由上位机程序添加,而UDP的报头由Socket自动完成。FINS报头的格式见图3。
图3 FINS报头格式
ICF为信息控制域,主要用于标明命令和响应,RSV为系统保留,GCT为网关允许数目,DNA为目的网络号,DA1为目的节点号,DA2为目的节点单元,用于标明CPU还是CPU总线单元,SNA为源网络号,SA1为源网络节点号,对应上位机IP地址的主机部分,SA2为源节点单元,对上位机而言应为00,SID为服务和响应的标识,可任意设置,命令和响应有相同的数值,MRC和SRC为FINS命令的主命令和从命令,Data域为数据区,用于标明读数据时的地址范围或写数据时的地址和数据。
2.3以太网单元的设置
通讯测试前必须首先登记I/O表,可以用CX-Programmer软件在编程模式下自动登记I/O表,还要设置IP地址、子网掩码、设置CPU总线单元、地址转换方法、FINS的UDP端口号,FINS UDP端口号缺省为9600。以太网单元属于CPU总线单元,单元号旋转开关设定一个十六进制数,作为以太网单元的单元号,范围为00~15,它决定了分配给以太网单元相应的内存工作区(CIO区、DM区)。节点号通过两个旋转开关设定两位十六制数,作为以太网单元在网络中的节点号,范围为01~126。以太网单元进行通信前,必须使用编程设备如CX-P对以太网单元进行设置。内存工作区分配CIO区和DM区中的字按照单元号分配给每个单元,每个单元在CIO区中分配25个字,在DM区分配100个字。如果设为0号单元则分配CIO1500~CIO1524共25个字,D30000~D30099共100个字。
跨网通讯时,必须对每一个节点建立路径表,路径表包括本地网络表和中继网络表。本地网络表提供了安装在PLC单元上的通讯单元的单元号和网络号,中继网络表包括终点网络、中继网络和中继节点三项内容,用于FINS通讯时的数据转发。
三、上位机通讯程序设计
为实现上位机的TCP/IP通讯,采用Socket编程。考虑到实现的效率,采用了较低层次的异步WinSock即MFC中的CAsyncSocket类实现。在编程时首先从CAsyncSocket类派生出CUDPSocket类,在程序初始化时创建CUDPSocket类的实例。
BOOL COMRONTestDlg::OnInitDialog()
{
CDialog::OnInitDialog();
psock1=new CUDPSocket;
psock1->Create(PC_PORT,K_DGRAM);
…
}
当用户发出读取PLC数据的命令时,相应的消息处理函数作出响应,读取命令参数,将ASCII命令转换成二进制数据,进行FINS报头的封装,调用CUDPSocket的发送函数进行命令的发送,要程序为:
m_sendData.MakeUpper(); //将命令字符转换成大写字母;
AsciitoB((LPCSTR)m_sendData,bcommand,m_sendData.GetLength()); //ASCII转换二进制
psock1->SendTo(bcommand,m_sendData.GetLength()/2,
m_PortNoPLC,m_IPAddressPLC); //调用Socket发送
对于接收程序,在CUDPSocket中建立接收消息响应函数,当有数据到来时,该函数作出响应,主要任务为读取缓冲区数据,将二进制数据转换ASCII字符,用于界面显示,同时进行数据定位和数据的处理,要程序如下:
void CUDPSocket::OnReceive(int nErrorCode)
{
COMRONTestDlg* pDlg=(COMRONTestDlg*)::AfxGetMainWnd(); //获取主窗口指针
char pbin[4096]; //分配缓冲区
int nLenhth=pDlg->psock1->Receive(pDlg->pRevBuf,4096); //读取缓冲区数据
pDlg->BtoAscii(pDlg->pRevBuf,pbin,nLenhth); //二进制转ASCII码
pDlg->m_RecvEdit.SetWindowText(pbin); //显示数据
…… //其它数据处理
CAsyncSocket::OnReceive(nErrorCode);
}
四、结束语
运用VC++异步套接字类CAsyncSocket与OMRON PLC进行以太网通讯,由于以太网单元采用广泛使用的TCP/IP协议,上位机程序设计简单,除了进行FINS报头拼装,其它过程与微机之间的TCP/IP程序设计完全一致,用VC设计的程序具有实时性好、速度快、可靠性高、运行稳定等优点,此方法已成功应用工程项目中。控制系统中采用以太网单元通讯后,使工业自动化与生产管理自动化有机地结合到了一起,简化了系统设计。
参考文献:
[1] 李炳宇,萧蕴诗. 以太网在网络控制系统中的应用与发展趋势[J]. 微型机与应用,2002.11
[2] CJ1W-ETN11(10Base T) Ethernet Units Operation Manual[M]. 2001.5
[3] 宫叔贞,王冬青. 可编程控制器原理及应用[M]. 人民邮电出版社,2002.7
5
展开阅读全文