VB写串口程序时如何发送大于128的字符

         最近在使用VB写一个自动化控制的程序时,碰到了下面的问题,在程序中我要将一串字符串命令通过串口发送到下位机,为了对发送/接收的数据进行更准确的判断,还使用了CRC16校验方法来对要发送的命令来进行校验, 即在命令的后面再加上2个字节的校验码,但在实际调试时却发现,下位机收到的2个字节的校验码均为0,心中对这个现象一直不解,出错的代码如下:

    Dim CRC16 As New CRCCom    'CRC16校验的COM组件
    Dim nCrcValue As Long

    cmdMsg = "1234567890"
    CRC16.GetCrc16Value cmdMsg, nCrcValue
    cmdMsg = cmdMsg & Chr(nCrcValue / 256) & Chr(nCrcValue Mod 256)
    
    MSC1.Settings = strBaud
    MSC1.CommPort = nPort
    MSC1.InputMode = comInputModeText
    MSC1.OutBufferCount = 0
    MSC1.PortOpen = True
    MSC1.Output = cmdMsg

        上面这段代码执行后,下位机收到的"1234567890"后面2个字节均为0,经过查阅资料,我发现Chr这个函数在转换大于128的数时,转换后就是变为0,难怪下位机老是报错,解决的办法有2种,一是使用VC来封装一个串口通讯的COM来完成串口通讯的工作,同时将数据校验也放在里面进行,VB程序只负责具体的命令和数据的处理,可是这个工作量不小,另一个办法是试一下MSComm控件能不能支持在已经打开串口之后随时变换发送的模式(即是采用文本模式还是二进制模式),如果可以的话我就可以先使用文本模式于是我想到了先使用文本模式将"1234567890"发送出去,然后再使用二进制模式将校验得到的2个字节以字节数组的方式发送出去,经过测试,果然可以这样进行,这就给了我很大的方便了,修改测试过后的代码如下:

    Dim CRC16 As New CRCCom    'CRC16校验的COM组件
    Dim nCrcValue As Long
    Dim byCrcValue(1) As Byte
   
    CRC16.GetCrc16Value cmdMsg, nCrcValue
    byCrcValue(0) = Chr(nCrcValue / 256)
    byCrcValue(1) = Chr(nCrcValue Mod 256)

    cmdMsg = "1234567890"
    CRC16.GetCrc16Value cmdMsg, nCrcValue
    cmdMsg = cmdMsg & Chr(nCrcValue / 256) & Chr(nCrcValue Mod 256)
    
    MSC1.Settings = strBaud
    MSC1.CommPort = nPort
    MSC1.OutBufferCount = 0
    MSC1.PortOpen = True

    MSC1.InputMode = comInputModeText
    MSC1.Output = cmdMsg
    MSC1.InputMode = comInputModeBinary
    MSC1.Output = byCrcValue

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值