Option Explicit
Public conn As New ADODB.Connection
Public rs As New ADODB.Recordset
Dim db$, Appdisk$, RcvData$
Private Sub Form_Load()
'********** 打开数据库
Appdisk = IIf(Right(App.Path, 1) = "\", App.Path, App.Path & "\")
db = "Provider=Microsoft.Jet.OLEDB.4.0;Persist Security Info=False;Data Source=" & Appdisk & "Alarm.mdb"
conn.CursorLocation = adUseClient
conn.Open db '打开数据库连接
rs.Open "Voltage", conn, adOpenKeyset, adLockPessimistic
If rs.recordcount > 0 Then rs.MoveFirst
'********************* 串口初始化
With MSComm1
.CommPort = 1
.Settings = "9600,n,8,1"
.InputLen = 0
.InBufferSize = 1
.RThreshold = 20 '这里是假设你的每一笔数据长度为20个字元
.InputMode = comInputModeText '文本方式接收,一般监控器与电子秤大都是以文本,模式发送的
End With
Command1.Caption = "开始接收"
Me.Move (Screen.Width - Me.Width) \ 2, (Screen.Height - Me.Height) \ 2
Me.Caption = "警报监控系统"
Command1_Click '开始运行监测端口
End Sub
Private Sub Form_Unload(Cancel As Integer)
If MSComm1.PortOpen Then MSComm1.PortOpen = False
rs.Close
conn.Close
Set rs = Nothing
Set conn = Nothing
End
End Sub
Private Sub Command1_Click()
If Command1.Caption = "开始接收" Then
List1.Clear
If Not MSComm1.PortOpen Then MSComm1.PortOpen = True '打开串口
MSComm1.InBufferCount = 0
MSComm1.DTREnable = True
Else
If MSComm1.PortOpen Then MSComm1.PortOpen = False
MSComm1.DTREnable = False
End If
Command1.Caption = IIf(Command1.Caption = "开始接收", "停 止", "开始接收")
End Sub
Private Static Sub MSComm1_OnComm() '等侯串口信号进来
Select Case MSComm1.CommEvent
Case comEvReceive '接收缓冲区收到Rthreshold 个字符时触发
RcvData = MSComm1.Input
List1.AddItem RcvData '这个List1只是让你看随时接收到的东西,没啥用处
If Left(RcvData, 1) = Chr(2) Then '这里是假设接收数据的启始符STX是 chr(2)多一个判断较保险
rs.addnew
rs.fields(0) = Mid(RcvData, 2, 7) '添加字段1
rs.fields(1) = Mid(RcvData, 9, 7) '添加字段2
rs.fields(2) = Mid(RcvData, 16, 4) '添加字段3
rs.Update
End If
End Select
End Sub