vb与称重仪表怎么通讯 大家好,近来我在用vb开发一套称重管理程序中遇到了难题, 一早也没做过串口编程,所以现在很棘手。也看了很多少资料,就是搞不明白软件怎么样获取称重仪表的数值。主要有个难题,我对称重仪表的通讯协议有点不解,我知道采用连续发送方式,可是我总是写出来的代码很不稳定,容易报错。另外我不知道怎么才可以把一个软件可以与许多仪表才能配接。如有那位朋友了解,熟悉,请不吝赐教,在这里我先谢谢啦! 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 最好能问称重仪厂家要个VB的DEMO 用MSCOMM做,很容易的设置好波特率再写个响应处理函数即可 不好意思各位,近两天有点事情没有在家,所以在这里向大家说不是,望大家原谅。我实际上想做一个可以配接各种仪表的一个软件,但是我现在一个都没有通过,那就先说一个仪表,把一个仪表拿下再说好啦!通讯协议如下:XK3190-A9 仪表具有RS232 串行通讯接口,可与计算机进行通讯。1. 通讯接口采用15 芯插头座(与大屏幕共用),其引脚定义见图2--5 中6、7、8 脚。2. 通讯接口采用RS232C,所有数据均为ASCII 码,每组数据有10 位组成,第1 位为起始位,第10位为停止位,中间8 位为数据位。通讯方式分为:(1). 连续方式:所传送的数据为仪表显示的当前称量(毛重或净重)。每帧数据由12 组数据组成 。格式如下:第X 字节 内 容 及 注 解1 02(XON) 开始2 +或- 符号位3 称量数据 高位: 称量数据 :: 称量数据 :8 称量数据 低位9 小数点位数 从右到左(0~4)10 异或校验 高四位11 异或校验 低四位12 03(X0FF) 结束异或=2⊕3⊕……8⊕9 建立一个工程,把全部代码拷入,即可测试。Private Sub Command1_Click()Text1.Text = ""Text3.Text = ""Label1.Caption = "动 态"Label1.ForeColor = &HFF&Timer1.Enabled = TrueTimer3.Enabled = TrueEnd SubPrivate Sub Form_Load()MSComm1.CommPort = 1MSComm1.PortOpen = TrueEnd SubPrivate Sub Timer1_Timer()Dim buffer1, buffer2, buffer3'buffer2用于保存缓冲区的数据buffer2 = MSComm1.Inputbuffer1 = " "'查找存缓冲区的数据是否有空格出现因为空格后的数据为有用数据buffer3 = InStr(buffer2, buffer1)If buffer3 = 0 ThenExit SubElse'buffer3为空格出现的位置,加一后取6个长度就是称的读数buffer3 = buffer3 + 1Text1.Text = Mid(buffer2, buffer3, 6)End IfEnd SubPrivate Sub Timer2_Timer()Dim buffer1, buffer2, buffer3buffer2 = MSComm1.Inputbuffer1 = " "buffer3 = InStr(buffer2, buffer1)If buffer3 = 0 ThenExit SubElsebuffer3 = buffer3 + 1Text2.Text = Mid(buffer2, buffer3, 6)End IfEnd SubPrivate Sub Timer3_Timer()Dim buffer1, buffer2, buffer3buffer2 = MSComm1.Inputbuffer1 = " "buffer3 = InStr(buffer2, buffer1)If buffer3 = 0 ThenExit SubElsebuffer3 = buffer3 + 1Text3.Text = Mid(buffer2, buffer3, 6)If Text1.Text = Text3.Text ThenTimer1.Enabled = FalseTimer2.Enabled = FalseTimer3.Enabled = FalseLabel1.Caption = "稳 态"Label1.ForeColor = &HFF00&End IfEnd IfEnd Sub http://download.csdn.net/source/1262066这是一个串口调试器的代码,你下载来单步调试一下。 我做过金钟衡器的电子称重,分析一下MSCOMM控件获取到的实时数据,再对照协议看看数据的含义,不难实现。 我现在都在做仪表的通讯程序,看了一下你的情况,顺便查了一下这个仪表的通讯协议,试写如下代码:Dim getData As StringPrivate Sub Command1_Click() MSComm1.PortOpen = True '打开串口,开始接收 End SubPrivate Sub Form_Load() MSComm1.CommPort = 1 '计算机的端口号,你当前使用COM几 MSComm1.InBufferCount = 0 '接收缓冲初始 MSComm1.Settings = "9600,n,8,1" '在仪表调成波特率9600,8位数据,1位停止,无校验 Timer1.Enabled = True Timer1.Interval = 300 '500ms读一次可以更小,但不要小于50 Text1.Text = Text1.Text & getData & vbLf & vbCr End SubPrivate Sub Timer1_Timer() Dim rcv As String rcv = MSComm1.Input If Len(rvc) >= 12 Then If Not InStr(rcv, Chr(3)) Or Not InStr(rcv, Chr(2)) Then Exit Sub '数据不完整,不要 rcv = Right(rcv, Len(rcv) - InStr(rcvc, Chr(2)) - 1) rcv = Left(InStr(rcv, Chr(3)) - 1) rcv = Left(Len(rcv) - 2) Else Exit Sub '数据不完整,不要 End If getData = rcvEnd Sub这里变量getdata 应该就是你要的称重数据.可以用到其它运算中去了.看看TEXT1文本有没?因为没有实际的仪表调试,不敢说这些代码就能正常,给你参考一下吧:) 噢,再提下,上面代码将MSComm1.PortOpen = True 与 Timer1.Enabled = True交换一下位置,更合理 VB COMBO立即响应问题 如何用vb程序给word文档加页眉页脚 shell函数一问 愿结交天下所有的VB程序员共同进步,有意者请与我联系!!! 想在用VB6.0制作的软件调用tom365和skyme站内搜索引擎,请问各位大虾该如何实现 如何实现局域网语音同步播放 crystl32.ocx 请问这是一个什么控件?哪里有得下载? 各位高手看看啊!发布VB应用程序到其它人机子上去的问题。 VB 如何接受 指针?? VB高手, 急救!!!! 请新斑竹帮个忙,回答一个问题! 求教:VB编程问题 还是随机文件读写问题
最好能问称重仪厂家要个VB的DEMO
设置好波特率
再写个响应处理函数即可
不好意思各位,近两天有点事情没有在家,所以在这里向大家说不是,望大家原谅。
我实际上想做一个可以配接各种仪表的一个软件,但是我现在一个都没有通过,那就先说一个仪表,把一个仪表拿下再说好啦!通讯协议如下:
XK3190-A9 仪表具有RS232 串行通讯接口,可与计算机进行通讯。
1. 通讯接口采用15 芯插头座(与大屏幕共用),其引脚定义见图2--5 中6、7、8 脚。
2. 通讯接口采用RS232C,所有数据均为ASCII 码,每组数据有10 位组成,第1 位为起始位,第10位为停止位,中间8 位为数据位。通讯方式分为:
(1). 连续方式:
所传送的数据为仪表显示的当前称量(毛重或净重)。每帧数据由12 组数据组成 。格式如下:
第X 字节 内 容 及 注 解
1 02(XON) 开始
2 +或- 符号位
3 称量数据 高位
: 称量数据 :
: 称量数据 :
8 称量数据 低位
9 小数点位数 从右到左(0~4)
10 异或校验 高四位
11 异或校验 低四位
12 03(X0FF) 结束
异或=2⊕3⊕……8⊕9
Private Sub Command1_Click()
Text1.Text = ""
Text3.Text = ""
Label1.Caption = "动 态"
Label1.ForeColor = &HFF&
Timer1.Enabled = True
Timer3.Enabled = TrueEnd SubPrivate Sub Form_Load()
MSComm1.CommPort = 1
MSComm1.PortOpen = TrueEnd SubPrivate Sub Timer1_Timer()
Dim buffer1, buffer2, buffer3'buffer2用于保存缓冲区的数据
buffer2 = MSComm1.Input
buffer1 = " "
'查找存缓冲区的数据是否有空格出现因为空格后的数据为有用数据
buffer3 = InStr(buffer2, buffer1)
If buffer3 = 0 Then
Exit Sub
Else
'buffer3为空格出现的位置,加一后取6个长度就是称的读数
buffer3 = buffer3 + 1
Text1.Text = Mid(buffer2, buffer3, 6)
End If
End Sub
Private Sub Timer2_Timer()
Dim buffer1, buffer2, buffer3
buffer2 = MSComm1.Input
buffer1 = " "
buffer3 = InStr(buffer2, buffer1)
If buffer3 = 0 Then
Exit Sub
Else
buffer3 = buffer3 + 1
Text2.Text = Mid(buffer2, buffer3, 6)
End If
End SubPrivate Sub Timer3_Timer()
Dim buffer1, buffer2, buffer3
buffer2 = MSComm1.Input
buffer1 = " "
buffer3 = InStr(buffer2, buffer1)
If buffer3 = 0 Then
Exit Sub
Else
buffer3 = buffer3 + 1
Text3.Text = Mid(buffer2, buffer3, 6)
If Text1.Text = Text3.Text Then
Timer1.Enabled = False
Timer2.Enabled = False
Timer3.Enabled = False
Label1.Caption = "稳 态"
Label1.ForeColor = &HFF00&
End If
End If
End Sub
MSComm1.PortOpen = True '打开串口,开始接收
End SubPrivate Sub Form_Load()
MSComm1.CommPort = 1 '计算机的端口号,你当前使用COM几
MSComm1.InBufferCount = 0 '接收缓冲初始
MSComm1.Settings = "9600,n,8,1" '在仪表调成波特率9600,8位数据,1位停止,无校验
Timer1.Enabled = True
Timer1.Interval = 300 '500ms读一次可以更小,但不要小于50
Text1.Text = Text1.Text & getData & vbLf & vbCr
End SubPrivate Sub Timer1_Timer()
Dim rcv As String
rcv = MSComm1.Input
If Len(rvc) >= 12 Then
If Not InStr(rcv, Chr(3)) Or Not InStr(rcv, Chr(2)) Then Exit Sub '数据不完整,不要
rcv = Right(rcv, Len(rcv) - InStr(rcvc, Chr(2)) - 1)
rcv = Left(InStr(rcv, Chr(3)) - 1)
rcv = Left(Len(rcv) - 2)
Else
Exit Sub '数据不完整,不要
End If
getData = rcv
End Sub这里变量getdata 应该就是你要的称重数据.可以用到其它运算中去了.看看TEXT1文本有没?因为没有实际的仪表调试,不敢说这些代码就能正常,给你参考一下吧:)