串口通信示例

原创 2005年05月13日 20:14:00
'************************************************************************* '**模 块 名:frmMain '**说 明:YFHome 版权所有2004 - 2005(C) '**创 建 人:叶帆 '**日 期:2004-09-19 '**修 改 人: '**日 期: '**描 述:串口通信示例(CSDN 开源) '** :------------------------------------------------------- '** :示例说明 '** : '** :该示例程序模拟PC机与一终端(下位机)串口通信,PC机先向下位机发送五个字节,下位机 '** :收到数据后也返回送五个字节的确认命令 '** : '** : 字头 站号 副本 命令 副本 '** :帧 结 构:AC 01 01 0A 0A 正副本校验方式 '** : '** :返 回 帧:AC 01 01 AA AA 响应命令,表示终端接收到数据 '** :------------------------------------------------------- '**版 本:V1.0.0 '************************************************************************* Option Explicit Private Declare Function GetCurrentTime Lib "kernel32" Alias "GetTickCount" () As Long '************************************************************************* '**函 数 名:cmdSend_Click '**输 入:无 '**输 出:无 '**功能描述:发送命令 '**全局变量: '**调用模块: '**作 者:叶帆 '**日 期:2004-09-19 '**修 改 人: '**日 期: '**版 本:V1.0.0 '************************************************************************* Private Sub cmdSend_Click() Dim bytData(10) As Byte bytData(0) = &HA '数据 txtMsg.Text = SendData(1, bytData, 1) '发送命令 End Sub '************************************************************************* '**函 数 名:Form_Load '**输 入:无 '**输 出:无 '**功能描述:串口初始化 '**全局变量: '**调用模块: '**作 者:叶帆 '**日 期:2004-09-19 '**修 改 人: '**日 期: '**版 本:V1.0.0 '************************************************************************* Private Sub Form_Load() OpenPort 1 '打开串口 End Sub '************************************************************************* '**函 数 名:OpenPort '**输 入:PortNo(Integer) - 串口号 1,2,3... '** :Optional InBufferSize(Integer = 1024) - 接收缓冲区 默认为1024个字节 '** :Optional OutBufferSize(Integer = 512) - 发送缓冲区 默认为512个字节 '**输 出:0 打开串口成功 1 打开串口失败 '**功能描述:打开串口 '**全局变量: '**调用模块: '**作 者:叶帆 '**日 期:2003年12月17日 '**修 改 人: '**日 期: '**版 本:V1.0 '************************************************************************* Public Function OpenPort(PortNo As Integer, Optional InBufferSize As Integer = 1024, Optional OutBufferSize As Integer = 512) As Long On Error GoTo ErrExit MSComm1.CommPort = PortNo '采用COM端口 MSComm1.Settings = "9600,n,8,1" MSComm1.InputMode = comInputModeBinary '采用二进制传输 MSComm1.NullDiscard = False 'NULL字符从端口传送到接受缓冲区 MSComm1.DTREnable = False 'DTR线无效 MSComm1.EOFEnable = False '不寻找EOF符 MSComm1.RTSEnable = False 'RTS线无效 MSComm1.InBufferCount = 0 '清空接受缓冲区 MSComm1.OutBufferCount = 0 '清空传输缓冲区 MSComm1.SThreshold = 1 '如果传输缓冲区完全空时产生MSComm事件 MSComm1.RThreshold = 0 '不产生MSComm事件 MSComm1.InBufferSize = InBufferSize '接收缓冲区 默认为1024个字节 MSComm1.OutBufferSize = OutBufferSize '发送缓冲区 默认为512个字节 MSComm1.PortOpen = True '打开端口 OpenPort = 0 Exit Function ErrExit: OpenPort = 1 End Function '************************************************************************* '**函 数 名:ClosePort '**输 入:无 '**输 出:无 '**功能描述:关闭串口 '**全局变量: '**调用模块: '**作 者:叶帆 '**日 期:2003年12月15日 '**修 改 人: '**日 期: '**版 本:V1.0 '************************************************************************* Public Sub ClosePort() On Error GoTo ErrExit MSComm1.PortOpen = False '关闭端口 Exit Sub ErrExit: End Sub '************************************************************************* '**函 数 名:SendData '**输 入:bytAddr(Byte) - 设备地址(0~255) '** :bytData()(byte) - 数据数组 '** :bytNum(byte) - 数据个数(1~256/数据类型的长度) '**输 出:(Long) - 0 成功 1 -超时 2 - 接收的数据有误 3 - 其它未知错误 '**功能描述:发送数据 '**全局变量: '**调用模块: '**作 者:叶帆 '**日 期:2004年05月19日 '**修 改 人: '**日 期: '**版 本:V1.0 '************************************************************************* Public Function SendData(bytAddr As Byte, bytData() As Byte, Optional bytNum As Byte = 1) As Long On Error GoTo ErrExit Dim bytSendArray() As Byte '发送数据缓冲区 Dim intGetDataLen As Integer '要接收的数据长度 Dim sngTimeSpace As Single '延时时间 Dim sngTime As Single Dim bytReceiveArray() As Byte '接收的数据 Dim VarReceiveData As Variant '接收的变体数据 Dim i As Long ReDim bytSendArray(0 To bytNum * 2 + 2) As Byte '发送数据缓冲区 bytSendArray(0) = &HAC '同步字头 bytSendArray(1) = bytAddr '下位机地址 bytSendArray(2) = bytAddr '副本 '数据 For i = 0 To bytNum * 2 - 1 Step 2 bytSendArray(i + 3) = bytData(i / 2) bytSendArray(i + 4) = bytData(i / 2) Next '===================================================================================== '信息发送 '===================================================================================== MSComm1.InBufferCount = 0 '清空接收缓冲区 MSComm1.Output = bytSendArray '发送数据 Do DoEvents Loop Until MSComm1.OutBufferCount = 0 '等待,直到数据发送完毕 '===================================================================================== '信息接收 '===================================================================================== '设定要接收的数据长度 intGetDataLen = 5 '超时时间计算:字节数×每个字节的传输时间×10 9600为波特率 请根据实际设定 sngTimeSpace = intGetDataLen * (11000# / 9600#) * 10# sngTime = GetCurrentTime() ' Do While True '数据接收 DoEvents If MSComm1.InBufferCount >= intGetDataLen Then Exit Do '超时处理 If Abs(GetCurrentTime() - sngTime) > sngTimeSpace Then '超时 SendData = 1 Exit Function End If Loop VarReceiveData = MSComm1.Input bytReceiveArray = VarReceiveData '返回帧校验 SendData = 2 '先赋值接收的数据错误 If bytReceiveArray(0) = &HAC Then '字头 '帧数据是否正确(正副本校验) If bytReceiveArray(1) = bytReceiveArray(2) And bytReceiveArray(3) = bytReceiveArray(4) Then '站号,命令判断 If bytReceiveArray(1) = bytSendArray(1) And bytReceiveArray(3) = &HAA Then SendData = 0 '命令正确 End If End If End If Exit Function ErrExit: SendData = 3 End Function

java使用rxtx串口通信配置及简单示例

java使用rxtx串口通信配置及简单示例 1下载          官方地址:http://rxtx.qbang.org/wiki/index.php/Download,官方下载地址中有版本和类...

串口通信协议示例与分析

串口通信协议示例与分析          变频器与个人电脑使用RS-232/RS-485 串行总线连接,如下所示:     ...

示例:DOS下串口通信源程序

示例:DOS下串口通信源程序   该程序实现的原理是利用C库函数outportb与inportb来读写对串口芯片的寄存器进行读写和配置。 程序利用中断接收串口数据,利用查询方式来发送数据,可以自...
  • lyh020
  • lyh020
  • 2013年10月07日 11:53
  • 829

Windows 串口通信简单示例

为了方便串口程序的调试,使用了如下两款工具软件 [1]. 串口调试助手 该软件可以通过串口收发数据。可以通过串口发送数据,也可以查看串口收到的数据。 [2]. 虚拟串...

串口通信协议示例与分析

串口通信协议示例与分析       作者:佚名    教程来源:不详    点击数:  变频器与个人电脑使用RS-232/RS...

MFC串口通信功能示例

  • 2017年07月28日 15:30
  • 22.64MB
  • 下载

java串口通信的示例代码

  • 2017年06月13日 20:05
  • 64KB
  • 下载

串口通信校验方式(even,odd,space,mark)

无校验 (no parity) 奇校验 (odd parity):如果字符数据位中"1"的数目是偶数,校验位为"1",如果"1"的数目是奇数,校验位应为"0"。(校验位调整个数) 偶校验 (eve...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:串口通信示例
举报原因:
原因补充:

(最多只允许输入30个字)