730 likes | 882 Views
第 2 章 PC 串行通信编程. 第四讲 串口通信控件的基本知识. 一 . Mscom 控件的引用 1 引入原因 硬件 : RS-232 接口、 RS232 串口 软件: Mscomm 控件(又称电话盒控件) 2 引用方法 方法 1. VB — 工 程 — 部件 —“ Microsoft comm Control 6.0 ”— 确 定 方法 2. VB — 工 程 — 部件 — 浏 览 — MScomm32.ocx —“ Microsoft comm Control 6.0 ”— 确 定. 3 注意事项
E N D
第2章 PC串行通信编程
一. Mscom控件的引用 1 引入原因 硬件: RS-232接口、RS232串口 软件:Mscomm控件(又称电话盒控件) 2 引用方法 方法1. VB—工程—部件—“Microsoft comm Control 6.0”—确定 方法 2. VB—工程—部件—浏览—MScomm32.ocx—“Microsoft comm Control 6.0”—确定
3 注意事项 (1)mscomm控件只有在vb的企业版及专业版里应用,在学习版中无法使用 (2)每开启一个新的项目,都要重新引入一个mscomm控件,如果开启的是以前的项目,则项目会自动搜索并加载此控件 (3)每个mscomm控件对应一个串行端口,如果应用程序要访问多个串行端口,必须使用多个mscomm控件 (4)大多数计算机只有1个端口,Com1
二. Mscomm控件简介 1 简介 Mscomm(Microsoft Communication Controls)是微软公司提供的简化windows下的串行通信编程的Active控件,它为应用程序提供了通过串行接口收发数据的简便方法。
2 Mscomm控件处理通信的方式 (1)事件驱动方式 事件驱动通信方式是处理穿行端口交互作用的一种非常有效的方法。 (2)查询方式(轮询) 在用户程序中设计定时或不定时查询MSComm控件的某些属性是否发生变化,从而确定相应处理。在程序空闲时间较多时可以采用该方式
3 Mscomm控件操作的步骤 (1)对象:首先要了解所要操作的对象—mscomm控件 (2)属性:设定该对象所具备的特性 (3)事件:该对象在系统执行的过程中因其他事件而发生的事情 (4)方法:当该对象被引发了某个事件后,系统或程序应该采用的相应步骤
三. Mscomm属性 1 Commport属性 设定或传回通信连接端口代号,程序必须指定所要使用的串行端口的号码 程序代码:Mscomm1.commport=1
2 settings:设定初始化参数。以字符串的形式设定或传回联机速度、同位位检查、数据位、停止位四个参数(BBBB,P,D,S) eg: Mscomm1.settings=“9600,n,8,1” 同 位 位 检 查
4 Input:从输入缓冲区传回并移除字符串 程序代码:text1.text=mscomm1.input 数据流动方向:缓冲区 程序 5 output:将一个字符串写入传输缓冲区 程序代码:mscomm1.output=“谁没有听课?” 数据流动方向:缓冲区 程序 6 inputlen :指定由串行端口读入的字符串长度 程序代码: Mscomm1.inputlen=10
7 Handshaking :指定通信两方的交握协议即流量控制。 交握协议的设定: 程序代码:mscomm1.Handshakin=1 思考:可以传送chr(19)吗?
8 Rthreshold:设定或传回引发接收事件的字符数 程序代码:对象名称.Rthreshold=20 9 Sthreshold:设定或传回引发传送事件的字符数 程序代码:对象名称.sthreshold=20 Rthreshold =20,字符数>=20程序才会从缓冲区读入信息 Rthreshold = 0,无论有多少字符均会被读取 Sthreshold =20,字符数<20程序才会把信息传入缓冲区 Rthreshold = 0,无论有多少字符均不会被传送
10 Commevent: 返回通信错误或事件发生时产生的oncomm事件的代码。 通 信 错 误 设 定:
11 DTREnable:判断在通信是是否启用DTR线路 程序代码:对象名称.DTREnable=true 12 RTSEnable:决定是否使RTS线有效 程序代码:对象名称.RTSEnable=false 13 InbufferCount:传回在接收缓冲区的字符数 程序代码: Count%=对象名称.inbuffercount
14 InputMode:设定或传回Input属性传回的数据的形态 程序代码:mscomm1.inputmode=1 使用二进制形式: (1)在数据中嵌入了NULL等控制字符 (2)所运用的字符超过了ASCⅡ128 其他场合使用文本形式传出
四. Mscomm事件 • VB中mscomm控件可以产生oncomm事件。
一.RS-232串口通信的步骤 1 加入通信对象 2 设定通信端口号码,Commport属性 3 设定通信协议,Handshaking 4 设定传输速度等参数,Setting属性 5 设定其他参数,若必要时再加上其他的属性设定 6 开启通信端口,portopen属性 7 送出或读入字符串。使用input或output属性 8 完成后关闭通信端口
二. 回路测试 1. 原理:利用RS232上的接脚位置,将第二脚与第三脚连接在一起,形成短路。因此,第二脚与第三脚的电位变化将会相同,第二脚用于接收数据,第三脚用于发送数据,数据因此被接收,如此的流程形成数据自己传送自己接收的现象,即回路测试
2. 硬件连接 3. 画面设计
(1)通信端口的打开 Private Sub Form_Load() MSComm1.PortOpen = True End Sub (2)传送信息 Private Sub Command1_Click() • MSComm1.output=txtsend.Text • End Sub 4. 程 序 代 码
(3) 接收信息 • Private Sub Command2_Click() • Dim buf$ • buf = Trim(MSComm1.Input) • If Len(buf) = 0 Then • txtrecieve.Text = "empty" • Else • txtrecieve.Text = txtrecieve.Text &buf • End If • End Sub
4) 关闭通信端口 Private Sub Command3_Click() MSComm1.PortOpen = False End End Sub
5. 知识点 (1) Trim()函数 作用:使用附加的形势不断地将文字加上去 Eg:text1.text=Trim(text2.text) 注意:trim()指令会将所接收字符串前后的空格拿掉 (2) len() 作用:求字符串或文本的长度 Eg: text1.text=len(abcdef)
四. 自动读取传入的字符串 1. 原理:利用定时器的方式达到自动接收信息的目的 2.硬件连接
4.程序代码 (1)打开通信端口 Private Sub Form_Load() MSComm1.PortOpen = True End Sub (2)利用定时器控件实现信息的自动接收 Private Sub Timer1_Timer() If MSComm1.InBufferCount > 0 Then txtrecieve2.Text = txtrecieve2.Text + MSComm1.Input End If End Sub
(3) 定时器控件的 激活\停止 Private Sub Command1_Click() Timer1.Enabled = Not Timer1.Enabled End Sub (4) 关闭通信端口 Private Sub Command2_Click() MSComm1.PortOpen = False End End Sub
五. 利用commevent属性与事件实现自动读取 1. 原理:利用Oncomm事件达到自动接收信息的目的 Select Case MSComm1.CommEvent Case comEvCD Case comEvCTS Case comEvDSR Case comEvRing Case comEvrecieve comEvSend End Select
4. 程序代码 1) Private Sub Form_Load() MSComm1.PortOpen = True End Sub 2) Private Sub Command1_Click() MSComm1.Output =Trim(txtsend.Text) End 3)Private Sub Command3_Click() txtrecieve.Text = "" End Sub
4) 利用控件属性实现自动接收 Private Sub MSComm1_OnComm() Select Case MSComm1.CommEvent Case comEvCD Case comEvCTS Case comEvDSR Case comEvRing Case comevrecieve txtrecieve.Text = txtrecieve.Text + Trim(MSComm1.Input) Case comEvSend End Select End Sub
5) Sub Private Sub Command2_Click() MSComm1.PortOpen = False End End Sub
六. 字符与字节 1. 数据的交换编码: Text模式:可见字符 Binary二进制模式:8位二进制码 UniCode:双字节字符(DBCS) 如“A”为4100,“中”为164,154 2. Inputmode的属性值 Inputmode=0 文本 Inputmode=1 二进制
3 字符转换成ASCII 格式:Asc(“要转换的字符”) Asc(“A”) ASCII转换成字符 格式:Chr(ascii值) Chr(65) 例题:Asc(chr(133))
4. Hex(Asc(“电”)) 答案:B971 5. 字符数计算 Len(“ABC中文”) LenB(“ABC中文”) 字符数 字节数
6.StrConv()函数 功能:英文以一个字节表示,中文以两个字节表示 格式:StrConv(“转换的字符串”,VBFromUnicode) VBFromUnicode:由Unicode转换成系统默认的字符码 VbUnicode:由系统默认的字符码转换成Unicode. A=lenB(StrConv(“ABC英文”, VBFromUnicode)
7.字节的传送 Private Sub Command1_Click() buf = Trim(Text1.Text) OutByte = StrConv(buf, vbFromUnicode) Comm1.Output = OutByte End Sub
8.字节的接收 Private Sub Command3_Click() buf = "" InByte = Comm1.Input For i = LBound(InByte) To UBound(InByte) buf = buf + Hex(InByte) + Chr(32) nest i Text2.Text = buf End Sub
一. 计算机与设备数据交换的步骤: • PC发出一个命令串:前导码、站号、数据、校验位 • 设备收到后,送出PC要求的数据 PC告诉设备已收到,或再次要求
SOH 表头 STX 本文 ETX EOT 校验 ASCII码中的控制字符: • NUL 空项 • SOH 表头开始字符 • STX 本文开始 • ETX 本文结束 • EOT 发送结束 • ENQ 查询 • ACK 认可 • NAK 否认 • SYN 同步 • ESC 跳脱(打印机用)
二 .数据服务器的仿真 1. 目的:实现数据服务器的仿真。远程通过命令来获取相应的信息