小弟在使用Toledo 8142 仪表,发现从该仪表中读取出来的数据,在由Variant转化成String时变成了乱码,具体的原因我自己也简单的分析了一下,可能由于该仪表在数据的传输过程中在开始位后面包含了ABC三个字符,后面是7位的数据位,在使用StrConv函数将Variant 转化成String就变成了乱码,小弟虽然发现了这个原因,但是不知道如何解决该问题,希望各位大峡指点江山。仪表的传输格式:02H + ABC + 6位数据位+ 6位数据位 + 2位停止位 (一共18位)
COM1的设置:1200,n,8,2
COM1的设置:1200,n,8,2
今天按照你说的方法做了,可是最终读出来得还是乱码。从仪表中接受到数据中查找Chr(2),返回值始终是零,无法进行字符串分析,现在一点法子也没有了。
MSCOMM1中的代码如下:
Case comEvReceive
Dim Buffer As Variant
Buffer = MSComm1.Input
Dim nPos As Integer
Dim strComText As String
strComText = Buffer
nPos = InStr(1, strComText, Chr(2))
If nPos > 0 Then
Dim strTemp1 As String
strTemp1 = Mid(Buffer, nPos +2, 7)
End Ifcbm666,你看问题出在什么地方呢?其他信息:仪表显示内容:03490
Buffer内容:"崅?牋03?0?0000崅?牋03?0?0000崅?牋03?0?0000崅?牋03?0?0000崅?牋03?0?0000崅?牋03?0?0000崅?牋03?0?0000崅?牋03?0?0000崅?牋03?0?0000崅?牋03?0?0000崅?牋03?0?0000崅"小弟,先谢谢咯
我很少来这里[email protected] or QQ249496745
2400,n,8,1
4800,n,8,1
9600,n,8,1
F3.1 波特率 300,1200,2400,4800,9600
F3.2 数据位 X=7 X=8
F3.3 校验位 X=0(None) X=1(Odd) X=2(Even)
F3.4 校验和 X=0(不发送) X=1(发送)原厂设置 1200,E,7,1
出厂设置 9600,N,8,1 (比较懒时他们出货时没设)你用 1200,n,8,2 肯定是乱码,你这样设试看看, 除非你的设置已被你改掉了,否则应该可以With MSComm1
.CommPort = 1
.Settings = "1200,E,7,1"
.InputLen = 0
.InputMode = comInputModeText '使用这个文本方式接收
.RThreshold = 18 '第一位是chr(2) 2-4位是状态别管它,第5位开始到第10位共6位是重量,11-16是皮重(不管它),第17位是chr(13)第18位是CKS
If Not .PortOpen Then .PortOpen = True
End With在Private Static Sub MSComm1_OnComm()事件中If MSComm1.InBufferCount <> 0 Then
rcvdata = MSComm1.Input
List1.additem rcvdata '如还不行你把它截图出来给我看
end if
谢谢你的提示,今天我在试试看咯,如果不可以,我就和你说~~~cbm666和wei001001,这俩都是十分热心的人,小弟先谢谢咯。小弟的邮件:[email protected]
但是也提出一点小问题:
If MSComm1.InBufferCount <> 0 Then
end if
这个判断条件在代码始终为零。我最后通过判断读取出来得字符长度来判断的。cbm666 再次对你的回答表示感谢。