利用VB开发串口通信程序既可以使用MSComm控件也可以调用Windows API函数实现。不过,只要MSComm控件可以被选用,我们推荐选择此控件实现,因为MSComm控件的功能和API调用一样强,甚至比它还好且使用起来更加简单。
在本章提供的串口通信程序设计中,除了PC与PC串口通信外,PC与单片机、PC与智能仪表、PC与PLC、PC与GSM短信模块等串口通信任务的实现均采用MSComm控件。
6.1 PC与PC串口通信程序设计
当两台串口设备通信距离较近时,可以直接连接,最简单的情况,在通信中只需3根线(发送线、接收线、信号地线)便可实现全双工异步串行通信。
本设计通过两台PC串口3线连接,介绍了利用API函数和MSComm控件设计串口通信程序的方法,包括字符与文件的发送与接收。
6.1.1 PC与PC串口通信程序设计目的
(1)掌握PC与PC串口通信的线路连接方法。
(2)利用MSComm控件和API函数实现PC与PC串口通信的程序设计方法。
6.1.2 PC与PC串口通信程序设计用软、硬件
本设计用到的硬件和软件清单如表6-1所示。
表6-1 设计用软、硬件
| 序 号 | 名 称 | 数 量 |
| 1 | PC或IPC | 2 |
| 2 | 串口通信线(三线制) | 1 |
| 3 | Visual Basic 6.0 | 1 |
线路说明,在计算机通电前,按图6-1所示将两台PC通过串口线连接起来:计算机A串口COM1端口的TXD与计算机B串口COM1端口的RXD相连,计算机A串口COM1端口的RXD与计算机B串口COM1端口的TXD相连,计算机A串口COM1端口的GND与计算机B串口COM1端口的GND相连。
计算机B
计算机A
图6-1 PC与PC串口通信线路
6.1.4 设计任务
利用MSComm控件和VB API函数编写程序实现PC与PC串口通信。
任务要求,两台计算机互发字符并自动接收,如一台计算机输入字符串“Please return abc123”,单击“发送字符”命令,另一台计算机若收到,就输入字符串“abc123”,单击“发送字符”命令,信息返回到第一组的计算机。
实际上就是编写一个简单的双机聊天程序。
6.1.5 任务实现
6.1.5.1 利用MSComm控件实现字符型数据发送与接收
1.建立新工程
VB使用“工程”来管理每一个应用程序要使用的所有文件,每建立一个新程序,就要新建一个工程。一个工程由窗体、标准模块、控件及应用所需的开发环境设置等组成。
运行VB程序,出现“新建工程”对话框,选择“标准EXE”,单击“打开”命令按钮,进入VB工程集成开发环境,窗体设计器中自动出现一个名为Form1的空白窗体。
2.程序界面设计
向空白窗体添加各种控件,以完成预定的各种功能。开始一个项目的设计时,VB的工具箱中会有许多默认的控件让设计者予以选用,这些原本就出现在工具箱中的控件是内置控件,它提供了一些基本的系统设计组件给设计者,但功能比较特别的控件就不会出现在其中,如用来设计串口通信功能的控件MSComm就不在其中。
(1)添加串口通信控件MSComm。
由于VB的串行通信组件并不会主动出现在工具箱里中,当我们需要MSComm控件时,首先要把它加入到工具箱中。
让MSComm控件出现在工具箱中的步骤如下。
选择“工程”菜单下的“部件…”子菜单,在弹出的“部件”对话框中,在“控件”选项卡属性中选中“Microsoft Comm Control 6.0”复选框,单击“确定”按钮后,在工具箱中就出现了一个形似“电话”的图标,它就是MSComm控件。
工具箱中有了MSComm控件,就可以选择MSComm控件的图标后将其添加到程序窗体上,利用该控件编程,PC就可以通过VB实现与串口设备的串口通信了。
图6-2 程序窗体界面
由于每个使用的MSComm控件对应着一个串行端口,如果应用程序需要访问多个串行端口,必须添加多个MSComm控件。
(2)为了实现连续的自动接收,将工具箱中的Timer控件添加到程序窗体上。
(3)添加两个文本框控件:Text1 和Text2,用于输入要发送的字符和显示要接收的字符。
(4)添加两个标签控件:Label1和Label2,作为发送和接收字符区的标签。
(5)添加一个按钮控件:Command1执行发送字符命令。
程序设计界面如图6-2所示。
3.属性设置
从属性窗口设置属性时,只需从对象列表框中选择待设置属性的对象,然后从属性列表的左列选择属性,最后在属性列表的右列中输入或选择新的属性值。
程序窗体、控件对象的主要属性设置如表6-2所示。
表6-2 窗体、控件对象的主要属性设置
| 控 件 类 型 | 主 要 属 性 | 功 能 |
| Form | (名称) = COMForm | 窗体控件 |
| BorderStyle = 3 | 运行时窗体固定大小 | |
| Caption = PC与PC串口通信 | 窗体标题栏显示程序名称 | |
| Label | (名称) = Label1 | 标签控件 |
| Caption = 显示接收字符区: | 标签文本 | |
| Label | (名称) = Label2 | 标签控件 |
| Caption = 输入发送字符区: | 标签文本 | |
| TextBox | (名称) = Textsend | 文本框控件 |
| MultiLine = True | 允许多行显示 | |
| ScrollBars = 2-Vertical | 垂直滚动条可用 | |
| TextBox | (名称) = TextReceive | 文本框控件 |
| MultiLine = True | 允许多行显示 | |
| ScrollBars = 2-Vertical | 垂直滚动条可用 | |
| CommandButton | (名称) = Cmdsend | 按钮控件 |
| Caption = 发送字符 | 手动发送字符 | |
| MSComm | (名称) = MSComm1 | 串口通信控件 |
| 其他属性在程序中设置 | ||
| Timer | (名称) = Timer1 | 时钟控件 |
| Enabled = True | 时钟初始可用 | |
| Interval = 500 | 设置发送周期(ms) |
| 两台计算机中VB程序界面及属性设置应完全相同,尤其MSComm控件的InputMode和Settings属性值应相同。 |
程序要实现自动发送或读取,在VB程序中有两个方式可以达到,一是查询方式,利用查询事件是否发生,当发生时,去执行默认的程序代码。可以使用计时器控件(Timer),该控件属性中的Interval可以控制计时器被启动的时间间隔,当时间间隔一到,便会执行原先放在计时器中的程序代码。
下面是利用查询方式编写的PC与PC串口通信的参考程序,代码如下所示:
' 串口初始化
Private Sub Form_Load()
MSComm1.CommPort = 1 ' 设置通信端口号为COM1
设置串口1参数
MSComm1.InputMode = 0 ' 接收文本型数据
MSComm1.PortOpen = True ' 打开通信端口1
End Sub
' 把字符通过串口发送出去
Private Sub Cmdsend_Click()
If Textsend.Text = "" Then
pp = MsgBox("发送的数据不能为空!", 16)
Exit Sub
End If
MSComm1.Output = Trim(Textsend.Text)
For i = 1 To 20000000
Next i
End Sub
' 通过时钟控制来自动接收字符
Private Sub Timer1_Timer()
Dim buf$
buf = Trim(MSComm1.Input) ' 将缓冲区内的数据读入buf变量中
If Len(buf) <> 0 Then ' 判断缓冲区内是否存在数据
TextReceive.Text = TextReceive.Text + Chr(13) + Chr(10) + buf //回车换行
End If
End Sub
' 关闭通信端口,停止程序运行
Private Sub Cmdquit_Click()
MSComm1.PortOpen = False
Unload Me
End Sub
在Windows系统环境下,串口是系统资源的一部分。应用程序要使用串口进行通信,必须在使用之前向操作系统提出资源申请要求(打开串口),通信完成后必须释放资源(关闭串口)。在Windows系统的系统函数中,均包含了支持通信中断的功能。
二是使用事件方式。MSComm控件提供事件回应功能,可以利用此功能达到自动发送/接收的目的。下面是利用事件方式编写的PC与PC串口通信的参考程序,界面设计与图6-2基本相同,区别是事件方式不需要时间控件。
'串口初始化
Private Sub Form_Load()
MSComm1.CommPort = 1 '设置通信端口号为COM1
MSComm1.Settings = "9600,n,8,1" '设置串口参数
MSComm1.InputMode = 0 '接收文本型数据
MSComm1.RThreshold = 1 '接收缓冲区每收到一个字符都会使 MSComm 控件触发OnComm 事件
MSComm1.PortOpen = True '打开通信端口1
End Sub
'把字符通过串口发送出去
'启动定时器
Private Sub Cmdsend_Click()
If Textsend.Text = "" Then
pp = MsgBox("发送的数据不能为空!", 16)
Exit Sub
End If
MSComm1.Output = Trim(Textsend.Text)
End Sub
'MSComm 的 OnComm 事件程序
'由 CommEvent 属性值的不同,将各自的程序代码写入相关的子程序中
'只要 RThresold 中的设定字符数到达时便会使得 CommEvent 属性值变成 comEvReceive
'因此接收的子程序便会被执行
Private Sub MSComm1_OnComm()
Dim buf$
Select Case MSComm1.CommEvent
'通过取代每一个 case 表达式来处理每个事件与错误
Case comEvCD ' CD 线的状态发生变化
Case comEvCTS ' CTS 线的状态发生变化
Case comEvDSR ' DSR 线的状态发生变化
Case comEvReceive
buf = Trim(MSComm1.Input) '将缓冲区内的数据读入buf变量中
Case comEvSend
End Select
TextReceive.Text = TextReceive.Text & buf
End Sub
'停止程序运行
Private Sub Cmdquit_Click()
Unload Me
End Sub
'关闭通信端口,
Private Sub Form_Unload(Cancel As Integer)
MSComm1.PortOpen = False
End Sub
5.运行程序
程序设计、调试完毕,单击工具栏快捷按钮“启动”,运行程序。
| 两台计算机同时运行本程序。 |
如果联网通信的另一台计算机程序收到字符,则返回字符串,如“收到,我是第2组!”,如果通信正常该字符串将显示在接收区中。
程序运行界面如图6-3所示。
图6-3 程序运行界面
6.1.5.2 利用API函数实现字符型数据发送与接收
1.建立新工程
运行VB,创建标准的工程项目文件,设计程序窗体。
图6-4 程序窗体界面
① 添加两个TextBox控件,用于输入要发送的字符和显示需接收的字符。
② 添加两个Label控件,作为发送和接收字符区的标签。
③ 添加一个Timer控件,用于周期性地读取串口数据。
④ 添加两个CommandButton控件,分别执行发送字符、关闭程序等命令。
设计的程序界面如图6-4所示。
2.属性设置
程序窗体、控件对象的主要属性设置如表6-3所示。
表6-3 窗体、控件对象的主要属性设置
| 控 件 类 型 | 名 称 | 主 要 属 性 | 功 能 |
| Form | COMForm | BorderStyle = 3 | 运行时窗体固定大小 |
| Caption = API串口通讯 | 窗体标题栏显示程序名称 | ||
| Label | Label1 | Caption =发送数据区: | 标签 |
| Label | Label2 | Caption =接收数据区: | 标签 |
| TextBox | Textsend | MultiLine = True | 允许多行显示 |
| ScrollBars = 2-Vertical | 垂直滚动条可用 | ||
| TextBox | TextReceive | MultiLine = True | 允许多行显示 |
| ScrollBars = 2-Vertical | 垂直滚动条可用 | ||
| CommandButton | BTNSend | Caption = 发送数据 | 手动间断发送字符 |
| CommandButton | BTNCloseCom | Caption = 关闭程序 | 关闭程序 |
| Timer | TMRComm | Interval = 500 | 设置发送周期(ms) |
' 在程序标准模块SerialPort.bas的说明部分放置使用的API函数声明及所用的结构、常数的声明:
Option Explicit
Global ComNum As Long
Global bRead(255) As Byte
Type COMSTAT
fCtsHold As Long
fDsrHold As Long
fRlsdHold As Long
fXoffHold As Long
fXoffSent As Long
fEof As Long
fTxim As Long
fReserved As Long
cbInQue As Long
cbOutQue As Long
End Type
Type COMMTIMEOUTS
ReadIntervalTimeout As Long
ReadTotalTimeoutMultiplier As Long
ReadTotalTimeoutConstant As Long
WriteTotalTimeoutMultiplier As Long
WriteTotalTimeoutConstant As Long
End Type
Type DCB
DCBlength As Long
BaudRate As Long
fBinary As Long
fParity As Long
fOutxCtsFlow As Long
fOutxDsrFlow As Long
fDtrControl As Long
fDsrSensitivity As Long
fTXContinueOnXoff As Long
fOutX As Long
fInX As Long
fErrorChar As Long
fNull As Long
fRtsControl As Long
fAbortOnError As Long
fDummy2 As Long
wReserved As Integer
XonLim As Integer
XoffLim As Integer
ByteSize As Byte
Parity As Byte
StopBits As Byte
XonChar As Byte
XoffChar As Byte
ErrorChar As Byte
EofChar As Byte
EvtChar As Byte
End Type
Type OVERLAPPED
Internal As Long
InternalHigh As Long
offset As Long
OffsetHigh As Long
hEvent As Long
End Type
Type SECURITY_ATTRIBUTES
nLength As Long
lpSecurityDescriptor As Long
bInheritHandle As Long
End Type
Declare Function CloseHandle Lib "kernel32" (ByVal hObject As Long) As Long
Declare Function GetLastError Lib "kernel32" () As Long
Declare Function ReadFile Lib "kernel32" (ByVal hFile As Long, lpBuffer As Any, ByVal nNumberOfBytesToRead As Long, lpNumberOfBytesRead As Long, lpOverlapped As Long) As Long
Declare Function WriteFile Lib "kernel32" (ByVal hFile As Long, lpBuffer As Any, ByVal nNumberOfBytesToWrite As Long, lpNumberOfBytesWritten As Long, lpOverlapped As Long) As Long
Declare Function SetCommTimeouts Lib "kernel32" (ByVal hFile As Long, lpCommTimeouts As COMMTIMEOUTS) As Long
Declare Function GetCommTimeouts Lib "kernel32" (ByVal hFile As Long, lpCommTimeouts As COMMTIMEOUTS) As Long
Declare Function BuildCommDCB Lib "kernel32" Alias "BuildCommDCBA" (ByVal lpDef As String, lpDCB As DCB) As Long
Declare Function SetCommState Lib "kernel32" (ByVal hCommDev As Long, lpDCB As DCB) As Long
Declare Function CreateFile Lib "kernel32" Alias "CreateFileA" (ByVal lpFileName As String, ByVal dwDesiredAccess As Long, ByVal dwShareMode As Long, ByVal lpSecurityAttributes As Long, ByVal dwCreationDisposition As Long, ByVal dwFlagsAndAttributes As Long, ByVal hTemplateFile As Long) As Long
Declare Function FlushFileBuffers Lib "kernel32" (ByVal hFile As Long) As Long
窗体模块程序如下:
'初始化串口
Private Sub Form_Load()
If Not Init_Com("COM1:", "9600,n,8,1") Then
MsgBox "端口" & " 无效!"
Exit Sub
End If
End Sub
'发送字符
Private Sub BTNSend_Click()
If WriteCOM32(txt(2)) & vbCr <> Len(txt(2)) Then
MsgBox "写入错误"
Exit Sub
End If
End Sub
'向串口写数据
Function WriteCOM32(COMString As String) As Integer
On Error GoTo handelwritelpt
Dim RetBytes As Long, LenVal As Long
Dim retval As Long
If Len(COMString) > 255 Then
WriteCOM32 Left$(COMString, 255)
WriteCOM32 Right$(COMString, Len(COMString) - 255)
Exit Function
End If
For LenVal = 0 To Len(COMString) - 1
bRead(LenVal) = Asc(Mid$(COMString, LenVal + 1, 1))
Next LenVal
retval = WriteFile(ComNum, bRead(0), Len(COMString), RetBytes, 0)
WriteCOM32 = RetBytes
handelwritelpt:
Exit Function
End Function
'读取数据
Private Sub TMRComm_Timer()
Dim Ans As String, i As Integer, RtnStr As String
Ans = ReadCommPure()
If Ans = "" Then Exit Sub
RtnStr = RtnStr & CleanStr(Ans)
txtRec.Text = RtnStr
FlushComm
End Sub
'从串口读取数据
Function ReadCommPure() As String
On Error GoTo handelpurecom
Dim RetBytes As Long, i As Integer, ReadStr As String, retval As Long
Dim CheckTotal As Integer, CheckDigitLC As Integer
retval = ReadFile(ComNum, bRead(0), 255, RetBytes, 0)
ReadStr = ""
If (RetBytes > 0) Then
For i = 0 To RetBytes - 1
ReadStr = ReadStr & Chr(bRead(i))
Next i
Else
FlushComm
End If
ReadCommPure = ReadStr
handelpurecom:
Exit Function
End Function
Function CleanStr(TextLine As String) As String
Dim i As Integer, RtnStr As String
RtnStr = ""
For i = 1 To Len(TextLine)
Select Case Asc(Mid$(TextLine, i, 1))
Case &H5D
RtnStr = RtnStr & " Case &H5B RtnStr = RtnStr & " Case Is >= &H30 RtnStr = RtnStr & Mid$(TextLine, i, 1) Case 13 RtnStr = RtnStr & " Case 10 RtnStr = RtnStr & " Case Else RtnStr = RtnStr & "@" End Select Next i CleanStr = RtnStr End Function '清空文件缓冲区 Function FlushComm() FlushFileBuffers (ComNum) End Function '初始化端口 Function Init_Com(ComNumber As String, Comsettings As String) As Boolean On Error GoTo handelinitcom Dim ComSetup As DCB, Answer, Stat As COMSTAT, RetBytes As Long Dim retval As Long Dim CtimeOut As COMMTIMEOUTS, BarDCB As DCB ' 打开通讯口读/写(&HC0000000). ' 必须指定存在的文件 (3). ComNum = CreateFile(ComNumber, &HC0000000, 0, 0&, &H3, 0, 0) If ComNum = -1 Then MsgBox "端口 " & ComNumber & "无效. 请设置正确.", 48 Init_Com = False Exit Function End If '超时 CtimeOut.ReadIntervalTimeout = 20 CtimeOut.ReadTotalTimeoutConstant = 1 CtimeOut.ReadTotalTimeoutMultiplier = 1 CtimeOut.WriteTotalTimeoutConstant = 10 CtimeOut.WriteTotalTimeoutMultiplier = 1 retval = SetCommTimeouts(ComNum, CtimeOut) If retval = -1 Then retval = GetLastError() MsgBox "端口超时设定无效 " & ComNumber & " 错误: " & retval retval = CloseHandle(ComNum) Init_Com = False Exit Function End If retval = BuildCommDCB(Comsettings, BarDCB) If retval = -1 Then retval = GetLastError() MsgBox "无效设备 DCB 块 " & Comsettings & " 错误: " & retval retval = CloseHandle(ComNum) Init_Com = False Exit Function End If retval = SetCommState(ComNum, BarDCB) If retval = -1 Then retval = GetLastError() MsgBox "无效设备 DCB 块 " & Comsettings & " 错误: " & retval retval = CloseHandle(ComNum) Init_Com = False Exit Function End If Init_Com = True handelinitcom: Exit Function End Function '关闭程序 Private Sub BTNCloseCom_Click() Unload Me End Sub '关闭端口 Private Sub Form_Unload(Cancel As Integer) CloseHandle (ComNum) End Sub 4.运行程序 图6-5 程序运行界面 程序设计、调试完毕,执行菜单“运行/启动”命令或单击工具栏快捷按钮“启动”,运行程序。 (1)首先在程序窗体中发送字符区输入要发送的字符,单击“发送数据”按钮,发送区的字符串通过COM1口发送出去。 (2)另一台计算机发送数据,本计算机自动读入并显示在接收数据区中。 程序运行界面如图6-5所示。 6.1.5.3 利用MSComm控件实现PC双串口互通信 如果一台计算机有两个串口,可通过串口线将两个串口连接起来:COM1端口的TXD与COM2端口的RXD相连,COM1端口的RXD与COM2端口的TXD相连,COM1端口的GND与COM2端口的GND相连,如图6-6(a)所示,这是串口通信设备之间的最简单连接(即三线连接),图中的2号接收脚与3号发送脚交叉连接是因为在直连方式时,把通信双方都当作数据终端设备看待,双方都可以发送也可以接收。 图6-6 串口设备最简单连接 如果一台计算机只有一个串行通信端口可以使用,那么将第2脚与第3管脚短路,如图6-6(b)所示,那么第3脚的输出信号就会被传送到第2脚,用以发送到同一串行端口的输入缓冲区,程序只要再由相同的串行端口上作读取的操作,即可将数据读入,一样可以形成一个测试环境。 设计的参考代码如下: ' 串口初始化 ' 串口1与串口2的通信参数应一致 Private Sub Form_Load() MSComm1.CommPort = 1 ' 设置通信端口号为COM1 MSComm1.Settings = "9600,n,8,1" ' 设置串口1参数 MSComm1.InputMode = 0 ' 接收文本型数据 MSComm1.PortOpen = True ' 打开通信端口1 MSComm2.CommPort = 2 ' 设置通信端口号为COM2 MSComm2.Settings = "9600,n,8,1" ' 设置串口2参数 MSComm2.InputMode = 0 ' 接收文本型数据 MSComm2.PortOpen = True ' 打开通信端口2 End Sub ' 把字符通过串口发送出去 ' 启动定时器 Private Sub Cmdsend_Click() MSComm1.Output = Trim(Textsend.Text) Timer1.Enabled = True End Sub ' 接收字符 Private Sub Timer1_Timer() Dim buf$ Timer1.Enabled = False buf = Trim(MSComm2.Input) ' 将缓冲区内的数据读入buf变量中 If Len(buf) = 0 Then ' 判断缓冲区内是否存在数据 TextReceive.Text = "" Else TextReceive.Text = buf End If End Sub ' 停止程序运行 Private Sub Cmdquit_Click() Unload Me End Sub ' 关闭通信端口, Private Sub Form_Unload(Cancel As Integer) MSComm1.PortOpen = False MSComm2.PortOpen = False End Sub 程序运行界面如图6-7所示。 图6-7 程序运行界面 6.2 PC与单片机串口通信程序设计 图6-8 单片机实验板 目前,在许多单片机应用系统中,上、下位机分工明确,作为下位机核心器件的单片机往往只负责数据的采集和通信,而上位机通常以基于图形界面的Windows系统为操作平台。为便于查询和保存数据,还需要数据库的支持,这种应用的核心是数据通信,它包括单片机和上位机之间、客户端和服务器之间以及客户端和客户端之间的通信,而单片机和上位机之间数据通信则是整个系统的基础。 单片机和PC的通信是通过单片机的串口和PC串口之间的硬件连接实现的。 图6-8是本设计使用的单片机实验板。有关单片机实验板的详细信息请查询电子开发网http://www.dzkfw.com/。 6.2.1 PC与单片机串口通信程序实训目的 (1)掌握PC与单片机串口通信的线路连接方法。 (2)掌握PC与单片机串口通信的Keil C51和VB程序设计方法。 6.2.2 PC与单片机串口通信程序设计用软、硬件 本设计用到的硬件和软件清单如表6-4所示。 表6-4 设计用软、硬件 线路说明,如图6-9所示,数据通信的硬件上采用三线制,将单片机和PC串口的3个引脚(RXD、TXD、GND)分别连在一起,即将PC和单片机的发送数据线TXD与接收数据RXD交叉连接,两者的地线GND直接相连,而其他信号线如握手信号线均不用,采用软件握手的方式,这样既可以实现预定的任务又可以简化电路设计。 但由于单片机的TTL逻辑电平和RS-232C的电气特性完全不同,RS-232C的逻辑0电平规定为+3~+15V之间,逻辑1电平为−3~−15V之间,因此,在将PC和单片机的RXD和TXD交叉连接时必须进行电平转换,这里使用的是MAX232电平转换芯片。 图6-9 PC与单片机串口通信线路 单片机系统有LED显示器模块、继电器输出模块、蜂鸣器模块等。 6.2.4 设计任务 利用Keil C51和VB编写程序实现PC与单片机串口通信。任务要求。 1.设计任务1 PC通过串行口将数字(00,01,02,03…,FF,十六进制)发送给单片机,单片机收到后回传这个数字,PC接收到回传数据后显示出来,若发送的数据和接收到的数据相等,则串行通信正确,否则有错误。启始符是数字00,结束符是数字FF。 2.设计任务2 (1)测试通信状态。 先在文本框中输入字符串“Hello”,单击“测试”按钮,将字符串“Hello”发送到单片机,若PC与单片机通信正常,在PC程序的文本框中显示字符串“OK!”;否则,显示字符串“ERROR!”。 (2)循环计数。 单击“开始”按钮,文本框中数字从0开始累加,0、1、2、3……,并将此数发送到单片机的显示器上显示。当累加到10时,回到0重新开始累加,依次循环。任何时候,单击“停止”按钮,PC程序中和单片机显示器都停止累加,再单击“开始”按钮,接着停下的数继续累加。 (3)控制指示灯。 在单片机继电器接线端子的两个通道上分别接上两个指示灯,在PC程序界面上选择指示灯号,如1号灯,单击界面“打开”按钮,单片机上1号灯亮,同时蜂鸣器响;单击界面“关闭”按钮,1号灯灭,蜂鸣器停止响;同样控制2号灯的亮灭(蜂鸣器同时动作)。 6.2.5 任务实现 单片机和PC通信,在程序设计上涉及两个部分的内容。 一是单片机的C51程序,二是PC的串口通信程序和界面的编制。 6.2.5.1 利用Keil C51实现单片机与PC串口通信任务1 网络详细地址为:http://www.china-pub.com/51161。 6.2.5.2 利用VB实现PC与单片机串口通信任务1 1.程序界面设计 运行VB,创建标准的工程项目文件,设计程序窗体。设计的程序界面如图6-11所示。 图6-11 程序窗体界面 (1)添加一个MSComm控件:默认的工具箱中没有MSComm串口通信控件,因此,首先要把它添加到工具箱中,再将MSComm控件添加到程序窗体上。 (2)添加两个按钮控件CommandButton,用于发送数字和关闭程序。 (3)添加一个框架控件Frame,用于功能显示。 (4)添加一个文本控件TextBox,用于输入数字。 (5)添加一个标签控件Label,用于显示通信状态。 2.属性设置 程序窗体、控件对象的主要属性设置如表6-5所示。 表6-5 窗体、控件对象的主要属性设置 6.2.5.3 利用Keil C51实现单片机与PC串口通信任务2(方法1) 网络详细地址为:http://www.china-pub.com/51161。 6.2.5.4 利用VB实现PC与单片机串口通信任务2(方法1) 1.程序界面设计 运行VB,创建标准的工程项目文件,设计程序窗体。 图6-13 程序窗体界面 ① 添加一个MSComm控件。默认的工具箱中没有MSComm串口通信控件,因此,首先要把它添加到工具箱中,再将MSComm控件添加到程序窗体上。 ② 为了实现连续的字符发送和循环计数,添加两个Timer控件。 ③ 为了功能分类,添加3个Frame控件。 ④ 为了选择指示灯号,添加两个OptionButton控件。 ⑤ 添加其他控件。两个文本控件TextBox,6个按钮控件CommandButton。 设计的程序界面如图6-13所示。 2.属性设置 程序窗体、控件对象的主要属性设置见表6-6。 表6-6 窗体、控件对象的主要属性设置 以下是实现PC与单片机串口通信任务2(方法1)的参考程序: 网络详细地址为:http://www.china-pub.com/51161。 6.2.5.5 利用Keil C51实现单片机与PC串口通信任务2(方法2) 以下是完成单片机与PC串口通信任务2(方法2)的C51参考程序: 网络详细地址为:http://www.china-pub.com/51161。 6.2.5.6 利用VB实现PC与单片机串口通信任务2(方法2) 程序界面设计如同方法1,如图6-13所示。 以下是实现PC与单片机串口通信任务2(方法1)的参考程序: '网络详细地址为:http://www.china-pub.com/51161。 6.3 PC与智能仪器串口通信程序设计 图6-15 智能仪器示意图 目前仪器仪表的智能化程度越来越高,大量的智能仪器都配备了RS-232通信接口,并提供了相应的通信协议,能够将测试、采集的数据传输给计算机等设备,以便进行大量数据的储存、处理、查询和分析。图6-15是某型号智能仪器示意图。 通常个人计算机(PC)或工控机(IPC)是智能仪器上位机的最佳选择,因为PC或IPC不仅能解决智能仪器(作为下位机)所不能解决的问题,如数值运算、曲线显示、数据查询、报表打印等;而且具有丰富和强大的软件开发环境。 6.3.1 PC与智能仪器串口通信程序设计目的 (1)掌握PC与智能仪器串口通信的线路连接方法。 (2)掌握PC与智能仪器串口通信的VB程序设计方法。 6.3.2 PC与智能仪器串口通信程序设计用软、硬件 本设计用到的硬件和软件清单如表6-7所示。 表6-7 设计用软、硬件 1.线路说明 观察所用计算机主机箱后RS-232C串口的数量、位置和几何特征;查看计算机与智能仪器的串口连接线及其端口。 在计算机与智能仪器通电前,按图6-16所示将传感器Cu50、上、下限报警指示灯与XMT-3000A智能仪器连接。 图6-16 PC与智能仪表串口通信线路 通过串口线将计算机与智能仪器连接起来:智能仪器的14端子(RXD)与计算机串口COM1的3脚(TXD)相连,智能仪器的15端子(TXD)与计算机串口COM1的2脚(RXD)相连,智能仪器的16端子(GND)与计算机串口COM1的5脚(GND)相连。 XMT-3000A智能仪器在使用前应对其输入/输出参数进行正确设置,设置好的仪器才能投入正常使用。关于XMT-3000A智能仪器的通信协议参见第5.6.2节。 请按表6-8所示设置仪器的主要参数。 表6-8 仪器的主要参数设置 6.3.4 设计任务 编写VB程序实现PC与智能仪表串口通信。任务要求。 (1)自动连续读取并显示智能仪器温度测量值(十进制)。 (2)统计测量温度的平均值、最大值、最小值等。 (3)绘制温度实时变化曲线。 6.3.5 任务实现 网络详细地址为:http://www.china-pub.com/51161。 6.4 PC与PLC串口通信程序设计 可编程序逻辑控制器(简称PLC)主要是为现场控制而设计的,其人机界面主要是开关、按钮、指示灯等。其良好的适应性和可扩展能力而得到越来越广泛的应用。采用PLC的控制系统或装置具有可靠性高、易于控制、系统设计灵活、能模拟现场调试、编程使用简单、性价比高、有良好的抗干扰能力等特点。但是,PLC也有不易显示各种实时图表/曲线(趋势线)和汉字、无良好的用户界面、不便于监控等缺陷。 图6-19 PLC产品示意图 二十世纪90年代后,许多的PLC都配备有计算机通信接口,通过总线将一台或多台PLC相连接。计算机作为上位机可以提供良好的人机界面,进行系统的监控和管理,进行程序编制、参数设定和修改、数据采集等,既能保证系统性能,又能使系统操作简便,便于生产过程的有效监督。而PLC作为下位机,执行可靠有效的分散控制。用一台计算机(上位机)去监控下位机(PLC),这就要求PC与PLC之间稳定、可靠的数据通信。图6-19是某型号PLC示意图。 6.4.1 PC与PLC串口通信程序设计目的 (1)掌握PC与PLC串口通信的线路连接方法。 (2)掌握PC与PLC串口通信的VB程序设计方法。 6.4.2 PC与PLC串口通信程序设计用软、硬件 本设计用到的硬件和软件清单如表6-10所示。 表6-10 设计用软、硬件 线路说明:西门子S7-200PLC系统为用户提供了灵活的通信功能。集成在S7-200中的点对点接口(PPI)可用普通的双绞线作波特率高达9600bit/s的数据通信,用RS-485接口实现高速用户可编程接口,可使用专用位通信协议(如ASCII)做波特率高达38.4 kbit/s的高速通信并可按步调整。而PC的接口为RS-232,两者之间需要进行电平转换。利用西门子公司的PC/PPI电缆,可将S7-200CPU与计算机连接起来组成PC/PPI网络,实现点对点通信,如图6-20所示。 图6-20 PC与S7-200PLC串口通信线路 FX2N型PLC可以通过自身的编程口和PC通信,也可以通过通信口和PC通信。通过编程口,PC只能和一台PLC通信,实现对PLC中软元件的间接访问(每个软元件具有惟一的地址映射);通过通信口,一台PC可以和多台PLC通信,并实现对PLC中软元件的直接访问,两者使用不同的通信协议。PC通过FX2N的编程口构成的二级控制系统如图6-21所示,按钮、行程开关等的常开触点接PLC开关量输入1通道,PLC开关量输出1通道接指示灯。 图6-21 PC与FX2NPLC串口通信线路 6.4.4 设计任务 利用VB编写程序实现PC与PLC串口通信。任务要求。 (1)开关量输入。利用继电器开关改变某个输入端口的状态,程序读取该端口的输入状态(打开/关闭),并在程序中显示。 (2)开关量输出。程序运行界面中指定元件地址,单击置位/复位命令按钮,设置指定地址的元件端口(继电器)状态为ON或OFF,使线路中指示灯亮/灭。 6.4.5 任务实现 6.4.5.1 PC与西门子S7-200PLC串口通信 网络详细地址为:http://www.china-pub.com/51161。 6.4.5.2 PC与三菱FX2N-32MRPLC串口通信 1.PLC端(下位机)程序 为了保证FX2N-32MR型PLC能够正常与PC进行通信,需要在PLC中运行如图6-24所示的一段程序。其功能是设置PLC的通信参数:波特率为9600b/s,7位数据位,1位停止位,偶校验,站号为0。 图6-24 PLC通信参数设置程序 2.PC端(上位机)VB程序 (1)程序界面设计。 图6-25 程序窗体界面 运行VB,创建标准的工程项目文件,设计程序窗体。 ∙ 添加串口通信控件MSComm和时钟控件Timer。 ∙ 添加其他控件。两个Frame控件,4个Label控件,两个ComboBox控件,两个Shape控件,4个CommandButton控件。 设计的程序界面如图6-25所示。 (2)属性设置。 程序窗体、控件对象的主要属性设置如表6-12所示。 表6-12 窗体、控件对象的主要属性设置 网络详细地址为:http://www.china-pub.com/51161。 6.5 PC与读卡器串口通信程序设计 图6-27 读卡器产品示意图 由于非接触式ID卡使用时,无须接触,卡片无源防水、防污,使用寿命长等,因此,已经大量应用于门禁系统中的发卡器,俱乐部管理,机房管理,网吧管理,图书馆,学生学籍、听课、准考、上机、借书、消费管理,考勤管理,就餐管理,游泳池管理,银行账户管理、回单柜管理,证券营业部股民交易查询系统等。 本节介绍北京远兴时代科技有限公司生产的YX-K4-232型ID卡读卡器与PC串口通信的VB程序设计方法。图6-27是读卡器示意图。 6.5.1 PC与读卡器串口通信程序设计目的 (1)掌握PC与读卡器串口通信的线路连接方法。 (2)掌握PC与读卡器串口通信的VB程序设计方法。 6.5.2 PC与读卡器串口通信程序设计用软、硬件 本设计用到的硬件和软件清单如表6-13所示。 表6-13 设计用软、硬件 线路说明。在计算机通电前,按图6-28所示将PC与YX-K4-232型IC卡读卡器通过串口线连接起来。 图6-28 PC与读卡器串口通信线路 当卡片靠近读卡器时,读卡器与卡片之间通过内部的射频电路和感应天线感应,使读卡器获得特定的加密信号,进而翻译后成为某种格式的卡号,以某种通讯协议输出给目标设备(如PC等)。 有关读卡器的详细信息请查询网站http:// www.yxcard.com/。 6.5.4 设计任务 利用VB编写程序实现PC与读卡器串口通信。任务要求。 由读卡器读取ID卡的卡号,并显示在程序运行界面中。 6.5.5 任务实现 网络详细地址为:http://www.china-pub.com/51161。 6.6 PC与GSM模块串口通信程序设计 在很多监控领域,各种监控设备大多还是有线方式传输,当距离遥远时,监控设备的安装、维护非常不便,因为监控端远离采集端,铺设电缆的投入有时可以说是巨大的。通过无线方式来交换数据,则可以有效地避免这些问题。 GSM网络是目前国内覆盖范围最广,应用最普遍的无线通信网络,利用GSM网络构建远程监测系统时,完全可利用现成的GSM无线网络而无需再新建基站。 图6-31 GSM模块示意图 利用GSM网络短消息业务(SMS)实现监测领域的应用具有以下优点:通信网络覆盖面广、网络设施完备,不需投资建设基础设施;实施与运行费用低;可以实现在无人情况、环境恶劣、超远距离的情况下控制信息的收集和传送。 GSM短信模块是专门用于短信接收发送的模块,具有RS-232通信口,可与单片机、计算机相连。 图6-31是某型号GSM短信模块示意图。 6.6.1 PC与GSM模块串口通信程序设计目的 (1)掌握计算机(PC)与GSM模块串口通信的线路连接方法。 (2)掌握PC与GSM模块串口通信的VB程序设计方法。 6.6.2 PC与GSM模块串口通信程序设计用软、硬件 本设计用到的硬件和软件清单如表6-15所示。 表6-15 设计用软、硬件 1.线路说明 如图6-32所示,在数据采集站,传感器检测的数据送入单片机模拟量输入口,单片机通过串口线与GSM模块相连;在监控中心,GSM模块通过串口线与PC直接相连。 图6-32 PC与GSM模块串口通信线路 传感器检测的数据经单片机MCU单元的处理,编辑成短信息,通过串行口传送给GSM模块后以短消息的方式将数据发送到监控中心的计算机或用户的GSM手机。 同样,监控中心PC通过串行口向GSM模块TC35发送命令,通过TC35以短消息形式把设置命令发送到下位机系统的GSM模块,对单片机进行控制。 用户手机通过GSM模块与PC和单片机可以实现双向通信。 2.AT指令 与SMS有关的GSM AT指令(from GSM07.05)如表6-16所示。 表6-16 常用AT指令 编写VB程序实现PC与GSM短信模块串口通信。任务要求。 (1)指定GSM模块SIM卡中已有的短信位置,读取该短信及相关信息。 (2)在程序中输入短信内容,指定接收方手机号码,将编辑的短信息发送到指定手机。 (3)用户手机向GSM模块发送短信,程序运行界面自动显示短信内容及相关信息。 (4)拨打指定电话。 6.6.5 任务实现 网络详细地址为:http://www.china-pub.com/51161。 6.7 PC与调制解调器串口通信程序设计 图6-39 调制解调器产品示意图 调制解调器用于传输两部设备(通常是计算机)之间的数据。由于电信网络非常普及,触角延伸到全球各角落,用以作为网络通信的媒介非常适合,不过电话线仅适合音频的模拟信号传输,计算机内部则是数字信号的处理,必须经过调制解调器将数字信号转换为模拟信号,再以模拟信号送上电话系统。这些模拟信号经过电信局交换机处理后到达目的地,目的地的调制解调器再将模拟信号还原为数字信号,接着送入计算机的总线上。 图6-39是某型号调制解调器示意图。 6.7.1 PC与调制解调器串口通信程序设计目的 (1)掌握PC与调制解调器串口通信的线路连接方法。 (2)掌握PC与调制解调器串口通信的VB程序设计方法。 6.7.2 PC与调制解调器串口通信程序设计用软、硬件 本设计用到的硬件和软件清单如表6-18所示。 表6-18 设计用软、硬件 线路说明。在计算机通电前,按图6-40所示将PC与调制解调器通过串口线连接 起来。 图6-40 PC与调制解调器串口通信线路 6.7.4 设计任务 利用VB编写程序实现PC与调制解调器串口通信。 6.7.5 任务实现 6.7.5.1 用VB编程实现向调制解调器发送指令并接收返回的字符 使用VB控制调制解调器之前,必须对调制解调器的控制指令有所了解,这样才能根据调制解调器的命令格式来作控制。首先,我们了解一下调制解调器的相关指令。 调制解调器分成两种模式,命令模式与连线模式,一个为针对调制解调器功能设置的模式,另一个为数据传输的模式。 当调制解调器未与其他设备连接时,其处于命令模式,这时候下达给调制解调器的指令是作为调制解调器本身设置或操作之用。当调制解调器已经和其他的调制解调器或设备连接上时,此调制解调器就是处于连线模式,所有在此时由计算机送至调制解调器的信息都将经由电话线传送到另一部计算机上。 图6-41 程序界面 专门使用于调制解调器的指令集被称为“AT指令集”,此指令集是由美国Hayes公司发展的数据传输通信接口,目前已成为全球通用标准,任何与Hayes兼容的调制解调器都可接收这些指令。通过AT指令集,从最基本的音量控制到内置参数的改变,都可用VB编程经过串行端口对调制解调器下达控制指令。 调制解调器通过RS-232串行端口和计算机连接,从AT指令集可以看出,调制解调器接收字符串指令后操作,因此,编程利用VB中的MSComm控件,由RS-232传送指令便可控制调制解调器。 设计的程序界面如图6-41所示。 网络详细地址为:http://www.china-pub.com/51161。 6.7.5.2 调制解调器与调制解调器连线通信 送出拨号指令后,可以促使调制解调器通过电话线与远程的另—部调制解调器或设备取得连线;调制解调器连线成功后,双方的计算机便处于连线的状态,这也就是连线模式;由一方的计算机中的串行端口送出的字符串会出现在另一端的串行端口的接收缓冲区中,对方串行端口便可以从接收缓冲区将字符串接收进来。 图6-42 程序界面 计算机连线后,一样可以通过送出AT指令集中的“+++”指令,命令本地调制解调器回到命令模式,接受本地计算机的其他指令;当本地端的指令做完后,可以再用AT指令集中的“ATO0”或“ATO1”将命令模式转回到连线模式,而此时的两端的调制解调器便再次连线,两端的计算机也就再次连接上了,可以再进行数据的传输。 设计的程序界面如图6-42所示。 以下是参考程序代码: 网络详细地址为:http://www.china-pub.com/51161。 6.8 PC与云台控制系统串口通信程序设计 云台是一种设备,专门用于监控时调整摄像头位置。摄像头安装于云台之上,通过开关电源,就可实现摄像头在垂直方向进行俯仰运动、水平方向进行摆动,从而调整监视位置。 云台镜头控制系统除了控制摄像头的俯仰和水平运动控制外,通常还要控制电子镜头(安装于摄像头前端、电机控制的光学镜头)的聚焦、光圈和变倍等,以便调整视野范围和清晰度。对于室外摄像头,通常将其放在防护罩内,再安装于云台之上。此时,控制系统通常要考虑控制防护罩上雨刷。夜间工作情况下,还要进行射灯的开关控制。 上述云台镜头控制系统的各项控制通常由两种方式来实现。 图6-43 云台示意图 (1)通过电子设备的操作平台,手工按下相关的机械按钮,控制对应的继电器,达到各个电源开关的闭合,从而实现上述各项控制功能。 (2)通过计算机串/并口,发送控制指令到解码器,再由解码器控制相应的继电器达到各个电源开关的闭合,从而实现上述各项控制功能。图6-43是某型号云台示意图。 本设计介绍串口技术在云台镜头控制系统中的应用。 6.8.1 PC与云台控制系统串口通信程序设计目的 (1)掌握PC与云台解码器串口通信的线路连接方法。 (2)掌握PC与云台解码器串口通信的VB程序设计方法。 6.8.2 PC与云台控制系统串口通信程序设计用软、硬件 本设计用到的硬件和软件清单如表6-19所示。 表6-19 设计用软、硬件 一台计算机可通过一套解码器控制多个云台(包括摄像头、雨刷),控制系统的布局和连线示意如图6-44所示。用户通过计算机串口发出相应的控制指令,解码器解析指令,获知操作对象(具体哪个云台)、操作动作(俯仰、左右摆动等)后,通过继电器接通/断开相应的线路,从而使相应电机运转或停止,达到控制目的。 PC 图6-44 PC与云台控制系统串口通信线路 6.8.4 设计任务 利用VB编写程序实现PC与云台控制系统串口通信。任务要求。 控制云台镜头的俯仰和水平运动;控制电子镜头的聚焦、光圈和变倍等,以便调整视野范围和清晰度。 6.8.5 任务实现 下面仅列出部分程序界面及代码,完整的项目文件请参考配套光盘。 设计的程序主界面如图6-45所示。 图6-45 云台动作和状态控制面板 网络详细地址为:http://www.china-pub.com/51161。 6.9 PC与电机驱动系统串口通信程序设计 电机是电能生产及应用的基本装备。现代化电机的单机容量已经大大增加,应用领域日益扩大,与其组成的系统的自动化程度日益提高,运行条件更加复杂化。电机控制系统成为工业自动化系统中的关键部分,称作运动控制系统。从目前的发展趋势看,运动控制系统的设计正逐步形成系列化、规范化和标准化,许多控制软件和硬件逐渐成为通用化的产品。一般来讲,系统要求具有快速的动态响应和较高的稳态精度。 微处理技术的发展,尤其是数字信号处理器(Digital Signal Processor,DSP)的发展使指令运算速度大大加快,采样周期、控制周期大大缩短,使得系统的高速动态响应性能得以实现。全数字控制系统既可以采用专门的硬件电路,还可以采用控制专用芯片,如美国德州仪器公司(Texas Instruments)的TMS320F240、模拟仪器公司(Analog Devices)ADMC系列芯片等都是控制专用芯片。这样不但可以简化和规范硬件系统,而且能快速高效地实现复杂的控制策略,同时便于故障监视、诊断和保护,增强系统的可靠性,确保系统的高速响应。 在实时控制系统和自动化测量系统中,的控制系统之间,计算机与控制系统之间经常需要进行数据交换。串行通信是主要的通信手段,由于它高效、可靠、简便、成本低,并遵循统一的标准,因而得到广泛的应用。在开发一套以DSP芯片为核心的电机驱动系统的过程中,我们要实时地观察运行中的驱动系统的数据变量,同时还要对其中程序进行控制。由于DSP在实际系统中是以计算机方式运行,因此,不能用外接的控制端口来控制,必须应用DSP芯片中的串行通信接口完成这些工作,整个监控系统由一台计算机和一个以DSP为核心的电机驱动系统组成。电机驱动系统完成对电机的反馈控制并采集与电机控制有关的模拟量,然后根据计算机的指令通过串行通信口将数据传送至计算机进行进一步分析、处理和显示,同时计算机还可以通过串行通信改变DSP程序中的转速给定、PI参数等变量、发启停信号等,实现对驱动系统的调试和控制。 上述电机驱动系统的各项控制通常由两种方式来实现。 图6-46 电机及其驱动系统 (1)通过电子设备的操作面板,手工按下相关的按钮,发送控制信号到DSP串口,DSP内部程序对此做出响应,控制电机实现各种运动状态和返回相关参数,从而实现各项控制功能。例如,洗衣机、电冰箱的控制面板就是这种工作方式。 (2)通过计算机串口发送控制指令到DSP串口,控制DSP内部的程序,从而实现上述各项控制功能。在开发一套电机控制系统中的调试阶段往往采用这种方式。 本节介绍串口技术在电机驱动系统中的应用。图6-46是某电机及其驱动系统示意图。 6.9.1 PC与电机驱动系统串口通信程序设计目的 (1)掌握PC与电机驱动系统串口通信的线路连接方法。 (2)掌握PC与电机驱动系统串口通信的VB程序设计方法。 6.9.2 PC与电机驱动系统串口通信程序设计用软、硬件 本设计用到的硬件和软件清单如表6-20所示。 表6-20 设计用软、硬件 一套电机驱动系统包括主控部分(计算机)、电平转换电路、电机运动控制电路以及电动机。控制系统的布局和连线示意如图6-47所示。用户通过计算机串口发出相应的控制指令,通过电平转换,将控制信号送到DSP的串口,DSP分析控制信号,做出相应的反应,使电机按照控制命令运转或停止,达到控制目的;同时整个驱动系统的运行参数,如电压、电流等由DSP的ADC采集系统获取后,经由DSP串口发送回计算机串口,由通信程序显示,完成一整套控制和监视的功能。 PC 图6-47 PC与电机驱动系统串口通信线路 6.9.4 设计任务 利用VB编写程序实现PC与电机驱动系统串口通信。 6.9.5 任务实现 下面仅列出部分程序运行界面及代码,完整的项目文件请参考配套光盘。 设计的程序主界面如图6-48所示。 图6-48 电机驱动控制系统主界面 网络详细地址为:http://www.china-pub.com/51161。 6.10 PC与常用测试仪器串口通信程序设计 由于研发上的需要,我们可以发现很多的仪器被用来作实验或分析,而这些仪器通常也都具有与外界通信的能力。通过仪器提供的通信接口,仪器用户可以利用计算机与仪器作连线,从仪器上取得数据或设置,甚至直接控制仪器的操作,达到自动化控制的目的。 图6-49 噪音计 由于RS-232是一个使用相当久的标准,更由于它的容易性及便宜的价格,使得仪器厂商乐于使用它作为与计算机或打印机的传输界面,因此,有提供对外传输界面的仪器几乎都有提供RS-232的界面。 通信传输的双方必须有相同的传输协议及数据格式,每个厂商对于本身的仪器设备所提供的传输协议及数据格式均不相同,每部支持RS-232传输的仪器,其使用手册或传输界面手册都会针对RS-232的命令作详细的说明。 图6-49是某具有串口通信功能的噪音计示意图。 6.10.1 PC与常用测试仪器串口通信程序设计目的 (1)掌握PC与常用测试仪器串口通信的线路连接方法。 (2)掌握PC与常用测试仪器串口通信的VB程序设计方法。 6.10.2 PC与常用测试仪器串口通信程序设计用软、硬件 本设计用到的硬件和软件清单如表6-21所示。 表6-21 设计用软、硬件 在计算机通电前,按图6-50所示将PC与测试仪器通过串口线连接起来。 PC 图6-50 PC与测试仪器串口通信线路 6.10.4 设计任务 利用VB编写程序实现PC与常用测试仪器串口通信。 6.10.5 任务实现 6.10.5.1 VB与噪音计串口通信 以VB和其他的设备做连接时,应注意以下各步骤。 (1)准备该设备的操作手册,特别是有关通信的部分。 (2)确认通信端口的位置及其使用的接头种类。 (3)确认该通信端口的接线是否需要跳线。 现在我们就以BK-2236积分型噪音计为例,说明与其做连接时的注意事项与技巧。 ∙命令格式。首先,找出BK-2236噪音计的手册,并翻出与串口通信有关的一个章节。其通信部分首先说明噪音计的通信注意事项,包括命令语法、计算机设置应注意事项等。 ∙硬件线路。当我们使用RS-232的接线将噪音计与计算机连接时,首先就是要确认所使用的线材是否需要特殊的接头,或是有特别的跳线方式。以BK-2236噪音计来说,所使用的线材规格在其手册上并没有特别的强调,只要是经过跳线的RS-232线即可(两端均需是母头,跳线方式是2、3对调,5连接)。 该注意的几个项目均检查过后,我们接着开始编写噪音计的VB程序。 设计的程序界面如图6-51所示。 图6-51 噪音计串口通信程序界面 以下是参考程序: 网络详细地址为:http://www.china-pub.com/51161。 6.10.5.2 VB与电功率计串口通信 下面是一个PC与WM-02电功率计通信的VB程序。设计的程序界面如图6-52所示。 图6-52 电功率计串口通信程序界面 以下是参考程序: 网络详细地址为:http://www.china-pub.com/51161。 6.10.5.3 VB与转速计串口通信 下面是一个PC与RM-1501转速计通信的VB程序。设计的程序界面如图6-53所示。 图6-53 转速计串口通信程序界面 以下是参考程序代码: '在此先开启通信口 Private Sub Form_Load() MSComm1.PortOpen = True End Sub '读取数值的按钮 '这其中是将计时器的状态作转态 Private Sub Command2_Click() End Sub Function Prova_1501() As Long '下达指令byout()给prova_1501,取回转速值 If byin(i) = 13 Then '显示0d,为启始byte If byin(i + 1) = 0 Then Diver = 1 '第2byte决定小数点位置 以下检查电池状态 以下检查单位 以下检查方式 以下计算转速,第7、8、9、10byte决定rpm _ _1501 = Rpm End Function '计时器控制项的Timer事件:'将Prova_1501的转速显示到Label控制项里 Private Sub Timer1_Timer() _1501 End Sub '结束系统的按钮:利用End指令结束系统 Private Sub Command1_Click() End End Sub下载本文
6.2.3 PC与单片机串口通信程序硬件线路图序 号 名 称 数 量 1 PC(计算机) 1 2 单片机实验板(ATC51、MAX232等) 1 3 串口通信线(三线制) 1 4 VB 6.0 1
网络详细地址为:http://www.china-pub.com/51161。控 件 类 型 名 称 主 要 属 性 功 能 Form MainForm BorderStyle = 3 运行时窗体固定大小 Caption = PC与单片机串口通信 窗体标题栏显示程序名称 Frame Frame1 Caption = 输入数据 测试功能区 TextBox numText Text = 0 数据输入框 Label Label1 Caption = 通信状态? 显示串口通信状态 CommandButton Cmdsend Caption = 发送 发送数据命令 CommandButton Cmdquit Caption = 关闭 关闭程序命令 MSComm MSComm1 在程序中设置 串口参数设置 控 件 类 型 名 称 主 要 属 性 功 能 Form MainForm BorderStyle = 3 运行时窗体固定大小 Caption = PC机与单片机串口通信 窗体标题栏显示程序名称 Frame Frame1 Caption = 测试通信状态 测试功能区 Frame Frame2 Caption = 循环计数 循环计数功能区 Enabled = False 初始不可用 Frame Frame3 Caption = 控制指示灯 控制指示灯功能区 Enabled = False 初始不可用 TextBox ReturnText Text = Hello 测试信息显示框 TextBox NumText Text = 0 循环计数显示框 OptionButton Option1 Caption = 1号灯 1号指示灯,初始选择 Value = True OptionButton Option2 Caption = 2号灯 2号指示灯 CommandButton CmdTest Caption = 测试 测试单片机命令 CommandButton CmdStart Caption = 开始 开始计数命令 CommandButton CmdStop Caption = 停止 停止计数命令 CommandButton CmdOpen Caption = 打开 打开指定指示灯命令 CommandButton CmdClose Caption = 关闭 关闭指定指示灯命令 CommandButton Cmdquit Caption = 退出 关闭程序命令 MSComm MSComm1 在程序中设置 串口参数设置
3.编写程序代码Timer Timer1 Enabled = False 时钟初始不可用 Interval = 1000 循环计数周期
6.3.3 PC与智能仪器串口通信程序硬件线路图序 号 名 称 数 量 1 PC(计算机) 1 2 XMT-3000A型智能仪表(需配置RS-232通信,上、下限报警继电器,DC24V电源等模块) 1 3 串口通信线(三线制) 1 4 热电阻传感器(Cu50) 1 5 指示灯(DC24V) 2 6 Visual Basic 6.0 1
2.XMT-3000A智能仪器的参数设置连接仪器与计算机串口线时,仪器与计算机严禁通电,否则极易烧毁串口。
有关XMT-3000A智能仪表的详细信息请查询网站http://www.njcy.com/。参 数 参 数 含 义 设 置 值 HiAL 上限绝对值报警值 30 LoAL 下限绝对值报警值 20 Sn 输入规格 传感器为:Cu50,则Sn=20 diP 小数点位置 要求显示一位小数,则diP=1 ALP 仪器功能定义 ALP =10 Addr 通信地址 1 bAud 通信波特率 4800
6.4.3 PC与PLC串口通信程序设计硬件线路图序 号 名 称 数 量 1 PC(计算机) 1 2 PLC(西门子:S7-200,CPU224) 1 3 PLC(三菱:FX2N-32MR) 1 4 SC-09编程电缆,PC/PPI电缆 各1 5 开关,指示灯(DC24V) 各10 6 直流电源(OUT:DC24V) 1 7 Visual Basic 6.0 1
(3)程序代码设计。控 件 类 型 名 称 主 要 属 性 功 能 Form frmMain Caption = PC与PLC串口通信 窗体标题栏显示程序名称 Frame Frame1 Caption = 开关量输入 显示输入地址、端口状态信息 Frame Frame2 Caption = 开关量输出 显示输出地址、端口状态信息 ComboBox ListInAddr Style = 0 列出元件所有输入地址 ComboBox ListOutAddr Style = 0 列出元件所有输出地址 Shape1 InAlarm FillStyle = 0-Solid 填充样式,实线 Shape = 3-Circle 圆形,输入端口信号指示 Shape2 OutAlarm FillStyle = 0-Solid 填充样式,实线 Shape = 3-Circle 圆形,输出端口信号指示 Label Label1 Caption = 地址: 地址输入框标签 Label Label2 Caption = 状态: 端口信号指示灯标签 CommandButton Cmdset Caption = 置位 置指定地址端口为ON CommandButton Cmdreset Caption = 复位 置指定地址端口为OFF CommandButton Cmdtest Caption = 回路测试 检查串口连接是否正常 CommandButton Cmdquit Caption = 退出 关闭程序 Timer Timer1 Interval = 500 定时查询输入端口状态 MSComm MSComm1 在程序中设置 串口参数设置
6.5.3 PC与读卡器串口通信程序硬件线路图序 号 名 称 数 量 1 PC(计算机) 1 2 串口通信线(三线制) 1 3 读卡器(YX-K4-232型) 1 4 ID卡 1 5 Visual Basic 1
6.6.3 PC与GSM模块串口通信程序硬件线路图序 号 名 称 数 量 1 PC(计算机) 1 2 GSM模块(西门子:TC35) 1 3 串口通信线(三线制) 1 4 手机或SIM卡 2 5 Visual Basic 6.0 1
6.6.4 设计任务AT指令 功 能 AT+CMGC 发出一条短消息命令 AT+CMGD 删除SIM卡内存的短消息 AT+CMGF 选择短消息信息格式:0-PDU;1-文本 AT+CMGL 列出SIM卡中的短消息 AT+CMGR 读短消息 AT+CMGS 发送短消息 AT+CMGW 向SIM内存中写入待发的短消息 AT+CNMI 显示新收到的短消息 AT+CPMS 选择短消息内存 AT+CSCA 短消息中心地址
6.7.3 PC与调制解调器串口通信程序硬件线路图序 号 名 称 数 量 1 PC(计算机) 2 2 调制解调器 2 3 串口通信线 2 4 VB 1
6.8.3 PC与云台控制系统串口通信程序硬件线路图序 号 名 称 数 量 1 PC(计算机) 1 2 云台及解码器 各1 3 VB 1
6.9.3 PC与电机驱动系统串口通信程序硬件线路图序 号 名 称 数 量 1 PC(计算机) 1 2 电机及其驱动系统 各1 3 Visual Basic 6.0 1
6.10.3 PC与常用测试仪器串口通信程序硬件线路图序 号 名 称 数 量 1 PC(计算机) 1 2 噪音计,电功率计,转速计 各1 3 串口通信线 1 4 VB 1