当前位置:编程学习 > VB >>

vb MSComm1控件连接HF-50推拉力计通讯失败,求高手解决有代码

COM2接口通讯
MSComm2控件连接HF-50推拉力计(使用COM2口),连接不上,通讯失败.如下是代码.请查看.附档通讯协议.
Private Sub MSComm2_OnComm()
dataByte2 = MSComm2.Input
  
  dataValue2 = 0#
  
  bytLen2 = UBound(dataByte2)
  
  For bytInd2 = 0 To bytLen2
    byteVal2 = dataByte2(bytInd2)
    If (byteVal2 = &H55) Then
      If (codInd2 = 16) Then
        If (codeByte2(0) = &H55) Then
           dataValue2 = (codeByte2(6) - &H30) * (16 ^ 4) + (codeByte2(8) - &H30) * (16 ^ 3) + (codeByte2(10) - &H30) * (16 ^ 2) + (codeByte2(12) - &H30) * 16 + codeByte2(14) - &H30
           'dataValue2 = dataValue2 / 1000
           
          If (codeByte2(4) = &H2D) Then
            dataValue2 = 0 - dataValue2
          End If
          'Jimmy adding 2011-6-22 for offset the right meters
         ' dataValue2 = dataValue2 + 28
        End If
        
      End If
     codInd2 = 0
    End If
  
    codeByte2(codInd2) = byteVal2
    codInd2 = codInd2 + 1
  Next bytInd2
End Sub

测试连接失败。Communications not working
Private Sub Zero2_Click()
    Zero1.Enabled = False    'dont allow simultaneous cal
    Timer1.Enabled = False
    X = 0
    Do While Trim(Left(TabPull.MSComm2.Input, 7)) <> "N-MODE"
        TabPull.MSComm2.Output = "F"
        TabPull.Wait (1)
        TabPull.MSComm2.Output = "S"
        TabPull.Wait (1)
        X = X + 1
        If X > 5 Then Exit Do
    Loop
        
    TabPull.MSComm2.Output = "S"
    TabPull.Wait (1)
    Mode2.Text = Trim(Left(TabPull.MSComm2.Input, 7))
    If X < 6 Then
        Timer1.Enabled = True
        TabPull.Wait 3
        TabPull.MSComm2.Output = "Z"
        ComErr2.Caption = " Communications OK "
    Else
        ComErr2.Caption = " Communications not working "
    End If
    Zero1.Enabled = True
    
End Sub

1. RS-232通讯协议
物理层:波特率2400bps
无奇偶校验
数据位:8位     1个停止位
通讯协议流程
① PC机或者PLC先向测力计(下位机)发送一个OX65
② 下位机按照以下格式(规约)向上位机传送数据
2. 传输力值的数据格式
cpu到pc:55 01 符号 数据  
说明:55是握手

符号2B为正,2D为负
数据为3a,3b,3c,3d,3e的格式,此时力值是a*16^4+b*16^3+c*16^2+d*16+e
实际发送的是10进制数,请用串口调试观察数据
--------------------编程问答-------------------- http://download.csdn.net/detail/veron_04/1262066 --------------------编程问答-------------------- 其实串口通信很容易的,关键就是要研究明白通信协议即可,这个通信协议非常简单。很容易做的 --------------------编程问答-------------------- 以下连接为原代码. MSCOMM1,MSCOMM2使用两个控件连接设备. MSCOMM2连接HF-50推拉力计,目前通讯失败.
窗体ManualControl检查是否连接OK,目前点击"Zero2",会"Communications not working",
窗体TabPull是MSCOMM1,MSCOMM2控件代码.
http://download.csdn.net/detail/hnwjf322/4741227
以下还请高帮忙查看一下原因.
--------------------编程问答-------------------- Input 属性
      

返回并删除接收缓冲区中的数据流。该属性在设计时无效,在运行时为只读。
InputLen 属性确定被 Input 属性读取的字符数。设置 InputLen 为 0,则 Input 属性读取缓冲区中全部的内容。

InputMode 属性确定用 Input 属性读取的数据类型。如果设置 InputMode 为 comInputModeText,Input 属性通过一个 Variant 返回文本数据。如果设置 InputMode 为 comInputModeBinary,Input 属性通过一个 Variant .返回一二进制数据的数组。

数据类型

Variant


Trim(Left(TabPull.MSComm2.Input, 7))

过程返回的值在这次使用之后就丢弃了,下次再次调用怕是会混乱了.

自己维护缓冲区吧.要不就等mscomm.inputlen大于7在调用,要不就用rthreadhold和事件
补充:VB ,  控件
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,