利用SerialPort实现上位机与PLC的串行通信资料下载.pdf
《利用SerialPort实现上位机与PLC的串行通信资料下载.pdf》由会员分享,可在线阅读,更多相关《利用SerialPort实现上位机与PLC的串行通信资料下载.pdf(2页珍藏版)》请在冰点文库上搜索。
梁剑兵(1961),男,山西岢岚人,法学学士,辽宁师范大学法学院副教授,硕士生导师。
刘霏雪(1983),女,辽宁法库人,辽宁师范大学法学院教育学硕士,研究方向:
法学教育。
利用SerialPort实现上位机与PLC的串行通信吴跃飞(聊城职业技术学院计算机系,山东聊城252000)
【摘要】利用C的SerialPort完成了在上位机和西门子PLC串行通信,这种方法与传统的通信方式相比,实用性强,通信简单快捷、可靠性高。
在工业自动化控制具有很重要的意义。
【关键词】c#;
SerialPort;
PLC;
串行通信引言在工业控制领域中,PLC作为一种高性能的现场控制装置,已广泛地用于各个领域,它具有卓越的可靠性和良好的抗干扰能力等优点但它也有自身的一些缺点,即PLC无法完成复杂的数据操作、运算与管理,不能为提供良好的用户界面,人机交互性能差,不利于操作者的操作及自动化处理。
而上位机恰好能弥补PLC的不足,它不但有很强的数据处理、运算能力和管理能力,而且能提供良好的用户界面又易于操作。
将PLC与上位机结合,两者相互操作,不但可使系统达到既能及时地采集、存储数据,又可进行数据的高级处理、运算与管理,达到管理、控制一体化。
两者结合的关键是PLC与上位机之间的通信,由于传统的通信方式主要是采用MSCOMM控件完成操作,这种方式有一个缺点就是在没有MSCOMM控件的机器上去部署的时会出错,这样还要去安装MSCOMM控件。
本文采用NET平台下的SerialPort实现PLC与上位机之间的通信,SerialPort具有丰富的与串行通信密切相关的属性及事件,提供了对串口的各种操作,并且在串口编程时非常方便,也容易去部署,而且在C语言中容易使用。
1.PLC通讯协议西门子公司的系列PLC因其具有功能强、速度快、扩展灵活等优点,在工业控制领域占据了重要地位,得到了十分广泛的应用。
1.1PPI协议西门子PLC与PC之间通信有很多种方式:
自由口,PPI方式,MPI方式,Profibus方式。
大多数使用自由口方式,自定义协议与PC通讯,需要编程者首先定义自己的自由通讯格式,在PLC中编写代码较为烦琐,占用PLC的软件中断和代码资源,而且无法对PLC进行监控,给PLC程序调试带来不便。
西门子PLC的编程通讯接口,内部固化的通讯协议为PPI协议,如果PC遵循PPI协议来读写PLC,就可以省略编写PLC的通讯代码。
PLC可以不用编程,而且可读写所有数据区,快捷方便。
1.2PPI协议格式西门子的PPI通讯协议采用主从式的通讯方式。
一次读写操作的步骤包括:
首先上位机发出读写命令,PLC做出接收正确的响应,上位机接到此响应则发出确认申请命令,PLC则完成正确的读写响应,回应给上位机数据。
这样收发两次数据,完成一次数据的读写。
(1)读写命令的数据格式。
读写命令的数据格式如下:
SDLELERSDDASAFCDASPSSAPDUFCSEDSD:
(StartDelimiter)开始定界符(68H)LE:
(Length)报文数据长度LER:
(RepeatedLength)重复数据长度SD:
(StartDelimiter)开始定界符(68H)SA:
(SourceAddress)源地址,指该地址的指针,为地址值乘以8DA:
(DestinationAddress)目标地址,指该地址的指针,为地址值乘以8FC:
(FunctionCode)功能码DSAP:
(DestinationServiceAccessPoint)目的服务存取点SSAP:
(SourceServiceAccessPoint)源服务存取点DU:
(DataUnit)数据单元FCS:
(FrameCheckSequence)校验码ED:
(EndDelimiter)结束分界符(16H)报文数据长度和重复数据长度为自DA至DU的数据长度,校验码为DA至DU数据的和校验,只取其中的末字节值。
在读写PLC的变量数据中,读数据的功能码为6CH,写数据的功能码为7CH。
读:
读命令是33个字节。
前面的0-21字节是相同的,为:
681B1B68206C32100000E004112A10。
读命令中从DA到DU的长度为27个字节。
从22字节开始根据读取数据的类型、位置不同而不同。
(见表1)写:
写命令是40个字节,前面的021字节为:
6823236802006C320100000000000E00000401120A10。
从22字节开始根据写入数据的值和位置不同而变化。
(见表2)
(2)PLC接收到读写命令,校验后正确,返回的数据格式为E5H。
2009年1月网络财富157网络财富EducationFrontIntemetfortune教育前沿(3)确认读写命令的数据格式为:
SDSADAFCFCSED其中SD为起始符,为10HSA为数据源地址DA为目的地址FC为功能码,取5CHFCS为SA+DA+FC的和的末字节ED为结束符,取16HSDSADAFCFCSED10H02H00H5CH5EH16H2.通讯编程实现C#是可用于创建要运行在NET上的应用程序的语言之一,它从C和C+语言演化而来,是Microsoft专门为使用NET平台而创建的。
因为C#是近期发展起来的,所以吸取了以前的教训,考虑了其他语言的许多优点,并解决了它们的问题。
使用C#开发应用程序比较简单。
C#的优点是,它是惟一为NETFramework设计的语言,是在移植到其他操作系统上的NET版本中使用的主要语言。
在Windows环境下开发与工业PLC通信的软件,在以前是用VB6.0的MSCOMM控件,而在NET中被升级为SerialPort。
利用该控件的操作很方便地实现串口通信。
2.1SerialPort的初始化SerialPort通信参数的初始化在窗体加载中完成,程序如下:
serialPort1.PortName=“com1”;
/打开串行端口1serialPort1.BaudRate=9600;
/设置波特率为9600bpsserialPort1.DataBits=8;
/8位数据位serialPort1.StopBits=System.IO.Ports.StopBits.One;
/1位停止位serialPort1.Parity=System.IO.Ports.Parity.None;
/无奇偶校验2.2发送指令如要读取VB100的数据,代码如下:
strcom=newbyte330x68,0x1B,0x1B,0x68,0x02,0x00,0x6C,0x32,0x01,0x00,0x00,0x00,0x00,0x00,0x0E,0x00,0x00,0x04,0x01,0x12,0x0A,0x10,0x01,0x00,0x01,0x00,0x01,0x81,0x00,0x00,0x00,0x00,0x00;
stringtemp=Convert.ToString(100*8,16);
/计算校验码for(inti=temp.Length;
i4;
i+)temp=“0”+temp;
strcom29=(byte)Convert.ToByte(temp.Substring(0,2),16);
strcom30=(byte)Convert.ToByte(temp.Substring(2,2),16);
intfc=0;
for(inti=4;
i=30;
i+)fc+=strcomi;
fc=fc%256;
temp=Convert.ToString(fc,16);
strcom31=(byte)Convert.ToByte(temp.ToString(),16);
strcom32=0x16;
serialPort1.Write(strcom,0,strcom.Length);
/发送指令2.3接受数据PC会接到两次数据,第一次是响应数据,第二次是真正的结果,代码如下:
privatevoidDataReceived(objectsender,System.IO.Ports.SerialDataReceivedEventArgse)intbytes=ComPort.BytesToRead;
/获取字节长度bytebuffer=newbytebytes;
serialPort1.Read(buffer,0,bytes);
/读取缓冲区的数据到数组if(buffer0=0xE5)/响应数据bytere=newbyte60x10,0x02,0x00,0x5C,0x5E,0x16;
serialPort1.Write(re,0,re.Length);
/发送确认命令elsenum=buffer25;
/真正数据3.结论随着PLC应用的日益普及,对PLC的监控和管理十分重要,在PLC与上位机的通信中,使用了一种新类SerialPort去解决,SerialPort较以前的MSCOMM有了明显的优化,在实际应用中只要掌握了上位机与PLC的通信协议,就可以开发出交互界面友好,功能强大的应用系统,满足现代自动化系统向信息化、网络化的转换。
参考文献1范逸之等.利用VisualBasic实现串并行通信技术M.北京:
清华大学出版社,2001.2黄植功.PC与PLC的串口通信及编程实现J.广西物理,2007,28(3):
35-38.3王生发,潘敏.VB下PLC与PC的通信在工业机器人监控系统中的应用J.机电工程,2001,18(6):
35-37.注:
此论文为山东省教育厅2008年第三批科研发展计划立项课题(课题编号:
J08LJ60)。
作者简介:
吴跃飞(1980),男,山东聊城人,聊城职业技术学院计算机系教师。
表1字节2223242526272829303132功能读取长度数据个数存储器类型存储器偏移量指针校验结束读q0.00100010000820000006416读m0.00100010000830000006516读M0.10100010000830000016616读SMB34020001000005000110F916读VB1000200010001840003208B16读VW1000400010001840003208D16读vd1000600010001840003208F16读i0.50100010000810000056816读i0.70100010000810000076A16表2字节22232425262728293031323334353637383940写入位置及值长度数据个数存储器类型存储器偏移量指针位数值校验码结束符M0.0=10100010000830000000003000101007116M0.0=00100010000830000000003000100007016M0.1=10100010000830000010003000101007216vb100=10020001000184000320000400081000AE16vb100=FF02000100018400032000040008FF009D16VW100=FFFF04000100018400032000040010FFFFA616VD100=FFFFFFFF06000100018400032000040020FFFFFFFFB816