西门子自由口通讯知识Word格式文档下载.docx
《西门子自由口通讯知识Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《西门子自由口通讯知识Word格式文档下载.docx(11页珍藏版)》请在冰豆网上搜索。
11奇校验
d:
这一位用于选择通讯的数据位数
d=1时7个数据位,d=0时8个数据位
bbb:
用于选择自由口通讯是的波特率,这三位的组合和通讯波特率的关系如下:
000——38400bps
001——19200bps
010——9600bps
011——4800bps
100——2400bps
101——1200bps
110——600
bps
111——300
mm:
用于通讯协议的选择,当这两位的组合是:
00
ppi从站模式
01自由口通讯模式
10
ppi主站模式
2.2接收信息的状态字节
s7-200在自由口通讯时用于接受信息的状态有smb86和smb186,smb86用于s7-200的端口0的通讯,smb186用于s7-200的端口1的通讯,两者的格式一样,下面我们以smb186为例,介绍其组成。
smb186各位的含义如下:
n=1时:
表示禁止接收信息
r=1时:
表示接收信息结束
e=1时:
表示收到结束字符
t=1时:
表示接收信息超时错误
c=1时:
表示接收信息字符超长错误
p=1时:
表示接收信息奇、偶校验错误
2.3接收信息的控制字节
s7-200在自由口通讯时用于接受信息的控制字节有smb87和smb187,smb87用于s7-200的端口0的通讯,smb187用于s7-200的端口1的通讯,两者的格式一样,下面我们以smb187为例,介绍其组成。
smb187各位的含义如下:
en=0时:
禁止接收信息
en=1时:
允许接收信息
sc=0时:
不使用起始字符开始
sc=1时:
使用起始字符做为接收信息的开始
ec=0时:
不使用结束字符结束
ec=1时:
使用结束字符做为接收信息的结束
il=0时:
不使用空闲线检测
il=1时:
使用空闲线检测
c/m=0时:
定时器是字符定时器
c/m=1时:
定时器是信息定时器
tmr=0时:
不使用超时检测
tmr=1时:
使用超时线检测
bk=0时:
不使用中断检测
bk=1时:
使用中断检测
2.4其它和自由口通讯有关的特殊字节(见表1)
2.5自由口通讯的指令
(1)发送指令xmt其指令格式如图所示:
发送指令用于激活发送数据缓冲区tbl中的数据,数据格式如下所示,数据缓冲区中的第一个数据是指定要发送的数据的总字节数,最大为255个,从第二个数据开始是依次要发送的数据。
port指定用于发送的端口,在发送完缓冲区中的最后一个数据时产生中断事件。
(2)发送指令rcv其指令格式如图所示:
接收指令rcv用于从指定的端口接收数据,并将接收到的数据存储与其参数tbl所指定的缓冲区内,缓冲区的第一个字节指示接收到的字节数量,第二个字节指示接收的起始字符,最后一个字节指示的是结束字符,起始字符和结束字符之间的是接收到的数据,同发送缓冲区一样,接收缓冲区的最大数量也是255个字节。
(3)与自由口通讯有关的中断(见表2)
3
plc自由口通讯的程序设计
3.1自由口通讯的初始化子程序(见图1)
图1(a)
图1(b)
图1(c)
图1(d)
3.2自由口通讯的发送子程序(见图2)
图2(a)
图2(b)
3.3自由口通讯的接收程序(见图3)
图3(a)
图3(b)
3.4自由口通讯的开始接收中断服务程序(见图4)
图4
自由口通讯的开始接收中断服务程序
3.5自由口通讯的接收完成中断服务程序(见图5)
图5
自由口通讯的接收完成中断服务程序
4
vb中的串行口通讯组件介绍
4.1vb中串行通讯控件的引用
在vb的标准工具箱中并没有用于串行通讯的控件,在使用时需要引用,引用的方法是在vb界面中的下拉菜单中选择[工程]/部件,在出现的可选文件中选择msccomm32.ocx,选择引用后在vb的标准工具箱中就会出现vb下的串行口通讯控件。
如果无法按照上述的方法在部件中成功地引用组件,也可以使用该程序中的浏览功能,到windows/system目录下去找msccomm32.ocx,并打开该文件。
4.2vb中串行通讯控件的属性
(1)commport:
该属性用于设置vb应用程序所使用的串行口号,其设置值为1~16,对应计算机的com1~com16号端口。
(2)settings:
该属性用于设置串行口的通讯参数,其格式为“bbbb,p,d,s”其中bbb为通讯的波特率,波特率范围为300~19200bps;
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.3vb中串行通讯控件的事件
(1)commevent属性用于传回下列所述的值之一,来表示不同的通讯错误或事件,通讯错误的返回值如表4所示。
(2)通讯事件的返回值如表5所示。
4.4visualbasic中用于串口通讯的程序代码
(1)在form1的代码的公共部分定义变量:
dimrcvlenth
as
integer
定义接收数据长度的整形变量
dimrcv()
byte
定义接收数据的动态数组
dimsend(50)
asbyte
定义发送数据的动态数组
(2)在form1——load的代码中对mscomm1控件进行设置:
privatesubform_load()
rcvlenth=0
mport=1
指定计算机通讯的端口号
mscomm1.settings="
9600,n,8,1"
设置通讯波特率及校验方式
mscomm1.inputmode=cominputmodebinary
mscomm1.rthreshold=1
mscomm1.inputlen=0
mscomm1.outbuffercount=0
ifnotmscomm1.portopenthenmscomm1.portopen=true
endsub
(3)在mscomm1的oncomm()事件中加入以下代码,用于接收数据:
privatesubmscomm1_on-comm()
dimiasintger
dimrcvtemp()asbyte
redimpreservercv(mscom-m1.inbuffercount)asbyte
selectcase-mevent
casecomevreceive
rcvtemp=mscomm1.input
fori=lbound(rcvtemp)toubound(rcvtemp)
rcvlenth=rcvlenth+1
rcv(rcvlenth)=rcvtemp(i)
nexti
endselect
(4)在timer1_timer()事件中加入如下代码用于定时的发送数据:
privatesubtimer1_timer()
fori=1to50
mscomm1.output=send(i)
(5)程序界面如图6所示。
图6
程序界面
5
结束语
s7-200的自由口通讯方式,使用户可以通过plc指令自己定义通讯协议,从而与任何公开通讯协议的rs-422或rs-232c接口设备进行通讯,使通讯范围大为增加,控制系统配制更加灵活。
本文也介绍了采用vb进行串行口通讯的控件和编程方法。
采用本文叙述的方法,可以组成一个上、下位机控制管理系统,将plc的信息转换成各类画面显示,并可以对plc的参数进行实时修改,达到管理、控制一体化。
作者简介
刘红兵
男
供职于太原科技大学电子信息工程学院。
参考文献
[1]
西门子s7-200用户手册,2005
[2]
刘明芹.plc控制技术.北京:
化工出版社
[3]
陈立元.利用visualbasic实现串并行通讯技术.北京:
清华大学出版社