理论教育 使用微软控件实现计算机通信编程

使用微软控件实现计算机通信编程

时间:2023-07-01 理论教育 版权反馈
【摘要】:但使用前要先把串口通信控件,从控件库调入到编程软件的工具箱中。3)通信进程访问方法。SerialPort控件1)CommPort(通信口)属性。指定用计算机的哪个串口进行通信。图6-112 程序访问方法显示窗口及控件它用程序定时或依需要访问事件属性或访问缓冲区计数值的变化,依其变化情况作相应的通信处理。必要时可增加Timer控件予以监视。计算机与欧姆龙PLC Host Link协议通信Delphi6.0编程。也可使用微软提供的Mscomm控件。图6-113a所示为Delphi6.0通信程序实例的运行窗口。

使用微软控件实现计算机通信编程

1.微软串口通信控件

常用的微软串口通信控件有Mscomm(Microsoft Communication Control)及SerialPort。前者用于Visal Studio 6.0。后者包含在NET Framework 2.0类库中,用于Visual Studio2005及以上版本。使用串口通信控件控件是比较方便的。但使用前要先把串口通信控件,从控件库调入到编程软件的工具箱中。

(1)Mscomm控件。

1)属性。主要有:

(a)CommPort(通信口)属性:指定用计算机的哪个串口进行通信。若用多个串口与不同的对象通信,则可多用几个控件。一个控件管理一个通信口。

(b)Settings(参数设定)属性:指定串口的波特率奇偶校验及停止位等特性。此设定应与PLC的设定一致。

(c)Port Open(打开)属性:设置其为真,打开;否则关闭。进行通信之前,必须先打开。

(d)InputMode(读取数据类型属性)属性:确定Input属性如何取回数据。设为comInput-ModeText(默认),数据将以字符或字符串格式读出。设为comInputModeBinary,数据将以二进制数用数组格式读出。如果数据只用ANSI字符集,则用comInputModeText。否则用comInputMode-Binary。

(e)Input(读取)属性:把输入缓冲区的内容读到指定的字符变量中。读后缓冲区的内容清为零。缓冲区的大小可设,最大可达2~4k字。

如果接收数据类型设为字符格式,则要先声明一个字符串变量。直接接收数据,之后就可以显示它了。如:

978-7-111-39745-8-Chapter07-157.jpg

如果接收数据类型设为二进制数,读取为数值,是不可视的。要先声明一个字节数组,读取后再转换为字符串才可以显示。如

978-7-111-39745-8-Chapter07-158.jpg

(f)Output(输出)属性:把输出的命令送输出缓冲区,并且逐字向指定通信对象发送,直到缓冲区空。

发送的数据可以是可视的字符串,也可以是不可视的二进制数。

如果是可视的字符串,要先声明一个字符串变量,并进行赋值。然后发送这个字符串就可以了。即

978-7-111-39745-8-Chapter07-159.jpg

如果发送的数据类型设为二进制数,因为它是数值,是不可视的,要先声明一个字节数组,再把可视的数值转换为不可视的二进制数,并赋值给所声明的字节数组。然后发送这个字节数组。即

978-7-111-39745-8-Chapter07-160.jpg

提示:发送、接收使用二进制方式,虽然它的数据不可视,不大方便,但通信效率高。同样的帧长,而收、发的数据可增大一倍。更何况有的协议,如MODIBUS RTU还必须使用二进制格式通信。

(g)RThreshold(接收字符数)属性:设定值为整型数。如果设置为0(默认值)接收缓冲区接收到字符不产生OnComm事件。如果设置为1,每收到一个字符会使MSComm控件产生On-Comm事件。其余类推。

2)事件。只一个事件,即OnComm()事件。只要Comm Event(也是一种属性)的值发生变化,On Comm()事件就发生。

Comm Event取值与通信口的状况有关。有18个可能的取值。其中10个与通信口的出错(如缓冲区满、通信时间超出……)有关;而7个与通信的进程(如输入或输出缓冲区内容改变……)有关。如什么事件也不发生,则其值为零。

3)通信进程访问方法。有两种:

(a)程序访问方法。它用程序定时或依需要访问事件属性或访问缓冲区计数值(InBufflr-Count或OutBuffCount)的变化,依其变化情况作相应的通信处理。

(b)事件驱动方法。执行本程序效果与上述访问方法相同。只是如果通信不正常,将没有提示。必要时可增加Timer控件予以监视。超出监视时间还没有回应,也可提示出错。

(2)SerialPort控件

1)CommPort(通信口)属性。指定用计算机的哪个串口进行通信。若用多个串口与不同的对象通信,则可多用几个控件。一个控件管理一个通信口。

2)Settings(参数设定)属性:指定串口的波特率、奇偶校验及停止位等特性。此设定应与PLC的设定一致。

3)Port Open(打开)属性:设置其为真,打开;否则关闭。进行通信之前,必须先打开。

……

2.使用微软串口通信控件编程实例

(1)【实例程序1】计算机与欧姆龙PLC Host Link协议通信VB6.0编程。要求是,调ReadDM过程实现读PLC DM0000及0001的内容。

本例使用的窗口为Form1。其上加载的控件有:Mscomm1(通信控件,未特别指明其特性用默认值)、Tsxt1(文本控件,用以显示所得到数据)及Command1(按钮控件,用以激发Com-mand1_Click过程,实现通信)如图6-112a所示。

978-7-111-39745-8-Chapter07-161.jpg

图6-112 程序访问方法显示窗口及控件

它用程序定时或依需要访问事件属性或访问缓冲区计数值(InBufflrCount或OutBuffCount)的变化,依其变化情况作相应的通信处理。以下以读PLC DM0000及0001的值为例说明说明这个编程。这里用了两种方法。

(a)通信进程访问方法。程序代码如下(“’”之后为注解):

978-7-111-39745-8-Chapter07-162.jpg

978-7-111-39745-8-Chapter07-163.jpg

运行本程序,点击“Command1”按钮,如果通信正常,Text1将显示所读数据。如7-102b所示为12345678。如果通信不正常,将弹出对话框,如图6-102c所示,显示“通信有误!”

(b)事件驱动方法。所用说明实例及使用控件同上。程序代码如下(“’”之后为注解):

978-7-111-39745-8-Chapter07-164.jpg

978-7-111-39745-8-Chapter07-165.jpg

执行本程序效果与上述访问方法相同。只是如果通信不正常,将没有提示。必要时可增加Timer控件予以监视。超出监视时间还没有回应,也可提示出错。

(2)【实例程序2】计算机与欧姆龙PLC Host Link协议通信Delphi6.0编程。Delphi是In-prise公司推出的基于对象Pascal语言的可视化集成开发工具。也可使用微软提供的Mscomm控件。只是在使用前要以“ActiveX Control”的身份加载到它的集成编程平台上。然后把这控件拖放到程序所用的窗口(FORM)中。

图6-113a所示为Delphi6.0通信程序实例的运行窗口。实例除了使用Mscomm控件,还有其他标准控件,如图6-113b所示。

978-7-111-39745-8-Chapter07-166.jpg

图6-113 Delphi6.0通信程序实例

从图6-113可知,其上有6个“Button”(按钮)。分别为打开通信口(Open Port)、关闭通信口(Close Port)、FCS校验(FCS)、发送(Send)、接收(Receive)及程序退出(exit)。还有用以键入通信命令的“Edit1”(编辑文本框,用以输入通信命令),“Edit2”(编辑文本框,用以显示或键入命令原码+校验码+结束码)及一个显示PLC应答数据的“Memo”(文本框)“文本框”。微软Mscomm控件运行时是看不见的。编辑时对它的属性设定与PLC的串口特性一致。

如下为本程序代码。显示Delphi的“开头”代码,是系统生成的。用浅色字符表示。其余为各个按钮点击后执行的程序代码,由用户编写的,并含有简要注解。有6个程序段,分别与6个按钮对应。

978-7-111-39745-8-Chapter07-167.jpg

978-7-111-39745-8-Chapter07-168.jpg

978-7-111-39745-8-Chapter07-169.jpg

运行本程序后,只要在“命令原码”处键入“@00RD00000020”通信命令(读DM0000开始的10个字的数据),然后点击FCS校验(FCS)“按钮”,再点击打开通信口(Open Port)“按钮”,再击发送(Send)“按钮”,再击接收(Receive),如通信正常,将看到如图6-103所示的情况。输入其他命令将有不同显示。要退出系统,先点击关闭通信口(Close Port)“按钮”,后再点击“exit”即可。

(3)【实例程序3】计算机与三菱编程口通信协议通信VB6.0编程。图6-114所示为FX机VB通信程序画面。程序可实现对字数据读、写及对位数据置位、复位的功能。

978-7-111-39745-8-Chapter07-170.jpg

图6-114 FX机VB通信程序

1—读数据显示区(Text3) 2—写数据输入区(Text1(2))3-置位复位地址指定区(Text4)

如图所示,如点击“写数据”键,将把要写的数据,本例为“34127856CDAB”,写入PLC的“D”区,从地址0开始的6个字节(以上均可选定),D0、D1、D2中。再击“读数据”键,将向PLC发送读命令,本例为读取从D0开始的6个字节的,通信命令(以上均可选定),如PLC正确回应,则在把CHR(2)+“34127856CDAB”+CHR(3)+“B1”记入读数据显示区中。

提示:这里D0实际数据为1234、D1实际数据为5678、D2实际数据为ABCD。只是根据它的通信协议,传送字时,低字节先传。所以,要直接使用此数据,还要做相应处理。以下为读数据,即Command4_Click()程序:

978-7-111-39745-8-Chapter07-171.jpg(www.daowen.com)

978-7-111-39745-8-Chapter07-172.jpg

978-7-111-39745-8-Chapter07-173.jpg

978-7-111-39745-8-Chapter07-174.jpg

978-7-111-39745-8-Chapter07-175.jpg

如图6-114所示,再如击“置位”键,将把指定的位,如本例为Y0000,置成1。而如点击“复位”键,将把指定的位,如本例为Y0000,置成0。地址计算及表示规矩见本章6.8节。

其置位程序,即即Command1_Click()如下:

978-7-111-39745-8-Chapter07-176.jpg

978-7-111-39745-8-Chapter07-177.jpg

978-7-111-39745-8-Chapter07-178.jpg

(4)【实例程序4】计算机与S7-200 PPI协议通信VB6.0编程。图6-115所示为其通信程序画面。程序可实现对字数据读、写等功能。

978-7-111-39745-8-Chapter07-179.jpg

图6-115 PPI通信程序画面

1—命令编辑框(Text4) 2—发送命令报文框(Text1) 3—命令响应、确认框(Text2) 4—命令回应框(Text3)

从图6-115可知,它除了有4个文本框,还有6个按钮。即“wVB100=99”、“rVB100”、“命令发送”、“PLC-run”、“PLV-stop”及“退出”。用鼠标左键点击上述按钮,将执行与其名称对应的过程(SUB),调用相关命令。如点击“wVB100=99”,则执行Sub Command10_Click()。其余类似,见以下程序注解。

为了程序简练,这里增加了发送通信命令的带参数调用的子过程,即Sub sendOrder(o$)。每个相关命令调用后,对命令码先赋值,然后调Sub sendOrder(o$),发送由命令码字符0$编辑的命令。

此外,当程序启动时,将执行FORM-LOAD过程,对通信口参数进行设定,并打开通信口。当通信口输入事件中断开通时,如通信口得到数据,将运行MSComm1_OnComm过程(SUB)。

以下为以上各个过程的程序代码。可参照注解阅读。

978-7-111-39745-8-Chapter07-180.jpg

978-7-111-39745-8-Chapter07-181.jpg

978-7-111-39745-8-Chapter07-182.jpg

978-7-111-39745-8-Chapter07-183.jpg

图6-116所示为运行上述程序后出现的PPI通信程序运行画面。对其进行操作过程是,先在命令编辑框上写入命令代码(可参照关于PPI协议填写),然后点击“命令发送”按键。

978-7-111-39745-8-Chapter07-184.jpg

图6-116 PPI通信程序运行画面

如图6-116所示,这时,将在“发送命令报文框”显示所编辑命令(图示的仅校验码与编辑框不同,本软件可自动生成校验码及命令长度,编辑时,可任意填写)。如通信成功,还将有命令响应码、计算机确认码及命令回应报文。在这个命令回应报文中,黑体字FF即为所读的QB0的数据。

如直接点击“wVB100=99”,将使PLC的VB100写为99。如直接点击“rVB100”,将读PLC的VB100的值,并显示在命令回应报文的倒数第5、6字中。如直接击“PLC-run”,将使PLC运行。如直接击“PLC-stop”,将使PLC停止运行。

本软件方便之处是,通信命令可任意编辑。只要编辑正确,合乎协议要求即可执行。建立用它对协议的一些细节多些测试。以便更全面地弄通PPI协议。

(5)【实例程序5】计算机与和利时LM机Modbus协议通信VB6.0编程。图6-117所示为其通信程序表单画面。其上有发送报文文本框及接收报文文本框。有发送命令及接收命令按钮。

串口的设定与打开、关闭略。输入格式应设为二进制格式。

978-7-111-39745-8-Chapter07-185.jpg

图6-117 计算机与PLC串口Modbus协议通信程序表单

发送及接收命令程序代码如下:

978-7-111-39745-8-Chapter07-186.jpg

如果要使用中断实现数据接收,还可以把MSComm1.RThreshold设置为1,并增加以下过程:

978-7-111-39745-8-Chapter07-187.jpg

而上述过程中调用的CRC函数代码为

978-7-111-39745-8-Chapter07-188.jpg

有了上述设定及程序代码,运行程序,如图6-117所示的命令文本,发送后,将使PLC的%QX0.0强制为ON。并将返回与发送命令相同的数据。

(6)【实例程序6】计算机与欧姆龙PLC通信VB.Net编程。VB.Net包装在微软新版本的Visual Studio 2005开发工具中。使VB提升为也可面向对象及多线程编程。在它的NET Framework2.0类库中,包含有SerialPort类(用于串口通信),类似VB6.0的Mscomm控件,但功能也有很大提升,可更方便地用于串口通信程序编程。

图6-118所示为VB.Net的开发环境及建立的一个工程“VB.Net”窗口。

978-7-111-39745-8-Chapter07-189.jpg

图6-118 VB.Net开发环境及Form1窗口

从图6-118可知,在VB.Net窗口上,加载了5个button按钮控件及3个textBox文本控件。前者用于激发执行与通信相关的程序,后者用以键入与显示通信数据。此外,还有串口通信控件SerialPort1。

这5个button1~5分别用于打开串口、关闭串口、启动fcs校验码计算、发送通信命令及接收通信数据。3个textBox,1用于键入通信命令,2用于存储fcs运算结果,3用于显示接收数据。

程序作为Form1类包装在一起,其有关代码及必要注释如下。

978-7-111-39745-8-Chapter07-190.jpg

978-7-111-39745-8-Chapter07-191.jpg

图6-119所示为本程序运行画面。这时,如在textBox中键入“@00RD00000020”通信命令(读DM0000开始的10个字的数据),然后点击button3(FCS校验),再点击button1(打开通信口),再点击button4(发送命令),再点击button5(接收数据)。如通信正常,将看到如图所示的情况。输入其他命令将有不同显示。要结束通信,可点击button2(关闭通信口)。要退出系统,可点击窗口右上角的“978-7-111-39745-8-Chapter07-192.jpg”键。

978-7-111-39745-8-Chapter07-193.jpg

图6-119 通信程序运行画面

(7)【实例程序7】计算机与欧姆龙PLC通信C#编程。C#编程语言是微软在微软新版本的VisualStudio 2005中新开发的编程语言。具有VB界面好、开发快及VC程序效率高、运行速度快的双重优点。也是与SUN公司JAVA“PK”的产物。它也自带有通信控件SerialPort,可很方便地用以编程写通信程序。

978-7-111-39745-8-Chapter07-194.jpg

图6-120 C#开发环境及Form1窗口

图6-120所示为C#的开发环境及建立的一个工程“C#”窗口。

从图6-120可知,在C#窗口上,与上述VB.Net窗口一样,也加载了5个button按钮控件及3个textBox文本控件。前者用于激发执行与通信相关的程序,后者用以键入与显示通信数据。此外,还有串口通信控件SerialPort1。

这5个button1~5分别用于打开串口、关闭串口、启动fcs校验码计算、发送通信命令及接收通信数据。3个textBox,1用于键入通信命令,2用于存储fcs运算结果,3用于显示接收数据。

程序关代码及必要注释如下。

978-7-111-39745-8-Chapter07-195.jpg

978-7-111-39745-8-Chapter07-196.jpg

本程序运行与图6-119所示VB.Net的运行画面相同。如在textBox中键入“@00RD00000020”通信命令(读DM0000开始的10个字的数据),然后点击button3(FCS校验),再点击button1(打开通信口),再点击button4(发送命令),再点击button5(接收数据)。如通信正常,将看到如图所示的情况。输入其他命令将有不同显示。要结束通信,也可点击button2(关闭通信口)。要退出系统,可点击窗口右上角的“978-7-111-39745-8-Chapter07-197.jpg”键。

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈