串口程序代码如何写?
想把电子称和电脑连接起来,电脑每隔几个毫秒记录数据,数据要求是十进制,并保存在TXT文本中,期望能绘出质量-时间曲线。现在已经连接好了,但是我没有学过VB,自己找了好多例子研究了好久,还是有很多问题不懂,按例子改写后实验,还是不行,可能我对这个串口通信不理解,改写后也总是有问题。下边是我的电子称说明书,不知有没有VB高手根据我的实际情况帮我编写符合要求能在电脑上保存数据的代码,非常感谢!
一、利用立即打印符来接收数据
当天平与计算机相连时,建议使用立即打印符“#”进行数据输出,当响应此命令后,天平立即把其显示的所有数字或者信息以字符串的形式输出出来。
其输出格式如下:
+/- 1 2 3 4 5 6. C0 C1 C2 C3 CR LF
前六个数字区,数字前通常还有符号(+或-),小数点也被传输。数字少于六位时由空格来补充(如有其它信息传输,则位于数字区)
注:小数点的位置取决于天平显示的分辨率及单位,第一个数字紧接在符号之后。
C0:空格
C1:如果天平被设置为“自动”响应模式,它亦为一个空格。
如果天平响应模式为“快速”,C1=F
如果天平响应模式为“慢速”,C1=S
C2: 表示所传输的数字的单位,如称重单位为克,则传送g
C3:代表稳定性,其功能与天平显示的“OK”功能相同,空格表示所传数字不稳定,“S”表示所传数字稳定。立即打印输出时,C3后边还跟有一个回车和一个换行符,如果天平已设置了其它换行数,它们和回车符一起传送。
二、RS232接口硬件
虽然BL系列电子天平可与任何具有RS232接口的设备相连,但其接口并未采用RS232的所有通讯协议,它仅使用了标准接口的数据传输和接收线,但在许多应用中一般不会带来任何接口问题。
数据格式:
1 起始位
8 数据位(包括校验)
1 停止位
注:BL天平将以选定的检验形式传输数据,但它并不对收到的校验进行检验,请用RS232电缆将BL天平与外部设备相连或者按下面的说明来连线。
1 2 3 4 5 PIN 功能
o o o o o 2 TXD-天平数据发送线
o o o o 3 RXD-天平数据接收线
6 7 8 9 5 GND-地
此外,对于需要握手信号的计算机,为了能与BL系列天平进行通信,应将计算机RS232接口上的DTR、DSR和CTS与RTS分别短接在一起。
建议使用电缆长度不超过15m,如电缆电容《2,500PF,电缆还可适当长一些。所接负载的阻抗应介于。。。
[最优解释]
Option Explicit
Dim strss As String
Private Sub Command1_Click() '发送
Dim strSend As String
strSend = "#"
MSComm1.Output = strSend
End Sub
Private Sub Form_Load()
MSComm1.CommPort = 1 '串口号,
MSComm1.Settings = "2400,n,8,1 " '串口的属性
MSComm1.InputLen = 0
MSComm1.InputMode = comInputModeText
MSComm1.RThreshold = 1
MSComm1.PortOpen = True
Timer1.Interval = 100
Timer1.Enabled = True
End Sub
Private Sub MSComm1_OnComm()
Select Case MSComm1.CommEvent
Case comEvReceive
strss = strss & MSComm1.Input
If Right(strss, 2) = vbCrLf Then
Label1.Caption = strss
Open App.Path & "\DATA.txt" For Append As #1
Print #1, strss
Close
strss = ""
End If
End Select
End Sub
Private Sub Command2_Click() '停止接收
If MSComm1.PortOpen = True Then
MSComm1.PortOpen = False
End If
End Sub
Private Sub Timer1_Timer()
Command1_Click
End Sub
Option Explicit
Dim strss As String
Private Sub Form_Load()
MSComm1.CommPort = 1 '串口号,
MSComm1.Settings = "2400,n,8,1 " '串口的属性
MSComm1.InputLen = 0
MSComm1.InputMode = comInputModeText
MSComm1.RThreshold = 1
MSComm1.PortOpen = True
Timer1.Interval = 100
Timer1.Enabled = True
End Sub
Private Sub MSComm1_OnComm()
Select Case MSComm1.CommEvent
Case comEvReceive
strss = strss & MSComm1.Input
If Right(strss, 2) = vbCrLf Then
Label1.Caption = strss
Open App.Path & "\DATA.txt" For Append As #1
Print #1, strss
Close
strss = ""
End If
End Select
End Sub
Private Sub Command2_Click() '停止接收
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
Option Explicit
Dim strss As String
Private Sub Form_Load()
MSComm1.CommPort = 1 '串口号,
MSComm1.Settings = "2400,n,8,1 " '串口的属性
MSComm1.InputLen = 0
MSComm1.InputMode = comInputModeText
MSComm1.RThreshold = 1
MSComm1.PortOpen = True
Timer1.Interval = 100
Timer1.Enabled = True
End Sub
Private Sub MSComm1_OnComm()
Select Case MSComm1.CommEvent
Case comEvReceive
strss = strss & MSComm1.Input
If Right(strss, 2) = vbCrLf Then
Label1.Caption = strss
Open App.Path & "\DATA.txt" For Append As #1
Print #1, strss
Close
strss = ""
End If
End Select
End Sub
Private Sub Timer1_Timer() '连续发送
Dim strSend As String
strSend = "#"
If MSComm1.PortOpen = True Then
MSComm1.Output = strSend
End If
End Sub
Private Sub Form_Load()
MSComm1.CommPort = port
MSComm1.Settings = setting
End Sub
Private Sub Command1_Click()
Dim lngP As long
Dim buff_out10() As Byte
ReDim buff_out10(8)
MSComm1.Settings = "9600,N,8,1" ' 9600 波特,无奇偶校验,8 位数据,一个停止位。
MSComm1.InputLen = 0
If MSComm1.PortOpen = False Then
MSComm1.PortOpen = True
End If
buff_out10(0) = &HAA
buff_out10(1) = &HAA
buff_out10(2) = &HFF
buff_out10(3) = &H6
buff_out10(4) = &H31
buff_out10(5) = &H0
buff_out10(6) = &H0
buff_out10(7) = &H0
buff_out10(8) = &HFF
MSComm1.Output = buff_out10
lngP = GetTickCount 'API函数
Do
DoEvents
Loop Until GetTickCount - lngP > 100 Or MSComm1.InBufferCount > 10 '当等待时间超过100毫秒或串口接受缓冲区的数据达到10个字节时退出等待循环,这就是一个通信等待的过程。
DoEvents
End Sub
Private Sub MSComm1_OnComm()
Select Case MSComm1.CommEvent
Case comEvReceive
strss = strss & MSComm1.Input
If Right(strss, 2) = vbCrLf Then
Label1.Caption = strss
Open "D:\DATA.txt" For Append As #1
Print #1, Mid(strss, 1, Len(strss) - 2) '去除回车换行
Close
strss = ""
End If
End Select
End Sub
Private Sub MSComm1_OnComm()
Select Case MSComm1.CommEvent
Case comEvReceive
strss = strss & MSComm1.Input
If Right(strss, 2) = vbCrLf Then
Label1.Caption = strss
Open "D:\DATA.txt" For Append As #1
Print #1, Mid(strss, 1, Len(strss) - 6) '去除回车换行
Close
strss = ""
End If
End Select
End Sub