调试的数据是由数控机床上发送的,程序为:
%
O1234
%
使用您提供的串口调试助手软件接收(以16进制形式)的数据为:
12 25 20 0A 0D 0D 4F 31 32 33 34 0A 0D 0D 25 14
使用我自己编写的程序接收为:
12 3F 20 A 3F D 3F 31 3F 33 3F A 3F D 3F 14 14
我自己编写的程序中有些正确的数据都变成了3F,请问是什么原因?
以下是我自己编写的程序代码:
COM1的通信参数为9600,E,7,2
使用二进制接收形式
Option Explicit
Dim bytInput() As Byte
Dim strData As StringPublic Function receivedata() ‘数据接收显示函数(以16进制显示)
Dim i%
For i = 0 To UBound(bytInput)
strData = strData & Hex(bytInput(i)) & " "
Next i
RichTextBox1.Text = RichTextBox1.Text & strData
strData = ""
bytInput = ""
End Function
Private Sub Command1_Click() ’接收数据
Dim slen%
Dim tmp As Variant
slen = Comm1.InBufferCount
ReDim bytInput(slen)
tmp = Comm1.Input
bytInput = tmp
receivedata
End Sub
Private Sub Command2_Click() ‘结束程序
Comm1.PortOpen = False
End
End Sub
Private Sub Form_Load()
Comm1.PortOpen = True
End Sub
希望能得到大家的帮助,谢谢了!
%
O1234
%
使用您提供的串口调试助手软件接收(以16进制形式)的数据为:
12 25 20 0A 0D 0D 4F 31 32 33 34 0A 0D 0D 25 14
使用我自己编写的程序接收为:
12 3F 20 A 3F D 3F 31 3F 33 3F A 3F D 3F 14 14
我自己编写的程序中有些正确的数据都变成了3F,请问是什么原因?
以下是我自己编写的程序代码:
COM1的通信参数为9600,E,7,2
使用二进制接收形式
Option Explicit
Dim bytInput() As Byte
Dim strData As StringPublic Function receivedata() ‘数据接收显示函数(以16进制显示)
Dim i%
For i = 0 To UBound(bytInput)
strData = strData & Hex(bytInput(i)) & " "
Next i
RichTextBox1.Text = RichTextBox1.Text & strData
strData = ""
bytInput = ""
End Function
Private Sub Command1_Click() ’接收数据
Dim slen%
Dim tmp As Variant
slen = Comm1.InBufferCount
ReDim bytInput(slen)
tmp = Comm1.Input
bytInput = tmp
receivedata
End Sub
Private Sub Command2_Click() ‘结束程序
Comm1.PortOpen = False
End
End Sub
Private Sub Form_Load()
Comm1.PortOpen = True
End Sub
希望能得到大家的帮助,谢谢了!
COM1的通信参数要求为
9600,E,7,2
从你的代码看,你未对Comm1的Settings属性进行设置
MSCOMM控件的Settings属性缺省设置为
9600,N,8,1
所以你的代码需修改:Private Sub Form_Load()
Comm1.InputMode = comInputModeBinary '二进制接收
Comm1.Settings = "9600,E,7,2"
Comm1.PortOpen = True
End Sub ParityReplace 属性
当发生奇偶校验错误时,设置并返回替换数据流中一个非法字符的字符。
语法
object.ParityReplace [ = value]
ParityReplace 属性语法包括下列部分:
部分 描述
object 对象表达式,其值是“应用于”列表中的对象。
value 字符串表达式,表示一个字符,如说明中所描述。
说明
parity bit 是指同一定数据位数一起传输的位,以提供简单的错误检查。当使用校验位时,MSComm 控件把在数据中已经设置的所有位(值为 1)都加起来并检查其和为奇数或偶数(根据当端口开时奇偶校验的设置)。
按照缺省规定,MSComm 控件用问号 (?) 替换非法字符。若设置 ParityReplace 为一个空字符串 (""),则当奇偶校验错误出现时,字符替换无效。但 OnComm 事件仍然产生,并且设置 CommEvent 属性为 comEventRXParity。
ParityReplace 字符被用语面向字节的操作,它必须是单字节字符。可指定 0 到 255 之间的 任何 ANSI 字符代码
但为什么还会出现这样的问题呢?
9600,E,7,2
的话,你需检查通信线,也有可能受干扰。
接收你未使用ONCOMM事件可能也是原因之一。
串口调试助手接收数据的话,串口调试助手也会出错.除非把电脑重起,再用串口
调试助手接收又正常的.请问是怎么回事?
我在电脑上将串口2和3的引脚短接进行模拟,用了以下的代码,显示收到的结果和串口调试助手实际连接串口
设备的结果是相同的,并没有出现16进制字符3F的错误,但是用我程序中的接收部分与实际设备连接后,接收
的数据总是错误的,请大家帮忙看看!
Option Explicit
Dim bytInput() As Byte
Dim bytOutput() As Byte
Dim strData As String
Dim counterreceive%
Public Function receivedata()
Dim i%
For i = 0 To UBound(bytInput)
strData = strData & Hex(bytInput(i)) & " "
Next i
RichTextBox1.Text = RichTextBox1.Text & strData
strData = ""
bytInput = ""
End FunctionPrivate Sub Command4_Click()
Dim slen%
Dim outtemp As Variant
slen = 28
ReDim bytOutput(slen)
bytOutput(0) = &H12
bytOutput(1) = &H25
bytOutput(2) = &H20
bytOutput(3) = &HA
bytOutput(4) = &HD
bytOutput(5) = &HD
bytOutput(6) = &H4F
bytOutput(7) = &H31
bytOutput(8) = &H32
bytOutput(9) = &H33
bytOutput(10) = &H34
bytOutput(11) = &HA
bytOutput(12) = &HD
bytOutput(13) = &HD
bytOutput(14) = &H4E
bytOutput(15) = &H31
bytOutput(16) = &H30
bytOutput(17) = &H47
bytOutput(18) = &H35
bytOutput(19) = &H34
bytOutput(20) = &H47
bytOutput(21) = &H39
bytOutput(22) = &H30
bytOutput(23) = &HA
bytOutput(24) = &HD
bytOutput(25) = &HD
bytOutput(26) = &H25
bytOutput(27) = &H14
outtemp = bytOutput
Comm1.Output = outtemp
End SubPrivate Sub Command5_Click()
Dim slen%
Dim tmp As Variantslen = Comm1.InBufferCount
ReDim bytInput(slen)
tmp = Comm1.Input
bytInput = tmp
receivedata
End SubPrivate Sub Command6_Click()
Comm1.PortOpen = False
End
End SubPrivate Sub Form_Load()
Comm1.PortOpen = True
End Sub