基于LabWindows/CVI和PLC自由口编程的串口实时通信系统研究

2017-07-01 18:01王淑贞高晓辉王玉婷乌海职业技术学院机电工程系内蒙古乌海06000北京航空航天大学自动化科学与电气工程学院北京009中国石油华北油田分公司勘探开发研究院河北任丘0655
组合机床与自动化加工技术 2017年4期
关键词:波特率PC机字符

王淑贞,高晓辉,王玉婷(.乌海职业技术学院机电工程系,内蒙古乌海06000;.北京航空航天大学自动化科学与电气工程学院,北京009;.中国石油华北油田分公司勘探开发研究院,河北任丘0655)

基于LabWindows/CVI和PLC自由口编程的串口实时通信系统研究

王淑贞1,高晓辉2,王玉婷3
(1.乌海职业技术学院机电工程系,内蒙古乌海016000;2.北京航空航天大学自动化科学与电气工程学院,北京100191;3.中国石油华北油田分公司勘探开发研究院,河北任丘062552)

采用PLC自由口编程方法来实现与工控机客户端软件的实时通信,至今没有被广泛研究和开发,在工程上应用案例很少。文章讨论了西门子S7系列PLC与虚拟仪器开发软件LabWindows/CVI的通信原理和通信方式的基础上,创新性地采用PLC自由口编程方法,自定义上下位机通信协议,通过串口实现上下位机的实时通信。该通信实现方案硬件需求小,经济实用,简单灵活,适用于控制节点较少以及对通信速率要求不高的场合。

可编程控制器;LabWindows/CVI;自由口通信

0 引言

工业现场广泛采用工控机(PC)和可编程控制器(PLC)组成上下位机的控制方案来实现数据采集和控制[1-2]。常用的上位机开发软件包括LabWindows/ CVI、Labview等虚拟仪器软件,Intouch、WinCC等组态监控软件和Matlab、VC等编程软件直接开发[3-6]。其中LabWindows/CVI是基于C语言开发设计,因其具有功能强大、功能面板和库函数丰富、编程灵活方便且可扩展性强等优点得到了广泛的应用[7-9]。PLC以微处理器为核心,将微型计算机技术、自动控制技术及网络通信技术有机地融为一体,是一种同时具备逻辑控制功能、过程控制功能、运动功能、数据处理功能和联网功能的多功能控制器,具有故障率低、可靠性高、编程简单、使用方便、易于扩展等优点[10-11]。采用Lab-Windows/CVI建立一个良好的人机交互界面实现界面管理、运行管理、文件管理和参数配置管理形成上位机,完成与用户的交互操作;采用PLC作为下位机实现数据采集和设备管理控制,而PLC和LabWindows/ CVI之间实时可靠的数据通信是实现此控制系统功能的关键[12-14]。因此,本文在研究西门子S7-200系列PLC与PC机通讯方式的基础上选择自由口通讯,通过分别设计PLC和LabWindows/CVI的自由口通讯接收程序实现PLC与PC机的实时通讯,并在实验条件下进行验证,对于形成LabWindows/CVI和PLC的上下位机测控系统,实现友好、便捷的人机交互控制具有重要意义。

1 PLC与PC机的通信方法

1.1 西门子S7-200系列PLC通信协议

S7-200系列PLC系统具有强大而灵活的通信能力,可以采用PPI(点对点接口)通信、MPI(多点接口)通信、以太网通信(需扩展CP243-1模块),PROFIBUSDP通信(需扩展EM277模块)、自由口通信等。

自由口通信是S7-200PLC基于RS485硬件基础上的一种“自由”通信方式,通信功能完全由用户程序控制,所有的通信任务和信息定义均通过用户编程实现。它允许用户程序控制PLC的通信端口,通过接收中断、发送中断、字符中断、发送指令XMT和接收指令RCV编写用户自己的通信程序,实现用户自己定义的通信协议。通过自由口通信,PLC可以与许多通信协议公开的设备、控制器进行通信,如条形码阅读器,打印机,调制解调器,西门子PLC,非西门子PLC等。

S7-200系列PLC也可以采用自由口编程方法与PC机客户端软件通信。通过设置定时器,PLC实时将采集的数据发送给上位机处理,同时实时接收上位机生成的控制指令并执行控制任务。由于可以自定义通信协议,自由口编程方法相对灵活多变。通过自由口编程,LabWindows/CVI软件可以方便的访问和读取S7-200系列PLC的内存数据,这也是PC机上其他客户端软件访问S7-200系列PLC简便而廉价的方法。

1.2 PLC与PC机的硬件连接

PC机上一般都内置RS-232通信端口,西门子S7-200系列PLC内部集成的PPI接口的物理特性为RS-485串行接口。采用PC/PPI通信电缆连接上下位机,作为RS-232和RS-485的转换器,便可实现上下位机的硬件连接。将PC/PPI电缆有“PC”标记的RS-232端连接到计算机的RS-232通信接口上,将标有“PPI”标记的RS-485端连接到PLC的通信口上,再在PLC编程软件STEP7-Micro/WIN32上设置好通信参数便可。要注意的是,通讯电缆上的DIP开关选择的波特率应与STEP7-Micro/WIN32里设置的波特率一致。通信双方必须遵守相同的串行通信协议,包括数据格式、同步方式、传送速度、传送步骤、纠错方式等。通常设定8个数据位,无奇偶校验位,1个起始位,1个停止位,波特率9600b/s。

2 PLC与PC机通信程序设计

2.1 下位机通信程序设计

西门子S7-200自由口通信是基于RS485通讯基础上的半双工通讯,因此发送和接收指令不能同时执行。在自由口模式下,必须先定义好工作模式,即控制字组态,通过ATCH指令和DTCH指令进行中断设置,对中断状态进行判断,然后使用XMT发送指令和RCV接收数据。对于端口PORT0,需要设置的内容包括对SMB30进行设置端口选择,波特率设置,校验设置,对SMB87,SMB89,SMB90,SMB94进行缓冲区设置等。

2.1.1 PLC发送程序

使用XMT发送指令可以把存于缓冲区的数据,一次发送一个或多个字节的数据,最多为255字节。如图1~图3,在发送主程序中,第一个扫描周期将SMB30设置为9,表示选择自由口模式,波特率9600b/s,无校验方式,每个字符8位,将SMB34设置为200,表示定时中断10定时周期为200ms,并开总中断。当定时时间到,转入中断程序0。在中断程序0中,往PORT0发送3个字符,分别是16#DD、10和16#FF。PORT0发送完中断9之后转入中断程序1,在中断程序1中关闭中断事件9和10。发送帧数据如表1所示。

图1 PLC发送主程序梯形图

图2 PLC发送中断程序1梯形图

表1 PLC发送帧数据

2.1.2 PLC接收程序

使用接收指令(RCV)一次可以从PORT0或PORT1接收一个或多个字节的数据,最多为255字节,并存于数据缓冲区。接收完之后会产生接收中断事件23。如图4的PLC接收程序中,将SMB30设置为9,表示选择自由口模式,波特率9600b/s,无校验方式,每个字符8位。定义接收信息控制字SMB87为2# 11110000表示允许接收信息功能,定义起始字符SMB88为16#DD,定义结束字符SMB89为16#FF,定义接收最大字符数SMB94为200ms。利用ATCH命令连接PORT0发送完中断事件23,并开总中断。利用RCV命令从PORT0中读入数据,并存于VB100开始的连续地址中。接收完数据后,将转入中断程序,在中断程序中完成数据译码工作并关闭中断。接收缓冲区格式如表2所示。

表2 PLC接收帧数据

图3 PLC发送中断程序0梯形图

图4 PLC接收程序梯形图

2.2 PC机LabWindows/CVI的串行接口程序设计

在本系统中,采用LabWindows/CVI作为PLC的人机控制界面。LabWindows/CVI是以ANSI C为核心的交互式软件开发平台,具有丰富的库函数,其中RS232函数库包括以下几类函数:串行口打开/关闭(Open/Close)函数,串行口输入/输出(Input/Output)函数、串行口控制(Control)函数、串行口状态查询(Status)函数、串行口事件处理(Callbacks)函数。

2.2.1 通信口的初始化

在源程序Main函数中,在打开面板之前添加OpenComConfig(1,″″,9600,0,8,1,512,512)函数,打开串口并进行初始化。包括设置端口号为1,波特率9600b/s,无奇偶校验,数据位为8位,1位停止位,输入队列长度为512字节,输出队列长度为512字节。

2.2.2 通信口接收数据

用ComRd()命令定时从串口输入队列中读取下位机数据包,再用SetCtrlVal()或PlotStripChart()函数将数据进行图形化显示。采用定时器不断查询和定时接收数据,要注意的是,定时器的定时的时间要和下位机发送的时间间隔相同,并且在接收并读取完之后,用FlushOutQ(int COMPort)函数清空指定串口的输入队列。若下位机发送的数据帧的起始字符是0XDD,终止字符是0XFF,则编写接收数据部分程序可如下:

switch(event)

{

case EVENT_TIMER_TICK:

if(comState>=0)

{

InQLength=GetInQLen(1);

if(InQLength>512)InQLength=512;

ComRd(1,buffin,InQLength);//读取端口数据,存于buffin字符数组中

for(i=0;i<InQLength-1;i++)

{

if(buffin[i]==0xDD)//起始符正确

{

for(j=1;buffin[i+j]!=0xFF;j++)//循环终止条件为结束符0xFF

k[j]=buffin[i+j];

}

else//起始符不正确,跳过一个字节继续i++;

}

*value=(double)k;

SetCtrlVal(panelHandle,PANEL_NUMERICGAUGE,*value);//显示值

}

2.2.3 通信口发送命令

把控制命令帧写入buffout[]字符数组中,然后通过ComWrt(1,buffout,outQLength)函数发送出去。为使下位机能可靠接收,可以设置命令帧起始符和终止符。在发送之前,要用FlushInQ(int COMPort)函数清空指定串口的输出队列数据。部分发送程序如下。

int CVICALLBACK Timer(intpanel,int control,int event,void*callbackData,int eventData1,int eventData2)

{

switch(event)

{

case EVENT_TIMER_TICK:

buffout[1]=0XDD;

ComWrt(1,buffout,10);

break;

}

return 0;

}}

3 通讯实验

如图5所示,PC机通过PPI通讯电缆与PLC相联接,PLC采用24V开关电源供电。采用LabWindows/ CVI设计了一个简单的上位机界面测试PC机和PLC的IO口自由口通讯(如图6所示)。点击“开始”按钮可以实现PC机与PLC的IO端口通讯。LabWindows/ CVI界面上的“I0.0”和“Q0.0”分别与PLC的“I0.0”和“Q0.0”端口相对应。当PLC的I0.0端口接入24V高电平时,点击“开始”按钮,此时LabWindows/CVI界面中的I0.0灯亮(如图7所示)。当点击完LabWindows/CVI界面上的“开始”按钮后点击“Q0.0”按钮,PLC上的Q0.0输出24V高电平(如图8所示)。

图5 硬件连接图

图6 LabWindows/CVI上位机界面

图7 I0.0端口测试

图8 Q0.0端口测试

4 结论

本文介绍了西门子S7系列PLC的自由口编程的原理和方法,并给出了与上位机LabWindows/CVI实时通信的方案和相应程序。将文中程序中的传输字符个数以及字符内容加以修改,变成工业控制中的相应数据,即可应用于工业系统的实时通讯。而对于PC机上带串口驱动的其他上位机软件,均可以仿照上述方法与PLC实现实时通信。可以看出,采用PLC的自由口编程与LabWindows/CVI的通信方法,设计简单灵活,硬件需求少,对于推动其在小型控制系统中的应用具有重大意义。

[1]吕华芳,杨汉波,丛振涛,等.基于PLC控制的室内降雨入渗自动测定系统[J].农业机械学报,2014,45(9): 144-149.

[2]蒋晓峰,施伟锋,刘以建,等.基于触摸屏和PLC的船舶电站监控系统设计[J].电力自动化设备,2011,13(1): 122-125.

[3]黄双成,李志伟.OPC技术下Matlab与PLC的通讯实现[J].机械工程与自动化,2014(3):187-190.

[4]侯军卫,刘玉锋,王荣杰.基于VC的上位机与PLC可靠通信的实现方法[J].中国农业大学学报,2005,10(2): 65-69.

[5]高潮.用Visual C++实现PC与PLC之间的串行通讯[J].重庆大学学报(自然科学版),2006,29(6):19-22.

[6]蒋从根,朱青松,马蕾.基于串口ActiveX控件MsComn的LabVIEW与PLC通信的实现[J].西南大学学报,2010,32(1):134-137.

[7]高永强,刘淑霞,霍晓静.基于LabWindows/CVI的畜禽舍环境综合测控系统[J].中国农机化学报,2014,35 (2):275-277.

[8]罗庚合,王瑜.基于LabWindows与PLC控制的作动筒盐雾试验装置的设计[J].机床与液压,2015,43(4): 122-125.

[9]孙晓云.基于LabWindows/CVI的虚拟仪器设计与应用[M].北京:电子工业出版社,2010.

[10]姜建芳.西门子S7-200 PLC工程应用技术教程[M].北京:机械工业出版社,2010.

[11]西门子公司.STEP7用户手册[Z].北京:西门子公司(中国)有限公司自动化部,1996.

[12]代峰燕.用LabWindows/CVI实现PC与PLC串行通讯的方法[J].仪器与仪表学报,2009,30(10):149-151.

[13]Jianyong Zuo.Freeport Communication Protocol for S7-200 Programmable Controllers[J]Mechanic Automation and Control Engineering(MACE),2011 Second International Conference on.2011:314-316.

[14]Ling Zhou.The Research and Application of Freeport Communication of SIEMENS PLC[C].Future BioMedical Information Engineering International Seminar,2008:318-321.

(编辑李秀敏)

The Design of Serial Port Real-time Communication System Based on LabWindows/CVI and PLC Free Port

WANG Shu-zhen1,GAO Xiao-hui2,WANG Yu-ting3
(1.Mechanical&Electrical Department,Wuhai Vocational College,Wuhai Inner Mongolia 016000,China;2.School of Automation Science and Engineering,Beihang University,Beijing 100191,China)

Using programming of PLC free port to achieve the real-time communication with the industrial control computer client softw are has not been widely studied and developed,with rare application cases in the engineering.In this paper,based on the discussion of the principles and the methods of the communication between Siemens S7 series PLC and virtual instrument software LabWindow s/CVI,as an innovate point,PLC free port programming method is used to define the communication agreement between the upper and low er position machines and realize the communication through a serial port.The communication implementation scheme,with small hardw are requirement,is economic,applicable,simple and flexible.What’s more,it can be appropriate for the situations w ith few er control nods and low er requirement of communication rate.

programmable logic controller;LabWindows/CVI;free port communication

TH166;TG659

A

1001-2265(2017)04-0153-04

10.13462/j.cnki.mmtamt.2017.04.039

2016-11-21;

2016-12-26

王淑贞(1979—),女,辽宁庄河人,乌海职业技术学院讲师,硕士,研究方向为机械设计制造及自动化技术,(E-mail)1606050975@qq.com。

猜你喜欢
波特率PC机字符
UART 波特率检测电路的FPGA 设计算法与实现
论高级用字阶段汉字系统选择字符的几个原则
CAN 总线波特率自适应程序设计
字符代表几
一种USB接口字符液晶控制器设计
图片轻松变身ASCⅡ艺术画
浅谈西门子S7—400与S7—200的通讯实现方法
波特率自适应的CAN驱动在嵌入式Linux下的实现①
用VC++实现PC机与单片机的串行通信
VC.NET下实现dsPIC单片机与PC机的通信