我的是电子数显卡尺和数显表~~~~~其实我是想做个适配器 适配器可以把数字信号转变为RS-232C形式,并可作为量具与电脑之间的接口,进行数据分析。 基本要求的功能如上~~~ 现在我的硬件(适配器)是有了,就是软件部分(我指的我的VB编程程序)读不出数据来 可能我的MScomm写不好吧 我是这样写的~~~~~~~~ Private Sub MSComm1_OnComm() Dim inputbuffer As Variant inputbuffer1 = MSComm1.Input data1 = Mid(inputbuffer1, 1, 8) textcom1.Text = Val(data1) * 0.01 End Sub 表上的数据不会在textcom1上显示出来~~~ 什么原因呢??另外还有其他的问题~~不过现在主要是能把数据显示出来~ 各位大哥~~~~帮帮忙吧!!!!!!!!!!
Option ExplicitPrivate Sub Form_Load() MSComm1.RThreshold = 8 '接收数据长度' End SubPrivate Sub MSComm1_OnComm() Dim inputbuffer As Variant Select Case MSComm1.CommEvent Case comEvReceive inputbuffer1 = MSComm1.Input() textcom1.Text = Val(inputbuffer1) * 0.01 End Select End Sub
Private Sub Form_Load() MSComm1.CommPort = 1 MSComm1.Settings = "9600, n, 8, 1" MSComm1.RThreshold = 10 MSComm1.PortOpen = True End SubPrivate Sub MSComm1_OnComm() Dim inputbuffer As String Select Case MSComm1.CommEvent Case comEvReceive inputbuffer1 = MSComm1.Input() textcom1.Text = Mid(inputbuffer1, 1, 6) & "." & Mid(inputbuffer1, 7) End Select End Sub
你的第二字节总是 00,应该用二进制方式接收。 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
Option Explicit Dim strsj As StringPrivate Sub Form_Load() MSComm1.CommPort = 1 MSComm1.Settings = "9600,n,8,1" MSComm1.RThreshold = 10 MSComm1.InputMode = comInputModeBinary MSComm1.InputLen = 0 MSComm1.PortOpen = True End SubPrivate Sub MSComm1_OnComm() Dim buffer() As Byte Dim i As Integer Select Case MSComm1.CommEvent Case comEvReceive buffer = MSComm1.Input For i = 0 To UBound(buffer) strsj = strsj & Right("0" & Hex(buffer(i)), 2) Next If Mid(strsj, 17, 2) = "0D" And Len(strsj) = 20 Then Text1 = Chr(Val("&H" & Mid(strsj, 1, 2))) & Format(Val(Mid(strsj, 6, 1) & Mid(strsj, 8, 1) & Mid(strsj, 10, 1) & Mid(strsj, 12, 1) & Mid(strsj, 14, 1) & Mid(strsj, 16, 1)) / 100, "000.00") strsj = "" End If End Select End Sub
适配器可以把数字信号转变为RS-232C形式,并可作为量具与电脑之间的接口,进行数据分析。
基本要求的功能如上~~~
现在我的硬件(适配器)是有了,就是软件部分(我指的我的VB编程程序)读不出数据来
可能我的MScomm写不好吧
我是这样写的~~~~~~~~
Private Sub MSComm1_OnComm()
Dim inputbuffer As Variant
inputbuffer1 = MSComm1.Input
data1 = Mid(inputbuffer1, 1, 8)
textcom1.Text = Val(data1) * 0.01
End Sub
表上的数据不会在textcom1上显示出来~~~
什么原因呢??另外还有其他的问题~~不过现在主要是能把数据显示出来~
各位大哥~~~~帮帮忙吧!!!!!!!!!!
MSComm1.RThreshold = 8 '接收数据长度'
End SubPrivate Sub MSComm1_OnComm()
Dim inputbuffer As Variant Select Case MSComm1.CommEvent
Case comEvReceive
inputbuffer1 = MSComm1.Input()
textcom1.Text = Val(inputbuffer1) * 0.01
End Select
End Sub
MSComm1.CommPort = 1
MSComm1.Settings = "9600, n, 8, 1"
MSComm1.RThreshold = 10
MSComm1.PortOpen = True
End SubPrivate Sub MSComm1_OnComm()
Dim inputbuffer As String
Select Case MSComm1.CommEvent
Case comEvReceive
inputbuffer1 = MSComm1.Input()
textcom1.Text = Mid(inputbuffer1, 1, 6) & "." & Mid(inputbuffer1, 7)
End Select
End Sub
http://p.blog.csdn.net/images/p_blog_csdn_net/lousn/EntryImages/20090729/未命名.jpg
http://download.csdn.net/source/1262066
http://download.csdn.net/source/1441583
我就猜是什么原因会让我昨天20.36的数据显示是36+(上面也有图)其中是一个原因吧
难道是我的硬件问题????
但是我用别人做好的软件(第一张图片,有16.03那张)就能显示出来呢??
?????????????????????????????????????????????????????????????????????????????????
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
Dim strsj As StringPrivate Sub Form_Load()
MSComm1.CommPort = 1
MSComm1.Settings = "9600,n,8,1"
MSComm1.RThreshold = 10
MSComm1.InputMode = comInputModeBinary
MSComm1.InputLen = 0
MSComm1.PortOpen = True
End SubPrivate Sub MSComm1_OnComm()
Dim buffer() As Byte
Dim i As Integer
Select Case MSComm1.CommEvent
Case comEvReceive
buffer = MSComm1.Input
For i = 0 To UBound(buffer)
strsj = strsj & Right("0" & Hex(buffer(i)), 2)
Next
If Mid(strsj, 17, 2) = "0D" And Len(strsj) = 20 Then
Text1 = Chr(Val("&H" & Mid(strsj, 1, 2))) & Format(Val(Mid(strsj, 6, 1) & Mid(strsj, 8, 1) & Mid(strsj, 10, 1) & Mid(strsj, 12, 1) & Mid(strsj, 14, 1) & Mid(strsj, 16, 1)) / 100, "000.00")
strsj = ""
End If
End Select
End Sub
我刚用VB老鸟的code,这句'textcom1.Text = Left$(data,1) & CStr(Val(Mid$(Data, 3, 6))/100)
改为textcom1.Text = Left$(data,1) & CStr(Val(Mid$(Data, 1, 8))/100)曾经能显示完好(包括正负号),但是一下又不能显示了~~~~就在-0跟n0间闪
B)也许数据传输太快,在触发 OnComm 到调用 Input() 中间又收到后续数据,导致没有按10字节进行拆分。在 Form_Load 中添加如下设置
MSComm1.InputLen = 10
Text1.Text = chr(0) & "这是他们给的数据"
Debug.Print Len(Text1.Text)
LZ试办下上述代码就理解了.
我都调到烦完,晕完,现在还是不行~~~~~~~~~~~
真的想过放弃>>>>>>>>>>>但是看到大家都那么帮忙>>>>>>>
所以我不会放弃的,我先做其他的工作,下午继续努力!!!!!!!
总之谢谢大家的帮忙!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
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 表示确认,这个没有问题。
现在的关键点是怎么通过第二位到第八位来构建你的数据?只要搞清楚这个问题就可以解决问题了。
ASCII码 字符
第一位: 2B + 2D为-
第二位: 00 无 都是00
第三位: 30 0 30-39分别为1-9
第四位: 30 0 30-39分别为1-9
第五位: 30 0 30-39分别为1-9
第六位: 39 9 30-39分别为1-9
第七位: 35 5 30-39分别为1-9
第八位: 31 1 30-39分别为1-9
第九位: 0D 无法表示
第十位: 12 无法表示
所以读数是9.51不知道该怎么些才能显示一致呢??
23#的我试过了,读数不正确阿,我上面说过了
我用VB老鸟的code,这句'textcom1.Text = Left$(data,1) & CStr(Val(Mid$(Data, 3, 6))/100)
3和6我改了好多次其中改为'textcom1.Text = Left$(data,1) & CStr(Val(Mid$(Data, 1, 8))/100)最接近我的仪器读数,只是小数点前面的数据一点都不对
换其他的任何都不接近
我刚刚新建了个文件,只是简单的放了一个Text 一个 MSComm,真的能读数
现在问题是,我只是想在负数的时候才显示-号
正数的时候前面不要+号,还有0.XX的时候只是显示.XX前面的0没有哦~~~~~~~~~~
呵呵,你已经悟到了真谛!
剩余下来的就是把数组中的ASCII编码转换为字符即可:
Dim dblValue As Double
dblValue = Val(Left$(Data, 1) & "1") * Val(Mid$(Data, 3, 6)) / 100
textcom1.Text = FormatNumber(dblValue, , vbTrue)
继续努力工作吧,刚弄了一下,现在我的问题是:
1。我的量具数据默认显示为MM,当我把数据转换为英制的时候,他提示为2.大家看我的第一张贴图那些功能,我是按单位选择的时候显示在TEXTCOM1里面的.