当前位置:中国高校自动化网 >> 现场总线 >> 浏览文章

VB使用Modbus协议读取TDS-3000温度仪

文章来源:不详 作者:佚名 访问次数:


该文章讲述了VB使用Modbus协议读取TDS-3000温度仪的电路原理和应用

因为环境监控工程需要获取机房温度,公司给了我一个三明无线电八厂的TDS-3000温度仪。

使用VB的MSCOMM控件,调试过程很不顺。首先是将发送命令的代码放在一个过程里,但一运行就提示MSComm1.Output属性使用无效,但相同的代码放在窗体的Load事件里就正常。再一个是没有注意到这个设备的停止位是2位,所以串口控件设置成“9600,n,8,1”时一直没有数据返回。另外,看到RS485转RS232的转换器的接收灯一直在闪,可是串口控件的OnComm事件就是没有触发。
 

以下是调试通过的部分代码:
Private Sub TimerMod_Timer()
    Dim Send(8) As Byte
    Dim SendStr As Variant
    Dim Receive() As Byte
    Dim ReceiveStr As Variant
    
    Send(0) = &H1
    Send(1) = &H3
    Send(2) = &H0
    Send(3) = &H0
    Send(4) = &H0
    Send(5) = &H1
    Send(6) = 132 'CRC16 High
    Send(7) = 10  'CRC16 Lo
    
    SendStr = Send
    MSComm1.Output = SendStr
    
    Do
        '这里需要加入超时判断
        DoEvents
    Loop Until MSComm1.InBufferCount >= 7
    MSComm1.InputLen = 0
    ReceiveStr = MSComm1.Input
    Receive = ReceiveStr
    Text1.Text = CStr(HexToDec(Hex$(Receive(3)) & Hex$(Receive(4))))
End Sub

Function HexToDec(str)
    Dim nums_len As Integer
    Dim i As Integer
    Dim tmpstr As String
    Dim dummy, tmp As Integer
    
    dummy = 0
    nums_len = Len(str)
    For i = 1 To nums_len
        tmpstr = Mid(str, i, 1)
        If IsNumeric(tmpstr) Then
            tmp = CInt(tmpstr) * 16 * (16 ^ (nums_len - i - 1))
        Else
            If Asc(UCase(tmpstr)) < 65 Or Asc(UCase(tmpstr)) > 70 Then
                HexToDec = -1
                Exit Function
            End If
            tmp = (Asc(UCase(tmpstr)) - 55) * (16 ^ (nums_len - i)) 
        End If
        dummy = dummy + tmp
    Next
    HexToDec = dummy
End Function
 

相关文章:
  • 什么是GPRS_GPRS技术特点
  • MODBUS-RTU CRC校验码计算 VB源程
  • modbus与plc通讯 vb程序
  • 上一篇:modbus与plc通讯 vb程序
    下一篇:用VB实现Modbus串行通讯
    最近更新