Wincc使用MSComm控件串口通讯

zxy13206459893 2018-04-02 12:16:15
如何实现十六进制数据的接收和发送。
...全文
1143 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
赵4老师 2018-04-08
  • 打赏
  • 举报
回复
引用 6 楼 zxy13206459893 的回复:
我是用VBS编写接收十六进制数据,VBS不能定义数据的类型啊

啪!啪!
zxy13206459893 2018-04-07
  • 打赏
  • 举报
回复
我是用VBS编写接收十六进制数据,VBS不能定义数据的类型啊
of123 2018-04-04
  • 打赏
  • 举报
回复
计算机及相关系统传输和存储的数据,都是二进制的。 所谓 10 进制、16 进制不过是将这些二进制数以不同的格式显示。 当然,你也可以将要传输的数据事先转换成 16 进制字符串,然后传输串的字符编码(例如 ASCII 码)。对于通讯接口来说,它传的还是二进制。 不知道楼主的需求是什么。
zdingyun 2018-04-03
  • 打赏
  • 举报
回复
Private Sub MSComm1_OnComm() '接收数据
    Dim strBuff As String
    Select Case MSComm1.CommEvent
        Case 2
            MSComm1.InputLen = 0
            strBuff = MSComm1.Input
            BytReceived() = strBuff
            jieshou
            lenInput = Len(strData)
            Text2 = lenInput \ 2
            '数据处理代码
    End Select
End Sub

Public Function jieshou() '接收数据处理为16进制
    Dim i As Integer
    For i = 0 To UBound(BytReceived)
        If Len(Hex(BytReceived(i))) = 1 Then
            strData = strData & "0" & Hex(BytReceived(i))
        Else
            strData = strData & Hex(BytReceived(i))
        End If
    Next
    txtReceive = strData
End Function
 
zdingyun 2018-04-03
  • 打赏
  • 举报
回复
引用 楼主 zxy13206459893 的回复:
如何实现十六进制数据的接收和发送。
所谓十六进制仅是Byte字节数据的一种十六进制字符串的表示,本质仍是基于二进制的传送。接收需要以二进制模式接收,发送按Byte数组发送。
Private Sub cmdSendHex_Click() '16进制发送
    Dim sj() As Byte
    Dim sj_Txt As String
    Dim i As Integer
    sj_Txt = TxtSend
    If Len(TxtSend) Mod 2 = 0 And Len(TxtSend) <> 0 Then '检验16进制字符串长
        ReDim sj(Len(sj_Txt) / 2 - 1)
        For i = 0 To Len(sj_Txt) - 1 Step 2
           sj(i / 2) = Val("&H" & Mid(sj_Txt, i + 1, 2))
        Next
        If MSComm1.PortOpen = True Then
            MSComm1.Output = sj
        Else
            MSComm1.PortOpen = True
            Shape1.FillColor = vbGreen
            MSComm1.Output = sj
        End If
    Else
        MsgBox ("格式不对!")
    End If
End Sub
'字符串表示的十六进制数据转化为相应的字节串,返回转化后的字节数

Private Sub Form_Load()
    MSComm1.InputMode = comInputModeBinary      '采用二进制传输
    MSComm1.InBufferCount = 0   '清空接受缓冲区
    MSComm1.OutBufferCount = 0  '清空传输缓冲区
    MSComm1.RThreshold = 1      '产生MSComm事件
    MSComm1.InBufferSize = 1024
    TxtSend = ""
    TxtSend = "" '800A00113135323634389794"
    txtReceive = ""
    Text2 = ""
End Sub
 
赵4老师 2018-04-03
  • 打赏
  • 举报
回复
Input 属性 返回并删除接收缓冲区中的数据流。该属性在设计时无效,在运行时为只读。 语法 object.Input Input 属性语法包括下列部分: 部分 描述 object 对象表达式,其值是“应用于”列表中的对象。 说明 InputLen 属性确定被 Input 属性读取的字符数。设置 InputLen 为 0,则 Input 属性读取缓冲区中全部的内容。 InputMode 属性确定用 Input 属性读取的数据类型。如果设置 InputMode 为 comInputModeText,Input 属性通过一个 Variant 返回文本数据。如果设置 InputMode 为 comInputModeBinary,Input 属性通过一个 Variant .返回一二进制数据的数组。 数据类型 Variant Dim Bytes() as Byte ' 设置并打开窗口 MSComm1.CommPort = 1 MSComm1.PortOpen = True ReDim Bytes(1) BYtes(0)=&HAB BYtes(1)=&HEF MSComm1.Output = Bytes
脆皮大雪糕 2018-04-02
  • 打赏
  • 举报
回复
最简单的就是把你要发的东西转换为byte数组,接收也一样的,以字节数组接收。剩下的就是数据的转换问题了。 至于十六进制,还是十进制,那只是一个数对于人的具体体现形式,对于计算机和程序来说都一样。 你把数字转换为十六进制表示的字符串另说

1,451

社区成员

发帖
与我相关
我的任务
社区描述
VB 控件
社区管理员
  • 控件
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧