基于C#的OMRON PLC 以太网通讯接口实现
陈雪娇,韦莉莉
(华南理工大学广州学院,广东 广州 510800)
摘  要:本文介绍了一个使用C#的Socket 与欧姆龙PLC 的以太网模块的通信程序。首先介绍了Socket 服务和Socket 在TCP/
IP 协议下的通信流程。再以欧姆龙CP1H 型PLC 为例,使用C#语言编写通信软件,实现了PLC 与工控机之间的数据通信。该方法可扩展到欧姆龙的其他型号PLC。
关键词:C#;欧姆龙PLC;以太网通讯
中图分类号:TP273+.5    文献标识码:A    文章编号:1003-7241(2018)01-0052-04
Implementation of PLC OMRON Ethernet
Communication Interface based on C#
CHEN Xue-jiao, WEI Li-li
( Guangzhou College of South China University of Science and Technology, Guangzhou 510800 China )
Abstract: This paper describes a communication program using Socket’s C# and OMRON PLC Ethernet module. Firstly, the
communication flow of Socket service and Socket in TCP/IP protocol is introduced. Then take the OMRON PLC type CP1H as an example, using the C# language to write the communication software, realizes the data communication between PLC and industrial control computer. The method can be extended to other models of OMRON PLC
Key words: C#; OMRON PLC; Ethernet communication
收稿日期:2016-10-10
1  引言
在上位机数据监测软件的开发过程中,首要解决上位机和底层设备间的通信问题。只有实现与底层设备稳定的通信,才能与底层设备实现数据交换,从而实现监测软件对工业现场数据的采集和控制[1]。过去,在工程项目开发中,PLC 和上位机间的通信常采用RS-232C 或者R S -485串行方式,这种方法很难
满足数据量大、通信距离远、实时性要求高的控制系统[2-3]。以TCP/IP 协议为基础的以太网在工业控制中逐渐获得了广泛的应用,并可以很方便的进行网络互联。本文以欧姆龙C P1H 型PLC 为例,探讨了网络通信的方式,用C#编写了上位机通信程序,完成了PC 和欧姆龙PLC 的通信。
2  Socket 通讯服务和通信流程
2.1  Socket 通讯服务
欧姆龙PLC 的以太网模块支持两种通信方式:Socket 通信和FINS 通信。通过TCP 或者UDP 协议,Socket 服务允许以太网上的设备发送和接收各种数据。S o c k e t 服务提供了两种实现的方法。
(1) 操作特定的控制开关[4]
首先设置D M 区中的请求参数,然后打开内存中特定的控制开关来请求TCP 或者UDP Socket 服务。当请求的过程完成之后,以太网单元就把请求开关关掉。数据的发送和接收,都是自动进行的。
使用这种方法不需要执行C M N D (490)指令,也不需要监视完成的时序和指令的执行过程,于是可以大大简化梯形图的编制。
总共8个TCP 或者UDP 端口可以被用作Socket 服务。 (2) 执行CMND(490)命令
使用Socket 服务的另一种方法是从CPU 单元向以太网单元发送FINS 命令,当以太网单元接收到Socket 服务请求时,向C P U 单元返回响应以确认请求,然后
对请求的服务进行处理。当处理过程结束之后,结果放在CPU 单元的结果存储区。同样可以使用8个TCP 端口和8个UDP 端口。
2.2  Socket 通讯流程
S o c k e t 建立在传输层协议(T C P 和U D P )之上,由于T C P 面向连接,U D P 是无连接的,因此,利用Socket 进行通信,有两种方式:面向连接的和无连接的。在第一种方式下,两个通信的应用程序之间必须先建立一种虚拟的连接,然后再传输数据。第二种方式也称数据报文方式,在此种方式下,传输过程中,数据有可能丢失,先发送的数据也可能后到,各个报文的路径也不定相同
[5、6]
。本文采用面向连接的通信方式,读数据的
流程如图1所示。写数据的流程和读数据的流程是一致的,把图1中读数据的模块改为写数据模块即可。
3  欧姆龙PLC 配置
在进行通讯前需要对欧姆龙P L C 进行配置,通讯模块采用欧姆龙公司生产的型号为C P1W -C I F41以太网通讯模块,C P1H 模块上有两个扩展口,根据以太网模块插入的位置需要对CP1H 进行不同的配置:
socket通信报文格式
(1) 当CP1W-CIF41模块安装在第一个扩展口时,将CP1H 上的4号DIP 开关置ON
(2) 当CP1W-CIF41模块安装在第二个扩展口时,将CP1H 上的5号DIP 开关置ON。
4  具体的程序实现
通过安装选装Ethernet 通信单元,加上SOCKET 服务,可实现在以太网下的高速稳定的数据读写功能。而在
C#中,System.Net.Sockets 命名空间为需要严密控制网络访问的开发人员提供了Sockets 接口的托管
图1  读数据流程
实现。System.Net命名空间中的所有其他网络访问类都建立在该套接字Socket实现之上,如TCPClient、TCPListener和UDPClient类封装有关创建到Internet 的TCP和UDP连接的详细信息;NetworkStream类则提供用于网络访问的基础数据流等。具体实现程序如下文所述。
4.1  TCP网络连接
定义TCP客户端及数据流:
TcpClient  mClient
NetworkStream mStream
连接时C#程序作为客户端,PLC作为服务端,所以T C P客户端需要绑定本机i p地址及端口:m C l i e n t =new TcpClient(new IPEndPoint(LocalipAddress, LocalPort))
TCP连接需要加入超时判断,采用异步操作方式进行: ManualResetEvent TimeoutObject=new Manual
ResetEvent(false)//可控制线程事件mClient.BeginCo nnect(RemoteIP,RemotePort,new Async Callback(Ca llBackMethod),mClient)
//开始连接,调用异步操作判断
if (TimeoutObject.WaitOne(1000,false)
) //1S内超时判断
{//连接判断} //异步操作方法
private void CallBackMethod(IAsyncResult asyncresult)
{try
{IsConnectionSuccessful=false;
TcpClient tcpclient=asyncresult.Asyn cState as TcpClient;
if (tcpclient.Client !=null)
{
tcpclient.EndConnect(asyncresult);
IsConnectionSuccessful=true;}}
catch(Exception ex)
{IsConnectionSuccessful=false;
SocketException=ex;}
finally
{TimeoutObject.Set();
//事件设为终止,允许线程继续}}
4.2  PLC连接
在TCP连接正常后,使用数据流与PLC进行数据交换
try{mStream=mClient.GetStream();
mStream.Write(mSendArray,0,mSendArray. Length);}
catch (Exception) {return -1;}
发送数据流后,对回复进行超时判断,1S内无回复则认为超时
int time_Count=int.Parse((timeGetTime()+ 1000L).ToString());
while (true)
{Thread.Sleep(1);
if (time_Count<(int)timeGetTime())
{return-2;}
if (mClient.Available>=24)
{break;}}
收到回复后对回复内容进行读取
mStream.Read(mRecieveArray,0,32)
4.3  读PLC数据
读数据也是采用数据流方式进行,与连接P L C不同的是数据流最后需要加上读取P L C数据的起始地址内容及从起始地址往后多少个数据地址。
mSendArray[28]=(byte)Memory;
mSendArray[29]=(byte)(Channel/256);
mSendArray[30]=(byte)(Channel%256);
mSendArray[31]=0;
mSendArray[32]=(byte)(Count/256);
mSendArray[33]=(byte)(Count%256);
发送数据流后的超时判断与连接P L C一致,收到回复内容后需要对数据进行无符号转有符号的操作: private short UnsignToSign(int Unsign)
{if(Unsign>32767)
{return (short)(Unsign-65536);}
else{return(short)Unsign;}}
需要注意的是,返回的数据是以两个字节表示一个数据:
mReciveData[i.ToString())]=(int)(mRecieve Arra y[i]*256+mRecieveArray[i+1]);
4.4  对PLC写值
写数据也是采用数据流方式进行,同样可以对多个连接的PLC地址进行写值:
mSendArray[29]=(byte)(Channel/256);
mSendArray[30]=(byte)(Channel%256);
mSendArray[31]=0;
mSendArray[32]=(byte)(Count/256);
mSendArray[33]=(byte)(Count%256);
在数据流最后加上需要写的具体值,同时需要将数据值进行由有符号转无符号作:
private long SignToUnsign(short Sign)
{if (Sign>= 0){return (long)Sign;}
else
{return (long)(65536+Sign);}}
同样,写值时是将两个字节转化成一个数据值写入: mSendArray[i]=(byte)(mSendData[i/2]/256);
mSendArray[i+1]=(byte)(mSendData[i/2]%256);
5  结束语
本文件介绍了在T C P协议下如何使用C#编程语言对欧姆龙P L C进行数据读写操作,依靠C#编程语言的简便性及s o c k e t服务的通用性,实现了对欧姆龙
PLC数据的读写操作,最后需要说明一点,C#编程语言自身带有内存回收机制,在关闭软件时,所有资源会
作者简介:陈雪娇(1982-),女,讲师,研究方向:嵌入式技术的应用。
以某辆在线列车为例,车载终端接收列车的主要信息,进行数据缓存打包后,通过GPRS网络将数据报文发送到远程监测中心服务器,服务器将数据进行解压并在终端设备上显示,结果如下图4所示,经核对与采集数据相一致,验证了车载终端方案的可行性。
图4  单列机车主要信号显示
7  结束语
车载终端的合理设计关系到整个远程监测系统的稳定运行,本文以嵌入式工控机为核心处理部件,结合G P R定位和G P R S无线通信功能,实现了车载终端对机车信号采集与传输功能,试验验证方案具有一定可行性。另外,随着列车运行速度的提升,对车载终端的性能和稳定要求将会更高,车载终端的双系统冗余设计将自动释放,但在程序未关闭时多次使用socket服务连接PLC时,在每次连接结束后需要手动释放资源,否则可能导致无法连接。
参考文献:
[1] 徐彪,朱健铭,蒋朝阳等.通用型工业级数据采集和监控系统设计[J].计算机测量与控制,2014,22(10):3192-3195.
[2] 曹卫,史旺旺,陈虹.OMRON PLC在以太网中的通信及实现[J].测控技术.2004,23(l2):50-51.
[3] 张雪平.OMRON PLC网络与通信[J].微计算机信息(测控自动化),2005,21(4):66-67.
[4] OMRON.OMRON PLC CS1W-ETN01 Ethernet Unit Operation Manual[Z].February,1999,19-20,27-28.
[5] 王德力,刘希宝.S o c k e t编程技术[J].辽宁师专学报.2002,4(2):42-43.
[6] 杨大全,拱长青,董伟嗣等.Socket编程技术[J].沈阳工业大学学报,2000,22(4):313-316.
成为未来重要研究方向,双系统冗余设计可保证在单个系统发生故障时,车载终端仍能保证正常运行,系统可靠性可得到大幅度提升。
参考文献:
[1] 丁莉萍.机车信号监测系统联网应用研究[J].上海铁道科技,2011,(2):23-25.
[2] 贾晓宇.机车信号远程监测系统的开发与应用研究[J].铁路通信信号工程技术,2007,4(3):6-8.
[3] 韩晓东.基于GPS和GPRS的车辆定位监控系统的研究[D]. 南宁:广西大学,2010:7-18.
[4] 温宗周,陈改霞.基于GPS/GPRS的远程车辆管理系统的设计[J].电子测量技术,2013,(8):30-31.
[5] 林瑜绮.机车信号车载系统和站内电码化[M].北京:中国铁道出版社,2008:152-160.
[6] 杨建华,袁雪尧.基于GPRS的嵌入式数据采集与远传系统[J].微计算机信息,2011,(1):123-124.
[7] 李相文,土晓明,周玲.基于
G P S的列车监控系统
的设计与实现[J].铁路计算机应用,2014,13(11):37-38.
(上接第51页)
作者简介:徐奕 (1972-), 女,实验师,研究方向:铁道通信信号。

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