您当前的位置:五五电子网电子知识电器控制PLC工业控制西门子S7-200PLC自由口通讯的实现及应用设计 正文
西门子S7-200PLC自由口通讯的实现及应用设计

西门子S7-200PLC自由口通讯的实现及应用设计

点击数:7597 次   录入时间:03-04 11:55:44   整理:http://www.55dianzi.com   PLC工业控制

图3(a)

图3(b)

3.4 自由口通讯的开始接收中断服务程序(见图4)

图4  自由口通讯的开始接收中断服务程序

3.5 自由口通讯的接收完成中断服务程序(见图5)

图5  自由口通讯的接收完成中断服务程序


4  vb中的串行口通讯组件介绍
4.1 vb中串行通讯控件的引用
    在vb的标准工具箱中并没有用于串行通讯的控件,在使用时需要引用,引用的方法是在vb界面中的下拉菜单中选择[工程]/部件,在出现的可选文件中选择msccomm32.ocx,选择引用后在vb的标准工具箱中就会出现vb下的串行口通讯控件。如果无法按照上述的方法在部件中成功地引用组件,也可以使用该程序中的浏览功能,到windows/system目录下去找msccomm32.ocx,并打开该文件。
4.2 vb中串行通讯控件的属性
    (1) commport:该属性用于设置vb应用程序所使用的串行口号,其设置值为1~16,对应计算机的com1~com16号端口。
    (2) settings:该属性用于设置串行口的通讯参数,其格式为“bbbb,p,d,s”其中bbb为通讯的波特率,波特率范围为300~19200 bps;p为奇偶校验方式,其设置方法是e代表偶校验,o代表奇校验,n代表无校验;d为通讯的数据位数,通常是8位或7位;s代表停止位,停止位的设定值有1、1.5、2。例如,setting属性的设置为,mscomm。settings= 9600,n,8,1表示通讯波特率为9600,无校验,8个数据位,1个停止位。
    (3) portope:在使用串行口进行通讯前必须先打开串行口,该属性用于串行口的打开与关闭,其设置值为true或false,分别代表串行口的打开与关闭。
    (4) input:该属性的作用是从输入缓冲器中将数据读入到程序中,并清除缓冲区中已被读走的内容。
    (5) output:该属性的作用是从程序中写数据到输出缓冲器中,写入到输出缓冲器中的内容由串口发送出去。
    (6) inputlen:该属性指定由串行口读入的字符串长度,vb所写的程序可以使用该属性将存放在输入缓冲器中读入,但欲指定所读入的字符的长度则可以通过该属性来设置,默认值是0,在默认情况下,input指令一次读取所有输入缓冲区中的数据。
    (7) rthrehold:该属性用于设置当输入缓冲器中接收到的字符数等于该属性的设定值时,引发接受事件on -comm事件。当mscomm.rthreho -ld=0时不会产生oncomm事件。
    (8) inbuffercount:该属性是指已接收到的并放在输入缓冲器中等待读取的字符的数量。在使用时可把该属性设置为0用来清除输入缓冲器。
    (9) inputmode:该属性用于设置由input属性取回的数据的形式。该属性设置值如表3。

4.3 vb中串行通讯控件的事件
    (1) commevent属性用于传回下列所述的值之一,来表示不同的通讯错误或事件,通讯错误的返回值如表4所示。

(2) 通讯事件的返回值如表5所示。

4.4 visual basic中用于串口通讯的程序代码
    (1) 在form1的代码的公共部分定义变量:
    dim rcvlenth  as  integer  
    定义接收数据长度的整形变量
    dim rcv()    as   byte 
    定义接收数据的动态数组
    dim send(50)  as byte 
    定义发送数据的动态数组
    (2) 在form1——load的代码中对mscomm1控件进行设置:
    private sub form_load()
    rcvlenth=0
    mscomm1.commport=1                指定计算机通讯的端口号
    mscomm1.settings = "9600,n,8,1"   设置通讯波特率及校验方式
    mscomm1.inputmode= cominputmodebinary
    mscomm1.rthreshold=1
    mscomm1.inputlen=0
    mscomm1.outbuffercount=0
    if not mscomm1.portopen then mscomm1.portopen = true
    end sub
    (3) 在mscomm1的oncomm()事件中加入以下代码,用于接收数据:
    private sub mscomm1_on-comm()
    dim i as intger
    dim rcvtemp() as byte
    redim preserve rcv (mscom-m1.inbuffercount) as byte
    select case mscomm1.com-mevent
    case comevreceive
    rcvtemp=mscomm1.input
    for i=lbound(rcvtemp) to ubound(rcvtemp)
    rcvlenth=rcvlenth + 1
    rcv(rcvlenth)=rcvtemp(i)
    next i 
    end select
    end sub
    (4) 在timer1_timer()事件中加入如下代码用于定时的发送数据:
    private sub timer1_timer()
    dim i as intger
    for i=1 to 50
    mscomm1.output = send(i)
    next i 
    end sub
    (5) 程序界面如图6所示。

图6  程序界面

5  结束语
    s7-200的自由口通讯方式,使用户可以通过plc指令自己定义通讯协议,从而与任何公开通讯协议的rs-422或rs-232c接口设备进行通讯,使通讯范围大为增加,控制系统配制更加灵活。本文也介绍了采用vb进行串行口通讯的控件和编程方法。采用本文叙述的方法,可以组成一个上、下位机控制管理系统,将plc的信息转换成各类画面显示,并可以对plc的参数进行实时修改,达到管理、控制一体化。

上一页  [1] [2] 


本文关键字:西门子  PLC工业控制电器控制 - PLC工业控制