VB下电子秤的RS232串口通信
我们老师要求我们写一个电子秤的RS232串口通信的程序,要求连接上之后,点击“开始”按钮,每隔1秒接收一个数据,存进一个txt文件里面,并在窗体上显示质量-时间坐标图。
我在CSDN上看了一些帖子,还是有一些问题不懂。
天平说明书(部分):
当天平和计算机相连时,建议用#命令来进行数据输出,当天平相应此命令后,将把其显示的所有数字或信息以字符串的形式传输给计算机。格式如下:
A B C D E F G H I J K L M
A 符号位
B-G 数字位,小数点也被传输,数字少于6位时用空格代替
H-I 空格位
J 单位位
K 稳定位
L 回车符
M 换行数
数据格式 1 起始位
8 数据位,包括数据校验位
1 停止位
PIN 2 天平数据发送线
3 天平数据接收线
5 地线
不使用握手信号
以下是参考CSDN上的帖子写出的代码:
Option Explicit
Dim strss As String
Dim massive as String
Private Sub Form_Load()
strss = ""
MSComm1.CommPort = 1 '串口号,
MSComm1.Settings = "2400,n,8,1 " '串口的属性,波特率可调
MSComm1.InputLen = 0 '设置Input一次从接收缓冲读取全部字节
MSComm1.InputMode = comInputModeText '数据以文字形式取回
MSComm1.RThreshold = 1 '设置缓冲区达到一个字符就产生OnComm事件
MSComm1.PortOpen = True
End Sub
Private Sub Command1_Click()
Timer1.Enabled = True
Timer1.Interval = 1000 '设置1秒产生一个timer事件
End Sub
Private Sub MSComm1_OnComm()
massive = ""
Select Case MSComm1.CommEvent
Case comEvReceive
massive = MSComm1.Input
strss =strss & MSComm1.Input
If Right(strss, 2) = vbCrLf Then
Label1.Caption = strss
Open App.Path & "\DATA.txt" For Append As #1
Print #1, massive
Close
End If
End Select
End Sub
Private Sub Command2_Click() '停止接收
If Timer.Enabled = True Then
Timer.Enabled = False
If MSComm1.PortOpen = True Then
MSComm1.PortOpen = False
End If
End Sub
Private Sub Timer1_Timer() '连续发送
Dim strSend As String
strSend = "#"
MSComm1.Output = strSend
End Sub
问题: 1、PIN要不要2、3互换?
2、缓冲区里面的数据怎么来的,是不是自动发送到缓冲区?或者是当timer发送了一个#,天平才把数据传到缓冲区?
3、“MSComm1.RThreshold = 1 '设置缓冲区达到一个字符就产生OnComm事件”,这里的“一个字符”是不是指上述的ABCDEFGHIJKLM整体?
4、“MSComm1.InputMode = comInputModeText '数据以文字形式取回”,那么“massive = MSComm1.Input”,massive的格式也应该是ABCDEFGHIJKLM?
[解决办法]
1、关于接线,可以参考天平秤的硬件说明书,通常情况下是2-3、3-2、5-5。但也不尽然。
2、输入缓冲区中的数据是天平秤上传而来的,PC发送:# 给天平秤,天平秤响应它,发送数据给PC的串口缓冲区,一前一后,顺序执行。
3、MSComm1.RThreshold = 1 是指串口缓冲区接收到一个字符,比如:A 就产生一次OnComm事件。
4、MSComm1.InputMode = comInputModeText 的意识是以文本形式接收通信内容。每次读入多少个字符,这个由MSComm1.InputLen决定,当MSComm1.InputLen=1时,每次读取一个字符,2时两个字符...一次类推,但如果是0,那么就是输入缓冲区中有多少个读多少个,一次性读完。
[解决办法]
一.电子秤,电子天平,表头...除了高端些的条码秤, 一律只会有发送,单工传输的,不接收, 因此你的Timer1发送毫无意义.
二.电子秤我还没碰过23角不需要对调的,除非是不正规的家庭式装配厂.
三.电子秤有连续发送或按键发送, 但不会有"定时"发送的, 发送的数据长度,一律都是固定的长度,重量位数不同,自动会补位, 所以你可以设MSComm1.RThreshold = 13, 每隔一秒去处理数据.
四.如果你要不停地开关 .txt 这不是一个明智的作法, 你可以在点击 "开始接收" 时 Open, 在点击 "停止接收" 时 Close, 建议你在接收中使用 ListBox, 结束接收时再一次性写入 .txt,
[解决办法]
我上面所说的
三.电子秤有连续发送或按键发送
一般你可以选择模式, 95%以上的电子秤都是默认连续发送,除了按键打印与传输.
双工通讯的如果在电子秤的单片机上面有加上通讯触发 开始发送,实际上也相当于SendKeys来触发发送按钮,这得看你买的天平价位来看它的功能了.
如果能用端口通讯触发 发送 则Timer1便有意义了.