当前位置:编程学习 > VB >>

vb与称重仪表怎么通讯

大家好,近来我在用vb开发一套称重管理程序中遇到了难题, 一早也没做过串口编程,所以现在很棘手。也看了很多少资料,就是搞不明白软件怎么样获取称重仪表的数值。主要有个难题,我对称重仪表的通讯协议有点不解,我知道采用连续发送方式,可是我总是写出来的代码很不稳定,容易报错。另外我不知道怎么才可以把一个软件可以与许多仪表才能配接。如有那位朋友了解,熟悉,请不吝赐教,在这里我先谢谢啦! --------------------编程问答-------------------- 你的称重仪有没有通信协议?或者是资料?可以提供来看看不?

两点建议:
1、提供称重仪的资料(通信协议)。
2、提供你的代码。
--------------------编程问答--------------------
引用 1 楼 Veron_04 的回复:
你的称重仪有没有通信协议?或者是资料?可以提供来看看不? 

两点建议: 
1、提供称重仪的资料(通信协议)。 
2、提供你的代码。 


最好能问称重仪厂家要个VB的DEMO --------------------编程问答--------------------
1 关于通讯端口和协议,要看称重仪支持什么,你的目标机有无该端口。一般来说,厂家都有示例代码。

2 多个仪表连接的问题。如果是串口,主要有两种方式,一是使用转接器,二是每个仪表连接一个端口。这要看目标机提供了多少个端口,必要时需要扩展卡。


如果希望更详细的帮助,请详述你的端口类型、通讯协议以及需要连接的仪表数量。 --------------------编程问答-------------------- 1. 看通讯接口 通讯协议
2. 485网络 可以吗? 每个表的地址不一样 取哪个表 取数据命令 就带上哪个表的地址
--------------------编程问答-------------------- 用MSCOMM做,很容易的
设置好波特率
再写个响应处理函数即可 --------------------编程问答-------------------- 楼主消失在帖子中了。 --------------------编程问答--------------------
引用 6 楼 Veron_04 的回复:
楼主消失在帖子中了。


呵呵 
找厂家要相关示例的代码 --------------------编程问答-------------------- 我以前做个这方面得程序,有的仪表提供控件,直接用就可以了象(拖利多的),宇光的要看通讯协议等。给你个小实例吧。没有邮箱地址呀。 --------------------编程问答-------------------- 楼主已经消失几天了
我们正贴寻人启示呢 --------------------编程问答--------------------
引用 1 楼 veron_04 的回复:
你的称重仪有没有通信协议?或者是资料?可以提供来看看不?

两点建议:
1、提供称重仪的资料(通信协议)。
2、提供你的代码。


不好意思各位,近两天有点事情没有在家,所以在这里向大家说不是,望大家原谅。
我实际上想做一个可以配接各种仪表的一个软件,但是我现在一个都没有通过,那就先说一个仪表,把一个仪表拿下再说好啦!

通讯协议如下:
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
--------------------编程问答-------------------- 楼主你总算来了,感动啊!!!!!!!1 --------------------编程问答--------------------
引用 3 楼 of123 的回复:
1 关于通讯端口和协议,要看称重仪支持什么,你的目标机有无该端口。一般来说,厂家都有示例代码。

2 多个仪表连接的问题。如果是串口,主要有两种方式,一是使用转接器,二是每个仪表连接一个端口。这要看目标机提供了多少个端口,必要时需要扩展卡。


如果希望更详细的帮助,请详述你的端口类型、通讯协议以及需要连接的仪表数量。


通过串口实现,就通过计算机上自带的串口实现,要说扩展的话,除非电脑上的串口坏了,或者计算机需要的串口比较多才要扩展的,一般是没必要扩展的。 --------------------编程问答--------------------
引用 5 楼 b43ok 的回复:
用MSCOMM做,很容易的
设置好波特率
再写个响应处理函数即可


可是往往都不稳定,你有写好的代码吗,可以贴上来,让我欣赏一下不,或者可以给我发到邮箱里,我的邮箱:lezai525@21cn.com,先谢谢拉。
--------------------编程问答-------------------- 建议你用串口调试器调试一下,把接收来的数据发上来我们看看
看你的表述,我还是有一点点不明白。 --------------------编程问答--------------------
引用 14 楼 veron_04 的回复:
建议你用串口调试器调试一下,把接收来的数据发上来我们看看
看你的表述,我还是有一点点不明白。


不明白什么呢,你说来,我再给你说的详细一些。 --------------------编程问答--------------------
引用 8 楼 hc4101 的回复:
我以前做个这方面得程序,有的仪表提供控件,直接用就可以了象(拖利多的),宇光的要看通讯协议等。给你个小实例吧。没有邮箱地址呀。


先谢谢拉,我的邮箱:lezai525@21cn.com --------------------编程问答-------------------- 建立一个工程,把全部代码拷入,即可测试。
Private Sub Command1_Click()
Text1.Text = ""
Text3.Text = ""
Label1.Caption = "动 态"
Label1.ForeColor = &HFF&
Timer1.Enabled = True
Timer3.Enabled = True

End Sub

Private Sub Form_Load()
MSComm1.CommPort = 1
MSComm1.PortOpen = True

End Sub

Private 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 Sub

Private 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
--------------------编程问答--------------------
引用 17 楼 hc4101 的回复:
建立一个工程,把全部代码拷入,即可测试。
Private Sub Command1_Click()
Text1.Text = ""
Text3.Text = ""
Label1.Caption = "动 态"
Label1.ForeColor = &HFF&
Timer1.Enabled = True
Timer3.Enabled = True

End Sub

Private Sub Form_Load()
MSComm1.CommPort = 1
MSComm1.PortOpen = True

End Sub

Private 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 Sub

Private 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

朋友你我不太理解你的意思呀,你这是要做什么呢?一是你这样三个text显示的都不是称重仪表的值,另外你这样还要用三个text,也不太合乎人的常规习惯呀。我应当没有理解你的意思,你可以详细的说一下吗?我的QQ:82326248,有时间的话希望我们在QQ上聊聊。 --------------------编程问答-------------------- http://download.csdn.net/source/1262066

这是一个串口调试器的代码,你下载来单步调试一下。 --------------------编程问答-------------------- 我做过金钟衡器的电子称重,分析一下MSCOMM控件获取到的实时数据,再对照协议看看数据的含义,不难实现。
--------------------编程问答--------------------
引用 20 楼 itfamily 的回复:
我做过金钟衡器的电子称重,分析一下MSCOMM控件获取到的实时数据,再对照协议看看数据的含义,不难实现。


朋友你好,你可以详细的说说,写这部分代码的步骤以及注意事项吗?先谢谢啦...
--------------------编程问答-------------------- 很普遍的东西哦,我常常通过串口读取赛多利斯电子秤的数据!有现成的代码,很稳定的。 --------------------编程问答-------------------- 我现在都在做仪表的通讯程序,看了一下你的情况,顺便查了一下这个仪表的通讯协议,试写如下代码:

Dim getData As String

Private Sub Command1_Click()
 MSComm1.PortOpen = True '打开串口,开始接收
 End Sub

Private 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 Sub

Private 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文本有没?因为没有实际的仪表调试,不敢说这些代码就能正常,给你参考一下吧:) --------------------编程问答-------------------- 噢,再提下,上面代码将MSComm1.PortOpen = True 与 Timer1.Enabled = True交换一下位置,更合理 --------------------编程问答-------------------- 根据需要,结合上面大家给的意见和代码就行了 --------------------编程问答--------------------
引用 22 楼 zhh0086 的回复:
很普遍的东西哦,我常常通过串口读取赛多利斯电子秤的数据!有现成的代码,很稳定的。


朋友你好,你的代码可以给我一份吗,先谢谢啦。我的邮箱
lezai525@21cn.com  --------------------编程问答--------------------
引用 24 楼 gguunnss 的回复:
噢,再提下,上面代码将MSComm1.PortOpen = True 与 Timer1.Enabled = True交换一下位置,更合理


谢谢兄弟啦,我回头测试一下,我还想问一下,你们现在做与称重仪表配接这一块是怎么配接的呢,是见一个仪表临时写给仪表的程序呢,还是做一个插件,我们平日见一个仪表,就把仪表的通讯协议加进去,随后朋友类似的仪表就不用麻烦啦呢? --------------------编程问答--------------------
引用 20 楼 itfamily 的回复:
我做过金钟衡器的电子称重,分析一下MSCOMM控件获取到的实时数据,再对照协议看看数据的含义,不难实现。

能给我一份吗?我的邮箱:mmwwdd163@126.com
补充:VB ,  控件
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,