串口问题~~~~~~进来帮忙看看
大家好!!!!!!!!!!!!!!!
如何实现把数显表上的数据通过数据线连接到电脑显示出来~~~~~~~
功能如下图
[解决办法]
具体按照硬件的通讯协议,用 Microsoft Winsock Control 6.0 控件进行通讯。
[解决办法]
就如上所说,用mscomm控件,依照通讯协议,间隔一段时间不停的去读取数据,或者是数据表支持自动发送数据,在oncomm事件中接收并处理显示出来。
[解决办法]
先用网上下载的串口调试工具确认你的底层发送数据正确,再考虑上层程序的问题。
[解决办法]
[解决办法]
再多嘴一句,楼主最好选用16进制方式通信试一试,可以把通信结果放上来,我们帮你分析分析。
http://download.csdn.net/source/1441583
[解决办法]
你的第二字节总是 00,应该用二进制方式接收。
- VB code
Private Sub Form_Load() MSComm1.CommPort = 1 MSComm1.Settings = "9600, n, 8, 1" MSComm1.RThreshold = 10 MSComm1.InputMode = comInputModeBinary MSComm1.PortOpen = True End Sub Private Sub MSComm1_OnComm() Dim inputbuffer As Variant Dim data As String Select Case MSComm1.CommEvent Case comEvReceive inputbuffer = MSComm1.Input() data = StrConv(inputbuffer, vbUnicode) textcom1.Text = Left$(data,1) & CStr(Val(Mid$(Data, 3, 6))/100) End Select End Sub
[解决办法]
A)你收到的数据不一定只有这10个字节的数据,可能有其他数据产生了干扰
B)也许数据传输太快,在触发 OnComm 到调用 Input() 中间又收到后续数据,导致没有按10字节进行拆分。在 Form_Load 中添加如下设置
- VB code
MSComm1.InputLen = 10
[解决办法]
看了你所说的通信协议和你通过串口调试器所得到的数据,你接受到的数据侦应该是:
2B 00 30 30 30 39 35 31 0D 12
ASCII码 字符
第一位: 2B +
第二位: 00 无
第三位: 30 0
第四位: 30 0
第五位: 30 0
第六位: 39 9
第七位: 35 5
第八位: 31 1
第九位: 0D 无法表示
第十位: 12 无法表示
其中:第九位和第十位就是楼主所说的:13 和 18 表示确认,这个没有问题。
现在的关键点是怎么通过第二位到第八位来构建你的数据?只要搞清楚这个问题就可以解决问题了。
[解决办法]
如何显示是格式化的问题
- VB code
Dim dblValue As DoubledblValue = Val(Left$(Data, 1) & "1") * Val(Mid$(Data, 3, 6)) / 100textcom1.Text = FormatNumber(dblValue, , vbTrue)