可编程序控制器网络通讯及其程序设计研究之间的串行通信_第1页
可编程序控制器网络通讯及其程序设计研究之间的串行通信_第2页
可编程序控制器网络通讯及其程序设计研究之间的串行通信_第3页
可编程序控制器网络通讯及其程序设计研究之间的串行通信_第4页
可编程序控制器网络通讯及其程序设计研究之间的串行通信_第5页
已阅读5页,还剩1页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、微型电脑应用2002年第6期用Delphi实现计算机与OMRON PLC之间的串行通信同济大学 信控系 上海 200092余振宏 蒋式勤 刁杰 谢威摘要:以OMRON C200HG系列PLC为例介绍了用Delphi5.0实现上位机与PLC地通信,着重讨论了通信协议以及MSComm控件的属性设置、事件响应。关键词:串行通信,Delphi5.0,PLC通信协议,API函数The Achievement of Serial Communication between Computerand OMRON C200HG PLC by Using DelphiAbstract:Introduce the

2、technology of serial communication between the computer and OMRON C200HG PLC by Using Delphi, mainly discuss the communication protocal ,the protertiessetting and events response of MSComm by using the Delphi5.0Key words:serial communication, Delphi5.0,PLC communication protocol,API function现代工业控制的监

3、控系统及其他过程检测和控制系统,大多采用分布式监控系统的控制方式,要使其信息集中,功能分散的优点得以充分发挥,就必须进行上位机与下位机之间的数据通信。与此同时,可编程控制器(PLC)以其功能强大、通讯灵活、可靠性高、环境适应性好、编程简单、使用维护方便等优点而被作为下位机广泛应用于工业现场,而微机在数据处理及人机界面方面有得天独厚的优势,因此采用微机为上位管理机来进行工艺流程及工艺参数的显示、控制参数的修改等,这样不得不解决上位管理机与下位控制机之间的通信问题。本文结合基于元胞自动机的电梯群控系统建模与仿真系统介绍如何运用delphi5.0实现上位机与OMRON C200HG PLC之间的通信

4、。1 通信系统的硬件结构本仿真系统由一台通用PC(上位机)和OMRON C200HG PLC(下位机)组成。C200HG的CPU单元内带有RS-232C端口,其支持与PC串口的一对一串行通信。通过编制上位机的控制程序和相应的下位机程序就能实现上下位机之间数据的交互。2 上位机的串口通信用Delphi开发串口通信软件一般有两种方法:一是利用Windows的通信API函数,另一种是采用Microsoft的MSComm控件。利用API编写串口通信程序较为复杂,需要掌握大量的通信知识,其优点是实现的功能强大,应用面广泛,适合于编写较为复杂的低层次通信程序。而利用MSComm控件则相对简单,该控件具有丰

5、富的与串口通信密切相关的属性及事件,提供了对串口的各种操作。考虑到与下位PLC的通信比较简单,通信过程中并没有涉及到复杂的底层操作,所以本仿真系统就选用Microsoft的MSComm控件。MSComm控件是VB中的OCX控件,可以通过选择菜单"Component">"import active control",在"Import ActiveX"页内选择"Microsoft Comm Control",点击"Install"安装,即可将其添加到Delphi中使用。 MSComm控件的主要

6、属性及事件CommPort:设置或返回串行端口号,缺省值1。Settings:设置或返回串口通信参数,格式为“波特率,奇偶校验位,数据位,停止位”。例如:MSComm1.Settings:'9600,o/e,8,1'PortOpen:打开或关闭串行端口,格式为MSComm1.PortOpen:True|FalseInBufferSize:设置或返回接收缓冲区的大小,缺省值为1024字节。InBufferCount:返回接收缓冲区内等待读取的字节数,可通过设置该属性为0来清空接收缓冲区。RThreshold:该属性为一阀值,它确定当接收缓冲区内的字节个数达到或超过该值后就产生代码

7、为CommEvReceive的OnComm事件。SThreshold:该属性为一阀值,它确定当发送缓冲区内的字节个数少于该值后就产生代码为CommEvSend的OnComm事件。InputLen:设置或返回接收缓冲区内用Input读入的字节数,设置该属性为0表示Input读取整个缓冲区的内容。Input:从接收缓冲区读取一串字符。OutBufferSize:设置或返回发送缓冲区的大小,缺省值为512字节。OutBufferCount:返回发送缓冲区内等待发送的字节数,可通过设置该属性为0来清空缓冲区。OutPut:向发送缓冲区传送一串字符。如果在通信过程中发生错误或事件,就会触发OnComm事

8、件,并由CommEvent属性代码反映错误类型,在通信程序的设计中可根据该属性来执行不同的操作。CommEvent属性值很多我们主要用到的是CommEvReceive:值为2,接收缓冲区内字符数达到RThreshold指定的值。3 通信协议及上下位机的通信过程C200HG对通信端口有默认的标准设置,起动位:1 数据长度:7 停止位:2 奇偶校验:偶 波特率:9,600bps,也即MSComm1.Settings:9600,e,7,2上下位机的链接通信通过在上位机和PLC之间交换命令和应答实现。在一次交换中传输的命令或应答数据称为一帧,一个帧最多可包含131个数据字符。上位机的链接数据称命令帧,

9、下位机返回的数据称应答帧。3.1命令帧格式从上位机发送一个命令时,按下面的格式排列命令数据:图4-1 命令帧格式识别码和正文取决于传输的上位机链接命令。当传送一个组合命令时,还将有第二个识别码(子识别码)。FCS(帧检查顺序)码由上位机计算并设置在命令帧中,有关计算方法在下面将详细叙述。命令帧可以有最多131个字符长,一个等于或大于132字符的命令必须分成若干帧。命令分段使用回车定界符,而不能使用终止符,终止符用在最后帧的结尾。3.2应答帧格式来自PLC的应答按下面的格式返回:图4-2 应答帧格式识别码和正文取决于接收到的上位机链接命令。结束码表示命令完成的状态(有无错误发生)。当应答超过13

10、2个字符,必须分成若干帧,在每个帧的末尾将自动设置一个回车定界符代替终止符,终止符设置在最后帧的末尾。3.3 FCS函数的构成在上下位机的串行通信中,为了保证通信数据的正确性,C200HG在每条信息帧中定义了两位FCS校验码。规则是,FCS校验码以前的所有字符取其ASCII代码,对这些代码进行异或操作,将其结果转换为十六进制作为两位字符的ASCII代码,返回两位字符,这两位字符就是这一帧的FCS校验码。下位机应答帧里的FCS校验码是由PLC硬件自动生成的,而上位机的FCS校验需用软件来完成,我们在这里可以定义FCS函数的入口参数和返回值:同一帧中的所有待校验字符作为一字符串定义为入口参数,返回

11、值为两位FCS校验码。考虑到标准函数function Ord(X): Longint不支持变量操作,即X只能是立即数型的单个字符。这样,表达式Ord(Copy(instring, N, 1)是非法的,将在程序中导致错误。解决的方法是,定义一个字符型变量,将Copy(instring, N, 1)的返回值存入其中,对此变量的值进行穷举判别,然后根据判别结果用相应立即数型的单个字符返回值来替换Ord(Copy(instring, N, 1)的值。因为待校验字符串中所包括的字符集仅为0至F的十六进制数和写PLC IR区识别码的“W”“R”,一共只有十八种情况,所以穷举判别法是行之有效的,下为FCS校

12、验函数:Function FCS(instring:string):variant;Var N,Result,Temp:Integer;Result:0; Temp:0; N:=1;BeginWhile N<a then/a为发送帧的长度加1BeginIf copy(instring,N,1)0 thenBeginTemp:=ord(0)End;./依次进行1,2,.,9,A,B,.,F,W,R等的异或操作.If copy(instring,N,1)R thenBeginTemp:=ord(R)End;Result:Result XOR Temp;N:N+1;End;Result:Int

13、toHex(Result, 2);End;4 程序设计及说明编程中主要的问题就是编制上位机从PLC中取得数据以及上位机将数据写进PLC的存储区中的程序,下面以一个简单例子介绍这几个部分。在Form1中放置一Memo控件用于显示接收的数据,CommboBox1选择通信参数(Setting属性值),CommboBox2选择串口(CommPort属性值),按Button1开始接收数据,按Button2停止接收,Timer1Timer作为定时从PLC中读取数据的定时器。其工作流程为,上位机定时相PLC请求发送数据当(由Timer1Timer触发),下位机接到请求后开始发送数据,当数据达到13个时,就会

14、触发OnComm事件,从而进行判别并将数据显示在Memo控件中。procedure TForm1.Button1Click(Sender:TObject);beginMSComm1.InBufferCount:0;/清空接收缓冲区;MSComm1.outBufferCount:0; /清空输出缓冲区;MSComm1.InputLen:0;/Input读取整个缓冲区内容;MSComm1.RThreshold:13;/每次接收到13个字符即产生OnComm事件,除去帧中其他代码,相当于每次接收的数据为4位16进制数;MSComm1.Settings:ComboBox1.Text;/本实验中选取96

15、00,e,7,2if CommboBox2.Text'com1' then/假设只考虑COM1和COM2两种情况;MSComm1.CommPort:1elseMSComm1.CommPort:2;MSComm1.PortOpen:true;/打开串口;MSComm1.DTREnable:true;/数据终端准备好;MSComm1.RTSEnable:true;/请求发送;end;procedure TForm1.Button2Click(Sender:TObject);beginMSComm1.PortOpen:false;MSComm1.DTREnable:false;MSC

16、omm1.RTSEnable:false;end;procedure TForm1.MSComm1Comm(Sender:TObject);varrecstr:Olevariant;beginif MSComm1.CommEvent2 thenbeginrecstr:MSComm1.Input;/接收下位机上传的数据if Copy(recstr,4,2)=RD then/判断是否为应答帧beginrecstr:Copy(recstr,8,4);/除去帧中其他代码,读取帧中传输的数据部分 Memo1.text:Memo1.text+recstr;/将数据显示在Memo1控件中end;end;pr

17、ocedure TForm1. Timer1Timer(Sender:Tobject);beginMSComm1.Enabled:=true;Senstr:=00RD0000000157*+#13;/向PLC请求发送数据MSComm1.output:senstr;End;向PLC中写数据也很方便,它需要调用上面的FCS函数用软件方式产生发送帧中FCS校验码。其基本格式为:senstr:=”00SC0252*+#13; /上位机写数据的命令 MSComm1.PortOpen:true;/打开串口;MSComm1.output:senstr;/上位机向PLC发送写数据的命令Senstr:=00WR0001+(待传输的数据) +FCS校验码+*+#13;MSComm1.output:senstr;/

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论