常用的微软串口通信控件有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字。
如果接收数据类型设为字符格式,则要先声明一个字符串变量。直接接收数据,之后就可以显示它了。如:
如果接收数据类型设为二进制数,读取为数值,是不可视的。要先声明一个字节数组,读取后再转换为字符串才可以显示。如
(f)Output(输出)属性:把输出的命令送输出缓冲区,并且逐字向指定通信对象发送,直到缓冲区空。
发送的数据可以是可视的字符串,也可以是不可视的二进制数。
如果是可视的字符串,要先声明一个字符串变量,并进行赋值。然后发送这个字符串就可以了。即
如果发送的数据类型设为二进制数,因为它是数值,是不可视的,要先声明一个字节数组,再把可视的数值转换为不可视的二进制数,并赋值给所声明的字节数组。然后发送这个字节数组。即
提示:发送、接收使用二进制方式,虽然它的数据不可视,不大方便,但通信效率高。同样的帧长,而收、发的数据可增大一倍。更何况有的协议,如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所示。
图6-112 程序访问方法显示窗口及控件
它用程序定时或依需要访问事件属性或访问缓冲区计数值(InBufflrCount或OutBuffCount)的变化,依其变化情况作相应的通信处理。以下以读PLC DM0000及0001的值为例说明说明这个编程。这里用了两种方法。
(a)通信进程访问方法。程序代码如下(“’”之后为注解):
运行本程序,点击“Command1”按钮,如果通信正常,Text1将显示所读数据。如7-102b所示为12345678。如果通信不正常,将弹出对话框,如图6-102c所示,显示“通信有误!”
(b)事件驱动方法。所用说明实例及使用控件同上。程序代码如下(“’”之后为注解):
执行本程序效果与上述访问方法相同。只是如果通信不正常,将没有提示。必要时可增加Timer控件予以监视。超出监视时间还没有回应,也可提示出错。
(2)【实例程序2】计算机与欧姆龙PLC Host Link协议通信Delphi6.0编程。Delphi是In-prise公司推出的基于对象Pascal语言的可视化集成开发工具。也可使用微软提供的Mscomm控件。只是在使用前要以“ActiveX Control”的身份加载到它的集成编程平台上。然后把这控件拖放到程序所用的窗口(FORM)中。
图6-113a所示为Delphi6.0通信程序实例的运行窗口。实例除了使用Mscomm控件,还有其他标准控件,如图6-113b所示。
图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个按钮对应。
运行本程序后,只要在“命令原码”处键入“@00RD00000020”通信命令(读DM0000开始的10个字的数据),然后点击FCS校验(FCS)“按钮”,再点击打开通信口(Open Port)“按钮”,再击发送(Send)“按钮”,再击接收(Receive),如通信正常,将看到如图6-103所示的情况。输入其他命令将有不同显示。要退出系统,先点击关闭通信口(Close Port)“按钮”,后再点击“exit”即可。
(3)【实例程序3】计算机与三菱编程口通信协议通信VB6.0编程。图6-114所示为FX机VB通信程序画面。程序可实现对字数据读、写及对位数据置位、复位的功能。
图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()程序:
(www.daowen.com)
如图6-114所示,再如击“置位”键,将把指定的位,如本例为Y0000,置成1。而如点击“复位”键,将把指定的位,如本例为Y0000,置成0。地址计算及表示规矩见本章6.8节。
其置位程序,即即Command1_Click()如下:
(4)【实例程序4】计算机与S7-200 PPI协议通信VB6.0编程。图6-115所示为其通信程序画面。程序可实现对字数据读、写等功能。
图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)。
以下为以上各个过程的程序代码。可参照注解阅读。
图6-116所示为运行上述程序后出现的PPI通信程序运行画面。对其进行操作过程是,先在命令编辑框上写入命令代码(可参照关于PPI协议填写),然后点击“命令发送”按键。
图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所示为其通信程序表单画面。其上有发送报文文本框及接收报文文本框。有发送命令及接收命令按钮。
串口的设定与打开、关闭略。输入格式应设为二进制格式。
图6-117 计算机与PLC串口Modbus协议通信程序表单
发送及接收命令程序代码如下:
如果要使用中断实现数据接收,还可以把MSComm1.RThreshold设置为1,并增加以下过程:
而上述过程中调用的CRC函数代码为
有了上述设定及程序代码,运行程序,如图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”窗口。
图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类包装在一起,其有关代码及必要注释如下。
图6-119所示为本程序运行画面。这时,如在textBox中键入“@00RD00000020”通信命令(读DM0000开始的10个字的数据),然后点击button3(FCS校验),再点击button1(打开通信口),再点击button4(发送命令),再点击button5(接收数据)。如通信正常,将看到如图所示的情况。输入其他命令将有不同显示。要结束通信,可点击button2(关闭通信口)。要退出系统,可点击窗口右上角的“”键。
图6-119 通信程序运行画面
(7)【实例程序7】计算机与欧姆龙PLC通信C#编程。C#编程语言是微软在微软新版本的VisualStudio 2005中新开发的编程语言。具有VB界面好、开发快及VC程序效率高、运行速度快的双重优点。也是与SUN公司JAVA“PK”的产物。它也自带有通信控件SerialPort,可很方便地用以编程写通信程序。
图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用于显示接收数据。
程序关代码及必要注释如下。
本程序运行与图6-119所示VB.Net的运行画面相同。如在textBox中键入“@00RD00000020”通信命令(读DM0000开始的10个字的数据),然后点击button3(FCS校验),再点击button1(打开通信口),再点击button4(发送命令),再点击button5(接收数据)。如通信正常,将看到如图所示的情况。输入其他命令将有不同显示。要结束通信,也可点击button2(关闭通信口)。要退出系统,可点击窗口右上角的“”键。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。