首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > VB >

VB下电子秤的RS232串口通讯

2013-06-25 
VB下电子秤的RS232串口通信我们老师要求我们写一个电子秤的RS232串口通信的程序,要求连接上之后,点击“开始

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便有意义了.

热点排行