利用多线程机制实现微机与OMRON C200HG的串行通信

来源:本站
导读:目前正在解读《利用多线程机制实现微机与OMRON C200HG的串行通信》的相关信息,《利用多线程机制实现微机与OMRON C200HG的串行通信》是由用户自行发布的知识型内容!下面请观看由(电工技术网 - www.9ddd.net)用户发布《利用多线程机制实现微机与OMRON C200HG的串行通信》的详细说明。
简介:本文以退火炉温度控制系统为例,介绍了在Windows XP下利用Delphi7.0多线程机制实现微机与OMRON C200HG之间的上位机链接通信,详细论述了硬件配置,PLC通信协议,程序编写。充分使用了多线程机制,通信程序条理清楚,结构简单,效率高。有较大的参考价值。

1 引言

现代PLC的通信功能很强,可以实现PLC与计算机、PLC与PLC、PLC与其他智能控制装置之间的通信联网。PLC与计算机联网,可以发挥各自所长,PLC用于现场设备的直接控制,计算机用于对付PLC的编程、监控与管理。OMRON公司的C200HG系列PLC具有可靠性高、数据处理能力强、能满足高水平的控制要求。Delphi是Borland公司推出的可视化应用程序开发工具。它的代码规范,开发效率高,能让用户在windows平台上快速开发出32位的windows应用程序。20吨退火炉炉温控制系统主要由上位机和PLC构成,上位机通过PLC采集炉气温度值、料温值、和各个风机的转速,以建立数据库、显示运行状态、打印报表等,上位机同时进行数据分析,控制热电偶的功率和风机的转速。主从机之间大量的状态信息,控制信息需要进行串行通信,传统的通信程序由一个主线程构成。当系统在执行一些比较费时的任务时系统会长时间处于等待状态,而且上位机所接收的通信往往是异步的,突发性的,所以串口通信会出现停滞和反应不及时的现象。本系统建立了三个单独的线程来实现数据从微机发送到PLC、向PLC发送读取数据命令、读取PLC发送的串口数据,因此上位机能及时高效地实现读取与发送数据。

2 硬件配置

硬件是上位机链网的物质基础,它对网络的物理层提供保证。

在PLC方面,其硬件主要是Host Link 单元或装置。主要靠它提供RS-232口或RS-422口。C200HG机的CPU可插入通讯板提供RS-232口。个人计算机通常配置了两个RS-232口。PLC的通讯口与计算机的通讯口要靠电缆联接。RS-232口要三根线。图1为接线情况。

利用多线程机制实现微机与OMRON C200HG的串行通信

图1 接线

3 Delphi中串口通信的实现

用Delphi开发串口通信软件一般有两种方法:一是利用Windows的通信API函数,另一种是采用Microsoft的MSComm控件。考虑到与下位PLC的通信比较简单,通信过程中并没有涉及到复杂的底层操作,所以本系统就选用Microsoft的MSComm控件。

MSComm控件实际上是一些Windows API函数的有机集成,它以属性和事件的形式提供了对Windows通讯驱动程序API函数接口,为应用程序提供了通过串行接口收发数据的简便方法。因此,程序员只需在程序中设置和监视MSComm控件的属性和事件即可完成对串口的编程。

MSComm控件提供了两种处理通讯的方法:一是事件驱动方法;一是查询方法。

2.1事件驱动法

OnComm事件是MSComm控件提供的唯一的事件,当有数据到达端口或端口状态发生改变或有通讯错误时,都将触发OnComm事件,以获取和处理这些通讯事件和通讯中产生的错误,通过查询CommEvent属性值,可以获得关于通讯事件和通讯错误的完整信息,进而进行处理。这是一种功能很强的处理串行口错误的方法,具有程序响应及时,可靠性高的优点。

2.2查询法

MSComm控件的CommEvent属性返回通讯中产生的事件和错误类型,由控件自动检测和跟踪通信状态后设置。然后由控制软件进行分析和处理。

4 使用多线程(Multi-Thread)机制

线程(Thread)又称执行控制绪,可以想象线程就好像是一个指针,它会指着正在运行的那一程序,线程负责控制整个程序的运作与运行。而多线程则是指在同一个程序中、同一个时间、同时有好几个线程运作着。每个线程彼此独立,而且互不干扰地运行着。线程是进程内的一个执行单元,当一个进程被创建后,系统就会为它创建一个主线程,如果需要的话,该主线程还会创建其它线程。Win32系统会把CPU时间片分给这些线程,每个线程在指定的时间片内运行,Win32系统基于每个线程的优先级来管理时间的分配。

在串行通信中,上位机所接收的通信往往是异步的、突发性的。在通讯程序中引入多线程,即创建专门的通信线程实现对串口的访问。这种方法可以有效地克服串口通信中的停滞和反应不及时现象。

5 通信程序设计

图2为通信程序界面。Delphi7将多线程对象封装成TThread对象。本系统创建了三个线程来实现微机与PLC的通信,在通信界面的OnCreate事件中创建这三个线程,在通信界面的OnClose事件中结束。三个线程独立工作。

利用多线程机制实现微机与OMRON C200HG的串行通信

图2 通信界面

其相互间关系见图3。

利用多线程机制实现微机与OMRON C200HG的串行通信

下面以线程1为例详细地介绍线程开发和通信。

线程1:创建此线程用来将数据从微机发送到PLC。当输出值发生改变时启动该线程,传送成功暂停该线程。建立一个线程组件,将其命名为Tshuchu。

procedure TForm3.Edit5Change(Sender: TObject);

begin

thread1.Resume; //启动线程1

end;

procedure Tshuchu.Execute;

begin

while not terminated do //检查线程的Terminated属性

begin

synchronize(update); //调用synchronize以避免多个线程间可能造成的冲突

end;

end;

procedure Tshuchu.update;

var

outdata,indata:string;

i:integer;

loop:string[20];

begin

if not(form3.mscomm1.PortOpen) then

form3.mscomm1.PortOpen:=true; //判断端口是否打开

i:=1;

while i<=3 do

begin

outdata:=@00WD1000 form3.edit5.Text

fcs(@00WD1000 form3.edit5.Text) * #13;

form3.mscomm1.Output:=outdata; //向PLC发送写请求

sleep(10);

indata:= form3.mscomm1.Input;

loop:=indata;

if copy(indata,4,2)=WD then //判断是否为应答帧

begin

if (loop[6]=0) and (loop[7]=0) then //判断是否为正确响应

i:=5

thread1.Suspend;

else

i:=i 1;

end;

end;

end;

线程2:创建此线程来不断向PLC发送读取数据命令。点击”开始通信”就启动该线程,点击”停止通信”暂停该线程。

线程3:创建此线程用来读取PLC发送的串口数据。当MSComm控件产生OnComm事件时启动该线程,数据接收成功暂停该线程。

线程2、3的编写与线程1类似。

FCS函数由用户根据需要自行编写。编写的方法为用copy函数从字符串中取出字符,用ord函数转为对应的序数,再用xor函数进行异或处理,最后转换为16进制。

例如:if copy(indate,n,1)=0 then

xushu:=ord(0);

jieguo1:=jieguo1 xor temp;

jieguo:=inttohex(jieguo1,2);

6 结论

20吨铝箔退火炉温度控制系统已经通过了实际调试和运行,信号数据能够在上位机和PLC之间可靠快捷的传递。创新点:与传统的通讯程序相比较,本系统建立了三个单独的线程来实现数据从微机发送到PLC、向PLC发送读取数据命令、读取PLC发送的串口数据,三个线程分工合作,与主线程一起位数据通信服务,因此上位机能及时高效地实现读取与发送数据,而且整个程序编写结构十分清楚合理,极大的提高了程序的效率。对广大用户有很大的参考价值。

参考文献:

[1] OMRON公司. Programmable Controllers C200HX/C200HG/C200HE. 上海:欧姆龙(中国)有限公司.1997

[2] 范逸之,陈立元. Delphi与RS-232串行通信控制. 北京:清华大学出版社.2002

[3] 林金霖.Delphi6实物经典. 北京:中国铁道出版社.2002

[4] 宫淑贞,王冬青. 可编程控制器原理及应用. 北京:人民邮电出版社.2002

[5] 赵兰涛,苏彦华. Delphi串口通信技术与工程实践. 北京:人民邮电出版社.2004

[6] 赵闻蕾,付维胜.利用VB6.0实现PC机与PLC的串行通信.微计算机信息.2004(1) .89~90

附注:

基金资助:国家十一.五 973项目,2005CB623707

作者简介:

唐军,男,汉,1981年10月生,在读硕士研究生,机械电子工程专业,从事20t铝箔退火炉温度控制系统研究。

毛大恒,男,汉,1946年生,教授,博士生导师,从事金属压力加工及装备和摩擦润滑技术研究。

联系地址: 湖南省长沙市中南大学 桃B-335,邮编410083

Email: tangjunok@tom.com

提醒:《利用多线程机制实现微机与OMRON C200HG的串行通信》最后刷新时间 2024-03-14 01:10:29,本站为公益型个人网站,仅供个人学习和记录信息,不进行任何商业性质的盈利。如果内容、图片资源失效或内容涉及侵权,请反馈至,我们会及时处理。本站只保证内容的可读性,无法保证真实性,《利用多线程机制实现微机与OMRON C200HG的串行通信》该内容的真实性请自行鉴别。