串口通信的问题,大家来看一看吧,给高分!!!

时间:2021-10-25 14:15:59
我现在要用串口来控制一台设备

设备的串口协议看下面的链接:

http://cn.briefcase.yahoo.com/bc/syalan1/vwp?.dir=/com&.dnm=%b4%ae%bf%da%d0%ad%d2%e9.jpg&.src=bc&.view=l&.done=http%3a//cn.briefcase.yahoo.com/bc/syalan1/lst%3f%26.dir=/com%26.src=bc%26.view=l


小弟是第一次做这项目,请各位帮忙,我知道使用MSCOMM控件,但怎么把控制指令发出去?文档上写的格式在程序中如何写?它指令格式中STX(02hex)和ETX(03hex)是什么意思?

比如有个命令行“PON”。那我写程序时该怎么写?各位大虾帮帮忙

9 个解决方案

#1


你提供的图片看不清楚。STX和ETX是指令,相关的意思,你不妨查看一下这个产品的指令手册。一般就是Modem的指令了。具体不大清楚

#2


stx 为发送的每一条指令的第一个字节,就是开始字节
etx 为每条指令的最后一个字节,这二个字节的值不变

所有发送的字节的值为16进制数,其他的看不清楚


用comm发送的时候,先初始化com口,奇偶校验位不变的话,只要在开始的时候初始化一次

通常初始化用以下代码:
            MSComm1.InputMode = comInputModeBinary
            MSComm1.RThreshold = 3
            MSComm1.InputLen = 3
            MSComm1.Settings = "9600,n,8,1"
关键的设置在于MSComm1.Settings =波特率,奇偶校验,数据位,停止位
有关这个属性的设置建议看看帮助。

发送时用字节数组,把要发送的字节依次读入数组然后发送
给你个例子:

    Dim vSend As Variant
    Dim bSend(0 To 5) As Byte

            bSend(0) = Stx
            bSend(1) = &H1
            bSend(2) = &H2
            bSend(3) = &H3
            bSend(4) = &H4
            bSend(5) = Etx

            vSend = bSend
            If MSComm1.PortOpen Then
                MSComm1.Output = vSend
            Else
                MSComm1.PortOpen = True
                MSComm1.Output = vSend
            End If
            Do While (MSComm1.OutBufferCount <> 0)
            Loop

#3


把通信协议搞清楚就好做了,应该有关于通信协议的说明吧.

#4


to wxy_xiaoyu(然也) 

说明书上说的指令格式是这样的:

STX(02 HEX)   ID(2 BYTE)  COMMAND(3 BYTE)  ETX(03 HEX)

ID是设备的编号,COMMAND是命令行如“PON”“FCA”等,那STX和ETX是不是直接放到字节数组中啊?就像bSend(0) = Stx?应该转换为16进制吧

#5


up

#6


gz

#7


STX,ETX只是表示指令的名字,具体应填上 &h02和&h03
在VB中,就是
bSend(0) = 2'表示stx
...

#8


StrSend=Chr("&H2")(起始符)+ID(设备编号)+COMMAND INFO+Chr("&H3")(结束符)
其中的信息不知道是以什么方式(ASCII 或者 十六进制...)解释和传输的?
做一下转换,保证发送信息的长度应该就行了.
MSCOMM1.Output=StrSend
另外找些串口调试助手之类的小软件或许可以帮助你.

#9


设备的串口协议看下面的链接:


http://cn.briefcase.yahoo.com/bc/syalan1/lst?&.dir=/com&.src=bc&.view=l

#1


你提供的图片看不清楚。STX和ETX是指令,相关的意思,你不妨查看一下这个产品的指令手册。一般就是Modem的指令了。具体不大清楚

#2


stx 为发送的每一条指令的第一个字节,就是开始字节
etx 为每条指令的最后一个字节,这二个字节的值不变

所有发送的字节的值为16进制数,其他的看不清楚


用comm发送的时候,先初始化com口,奇偶校验位不变的话,只要在开始的时候初始化一次

通常初始化用以下代码:
            MSComm1.InputMode = comInputModeBinary
            MSComm1.RThreshold = 3
            MSComm1.InputLen = 3
            MSComm1.Settings = "9600,n,8,1"
关键的设置在于MSComm1.Settings =波特率,奇偶校验,数据位,停止位
有关这个属性的设置建议看看帮助。

发送时用字节数组,把要发送的字节依次读入数组然后发送
给你个例子:

    Dim vSend As Variant
    Dim bSend(0 To 5) As Byte

            bSend(0) = Stx
            bSend(1) = &H1
            bSend(2) = &H2
            bSend(3) = &H3
            bSend(4) = &H4
            bSend(5) = Etx

            vSend = bSend
            If MSComm1.PortOpen Then
                MSComm1.Output = vSend
            Else
                MSComm1.PortOpen = True
                MSComm1.Output = vSend
            End If
            Do While (MSComm1.OutBufferCount <> 0)
            Loop

#3


把通信协议搞清楚就好做了,应该有关于通信协议的说明吧.

#4


to wxy_xiaoyu(然也) 

说明书上说的指令格式是这样的:

STX(02 HEX)   ID(2 BYTE)  COMMAND(3 BYTE)  ETX(03 HEX)

ID是设备的编号,COMMAND是命令行如“PON”“FCA”等,那STX和ETX是不是直接放到字节数组中啊?就像bSend(0) = Stx?应该转换为16进制吧

#5


up

#6


gz

#7


STX,ETX只是表示指令的名字,具体应填上 &h02和&h03
在VB中,就是
bSend(0) = 2'表示stx
...

#8


StrSend=Chr("&H2")(起始符)+ID(设备编号)+COMMAND INFO+Chr("&H3")(结束符)
其中的信息不知道是以什么方式(ASCII 或者 十六进制...)解释和传输的?
做一下转换,保证发送信息的长度应该就行了.
MSCOMM1.Output=StrSend
另外找些串口调试助手之类的小软件或许可以帮助你.

#9


设备的串口协议看下面的链接:


http://cn.briefcase.yahoo.com/bc/syalan1/lst?&.dir=/com&.src=bc&.view=l