常用的微软串口通信控件有Mscomm(Microsoft Communication Control)及SerialPort。前者用于Visal Studio 6.0。后者包含在NET Framework2.0类库中,用于Visual Studio 2005及以上版本。使用串口通信控件是比较方便的。但使用前要先把串口通信控件,从控件库调入到编程软件的工具箱中。
(1)Mscomm控件
1)属性。主要有:
①CommPort(通信口)属性:指定用计算机的哪个串口进行通信。若用多个串口与不同的对象通信,则可多用几个控件。一个控件管理一个通信口。
②Settings(参数设定)属性:指定串口的波特率、奇偶校验及停止位等特性。此设定应与PLC的设定一致。
③Port Open(打开)属性:设置其为真,打开;否则关闭。进行通信之前,必须先打开。
④InputMode(读取数据类型属性)属性:确定Input属性如何取回数据。设为comIn-putModeText(默认),数据将以字符或字符串格式读出。设为comInput Mode Binary,数据将以二进制数用数组格式读出。如果数据只用ANSI字符集,则用comInput ModeText。否则用comInputModeBinary。
⑤Input(读取)属性:把输入缓冲区的内容读到指定的字符变量中。读后缓冲区的内容清为零。缓冲区的大小可设,最大可达2~4k字。
如果接收数据类型设为字符格式,则要先声明一个字符串变量。直接接收数据,之后就可以显示它了。如:
如果接收数据类型设为二进制数,读取为数值,是不可以视的。要先声明一个字节数组,读取后再转换为字符串才可以显示。如:
⑥Output(输出)属性:把输出的命令送输出缓冲区,并且逐字向指定通信对象发送,直到缓冲区空。
发送的数据可以是可视的字符串,也可以是不可视的二进制数。
如果是可视的字符串,要先声明一个字符串变量,并进行赋值。然后发送这个字符串就可以了。即
如果发送的数据类型设为二进制数,因为它是数值,是不可视的,要先声明一个字节数组,再把可视的数值转换为不可视的二进制数,并赋值给所声明的字节数组。然后发送这个字节数组。
提示:发送、接收使用二进制方式,虽然它的数据不可视、不太方便,但通信效率高。同样的帧长,而收、发的数据可增大1倍。更何况有的协议,如MODIBUSRTU还必须使用二进制格式通信。
⑦RThreshold(接收字符数)属性:设定值为整型数。如果设置为0(默认值)接收缓冲区接收到字符不产生OnComm事件。如果设置为1,每收到1个字符会使MSComm控件产生OnComm事件。其余类推。
2)事件。只一个事件,即OnComm()事件。只要CommEvent(也是一种属性)的值发生变化,OnComm()事件就发生。
CommEvent取值与通信口的状况有关。有18个可能的取值,其中10个与通信口的出错(如缓冲区满、通信时间超出…)有关;而7个与通信的进程(如输入或输出缓冲区内容改变…)有关。如什么事件也不发生,则其值为零。
3)通信进程访问方法。有两种:
①程序访问方法。它用程序定时或依需要访问事件属性或访问缓冲区计数值(InBufflr-Count或Out Buff Count)的变化,依其变化情况作相应的通信处理。
②事件驱动方法。执行本程序效果与上述访问方法相同。只是如果通信不正常,将没有提示。必要时可增加Timer控件予以监视。超出监视时间还没有回应,也可提示出错。但,用控件也好,必须先弄清有关通信协议。不清楚协议,通信程序是无法编写的。
(2)Serial Port控件
1)CommPort(通信口)属性:指定用计算机的哪个串口进行通信。若用多个串口与不同的对象通信,则可多用几个控件。一个控件管理一个通信口。
2)Settings(参数设定)属性:指定串口的波特率、奇偶校验及停止位等特性。此设定应与PLC的设定一致。
3)Port Open(打开)属性:设置其为真,打开;否则关闭。进行通信之前,必须先打开。
……
2.使用微软串口通信控件编程实例
【实例程序1】 计算机与欧姆龙PLCHostLink协议通信VB6.0编程。要求:调Read DM过程实现读PLCDM0000及0001的内容。
本例使用的窗口为Form1。其上加载的控件有Mscomm1(通信控件,未特别指明其特性用默认值)、Tsxt1(文本控件,用以显示所得到数据)及Command1(按钮控件,用以激发Command1_Click过程,实现通信)。如图5-111a所示。
它用程序定时或依需要访问事件属性或访问缓冲区计数值(InBufflrCount或OutBuff Count)的变化,依其变化情况作相应的通信处理。以下以读PLCDM0000及0001的值为例说明这个编程。这里用了两种方法。
①通信进程访问方法。程序代码如下(“’”之后为注解):
图5-111 程序访问方法显示窗口及控件
运行本程序,用鼠标左键点击“Command1”按钮,如果通信正常,Text1将显示所读数据。如7-102b所示为12345678(如果PLC DM0000、DM0001存的数是此值)。如果通信不正常,将弹出对话框,如图5-111c所示,显示“通信有误!”
②事件驱动方法。所用说明实例及使用控件同上。程序代码如下(“’”之后为注解):
执行本程序效果与上述访问方法相同。只是如果通信不正常,将没有提示。必要时可增加Timer控件予以监视。超出监视时间还没有回应,也可提示出错。
【实例程序2】 计算机与三菱编程口通信协议通信VB6.0编程VB编程。图5-112所示为FX机VB通信程序画面。程序可实现对字数据读、写及对位数据置位、复位的功能。
如图5-112所示,如点击“写数据”键,将把要写的数据,本例为“34127856CDAB”,写入PLC的“D”区,从地址0开始的6个字节(以上均可选定),即D0、D1、D2中。再点击“读数据”键,将向PLC发送读命令,本例为读取从D0开始的6个字节的通信命令(以上均可选定),如PLC正确回应,则把CHR(2)+“34127856CDAB”+CHR(3)+“B1”记入读数据显示区中。
提示:这里D0实际数据为1234、D1实际数据为5678、D2实际数据为ABCD。只是根据它的通信协议,传送字时,低字节先传。所以,使用此数据要做相应处理。
以下为读数据,即Command5_Click()程序:
图5-112 FX机VB通信程序
1—读数据显示区(Text3) 2—写数据输入区[Text1(2)] 3—置位复位地址指定区(Text4)(www.xing528.com)
以下为计算校验和,即Function SumChk(Dats$)函数程序
如图5-112所示,再如点击“置位”键,将把指定的位,如本例为Y0000,置成1。而如击“复位”键,将把指定的位,如本例为Y0000,置成0。
其置位程序,即Command1_Click()如下:
【实例程序3】 计算机与S7-200PPI协议通信VB6.0编程。图5-113所示为其通信程序画面。程序可实现对字数据读、写等功能。
图5-113 PPI通信程序画面
1—命令编辑框(Text4) 2—发送命令报文框(Text1) 3—命令响应、确认框(Text2) 4—命令回应框(Text3)
从图5-113可知,它除了有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)。
以下为以上各个过程的程序代码。可参照注解阅读。
图5-114所示为运行上述程序后出现的PPI通信程序运行画面。对其进行操作过程是先在命令编辑框上写入命令代码(可参照本章附录中关于PPI协议填写),然后用鼠标左键点击“命令发送”按键。
图5-114 PPI通信程序运行画面
如图5-114所示,这时,将在“发送命令报文框”显示所编辑命令(图示的仅校验码与编辑框不同,本软件可自动生成校验码及命令长度,编辑时,可任意填写)。如通信成功,还将有命令响应码、计算机确认码及命令回应报文。在这个命令回应报文中,黑体字FF即为所读的QB0的数据(为什么是它?请参阅本书附录C)。
如直接用鼠标左键点击“wVB100=99”,将使PLC的VB100写为99。如直接用鼠标左键点击“VB100”,将读PLC的VB100的值,并显示在命令回应报文的倒数第5、6字中。如直接用鼠标左键点击“PLC-run”,将使PLC运行。如直接用鼠标左键点击“PLC-stop”,将使PLC停止运行。
本软件方便之处是通信命令可任意编辑。只要编辑正确,合乎协议要求,即可执行。建立用它对协议的一些细节多些测试。以便更全面地弄通PPI协议。
【实例程序4】 计算机与欧姆龙PLC通信VB.Net编程。VB.Net包装在微软新版本的Visual Studio 2005开发工具中。使VB提升为也可面向对象及多线程编程。在它的NET Framework2.0类库中,包含有Serial Port类(用于串口通信),类似VB6.0的Mscomm控件,但功能也有很大提升,可更方便地用于串口通信程序编程。
图5-115所示为VB.Net的开发环境及建立的一个工程“VB.Net”窗口。
从图5-115可知,在VB.Net窗口上,加载了5个button按钮控件及3个textBox文本控件。前者用于激发执行与通信相关的程序,后者用以键入与显示通信数据。此外,还有串口通信控件SerialPort1。
这5个button1~5分别用于打开串口、关闭串口、启动fcs校验码计算、发送通信命令及接收通信数据。3个textBox,1用于键入通信命令,2用于存储fcs运算结果,3用于显示接收数据。
程序作为Form1类包装在一起,其有关代码及必要注释如下。
图5-115 VB.Net开发环境及Form1窗口
图5-116所示为本程序运行画面。这时,如在textBox中键入“@00RD00000020”通信命令(读DM0000开始的10个字的数据),然后用鼠标左键点击button3(FCS校验),再用鼠标左键点击button1(打开通信口),再用鼠标左键点击button4(发送命令),再用鼠标左键点击button5(接收数据)。如通信正常,将看到如图5-116所示的情况。输入其它命令将有不同显示。要结束通信,可用鼠标左键点击button2(关闭通信口)。要退出系统,可用鼠标左键点击窗口右上角的“”键。
【实例程序5】 计算机与欧姆龙PLC通信C#编程。C#编程语言是微软在微软新版本的VisualStudio2005中,新开发的编程语言。具有VB界面好、开发快及VC程序效率高、运行速度快的双重优点。也是与SUN公司JAVA“PK”的产物。它也自带有通信控件SerialPort,可很方便地用以编程写通信程序。
图5-117所示为C#的开发环境及建立的一个工程“C#”窗口。
图5-116 通信程序运行画面
图5-117 C#开发环境及Form1窗口
从图5-117知,在C#窗口上,与上述VB.Net窗口一样,也加载了5个button按钮控件及3个textBox文本控件。前者用于激发执行与通信相关的程序,后者用以键入与显示通信数据。此外,还有串口通信控件SerialPort1。
这5个button1到5分别用于打开串口、关闭串口、启动fcs校验码计算、发送通信命令及接收通信数据。3个textBox,1用于键入通信命令,2用于存储fcs运算结果,3用于显示接收数据。
程序关代码及必要注释如下。
本程序运行与图5-116所示VB.Net的运行画面相同。如在textBox中键入“@00RD00000020”通信命令(读DM0000开始的10个字的数据),然后用鼠标左键点击button3(FCS校验),再用鼠标左键点击button1(打开通信口),再用鼠标左键点击button4(发送命令),再用鼠标左键点击button5(接收数据)。如通信正常,将看到如图所示的情况。输入其它命令将有不同显示。要结束通信,也可用鼠标左键点击button2(关闭通信口)。要退出系统,可用鼠标左键点击窗口右上角的“”键。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。