如何实现串口数据采集,如何分析这些数据

如何实现串口数据采集,如何分析这些数据,第1张

MSCOMM控件在VB6的企业版中有,需通过部件添加方式加载。

Private Sub MSComm_OnComm()

Dim bytInput() As Byte

Dim intInputLen As Integer

Select Case frmMainctrMSCommCommEvent

Case comEvReceive

If blnReceiveFlag Then

If Not frmMainctrMSCommPortOpen Then

frmMainctrMSCommCommPort = intPort

frmMainctrMSCommSettings = strSet

frmMainctrMSCommPortOpen = True

End If

'此处添加处理接收的代码

frmMainctrMSCommInputMode = comInputModeText '按ASCII接收

intInputLen = frmMainctrMSCommInBufferCount

ReDim bytInput(intInputLen)

bytInput = frmMainctrMSCommInput

Text1 = bytInput

Text2 = Text1

jscd = Len(Text1)

If Left(Text1, 1) <> Chr(27) Or jscd > 25 Then '

frmMainLabel3BackColor = vbRed

frmMainLabel3ForeColor = vbWhite

frmMainLabel3Caption = "接收信号出错!"

ElseIf Left(Text2, 1) = Chr(27) And Mid(Text2, 25, 1) = Chr(13) Then

frmMainLabel3BackColor = vbGreen

frmMainLabel3ForeColor = vbBlack

frmMainLabel3Caption = "接收信号正常!"

If Left(Text2, 6) = Chr(27) & "R0032" And jscd = 25 Then

If Val(fa2) >= 0 And Len(fa2) = 4 Then

fa2 = "0" & Mid(fa2, 2, 3)

End If

frmMaintxtSend = Chr(27) & fa0 & fa1 & "9999" & zhenkong & fa2 & fa3 & fa4 & Chr(13)

lenTxtSend = Len(txtSend)

frmJishiLabel8Caption = txtSend

frmJishiLabel11Caption = lenTxtSend

If lenTxtSend = 24 Then

Call commFasong

Else

frmMainLabel3BackColor = vbRed

frmMainLabel3ForeColor = vbWhite

frmMainLabel3Caption = "发送信号出错!"

End If

blL1 = Mid$(Text2, 19, 2)

If blL1 = "01" Then

record_jmm(0) = Val(Mid$(Text2, 21, 4)) / 10 '制品1温度

ElseIf blL1 = "02" Then

record_jmm(1) = Val(Mid$(Text2, 21, 4)) / 10 '制品2温度

ElseIf blL1 = "03" Then

record_jmm(2) = Val(Mid$(Text2, 21, 4)) / 10 '制品3温度

ElseIf blL1 = "04" Then

record_jmm(3) = Val(Mid$(Text2, 21, 4)) / 10 '制品4温度

ElseIf blL1 = "05" Then

record_jmm(4) = Val(Mid$(Text2, 21, 4)) / 10 '制品5温度

ElseIf blL1 = "06" Then

record_jmm(5) = Val(Mid$(Text2, 21, 4)) / 10 '制品6温度

End If

record_jm(0) = Val(record_jmm(0))

record_jm(1) = Val(record_jmm(1))

record_jm(2) = Val(record_jmm(2))

record_jm(3) = Val(record_jmm(3))

record_jm(4) = Val(record_jmm(4))

record_jm(5) = Val(record_jmm(5))

blL = Mid$(Text2, 7, 6)

Call Hex_bin '输出口状态鉴别

blLg = Mid$(Text2, 13, 6)

Call hex_bin1 '输出口故障状态鉴别

txtSend = ""

Else

txtSend = ""

End If

End If

If Not blnAutoSendFlag And Not blnReceiveFlag Then

frmMainctrMSCommPortOpen = False

End If

End If

End Select

End Sub

以上是一段MSCOMM的ONCOMM事件代码,接收的数据按上下位机约定取出赋值于全局变量,在其它窗体进行数据记录(写入数据库)至于数据分析确如一楼说的可以海阔天空,通过数据控件及SQL语句来完成任务

以下提供MSDN参考:

OnComm 常数

常数 值 描述

comEvSend 1 发送事件。

comEvReceive 2 接收事件。

comEvCTS 3 clear-to-send 线变化。

comEvDSR 4 data-set ready 线变化。

comEvCD 5 carrier detect 线变化。

comEvRing 6 振铃检测。

comEvEOF 7 文件结束。

MSComm 控件提供下列两种处理通讯的方式:

事件驱动通讯是处理串行端口交互作用的一种非常有效的方法。在许多情况下,在事件发生时需要得到通知,例如,在 Carrier Detect (CD) 或 Request To Send (RTS) 线上一个字符到达或一个变化发生时。在这些情况下,可以利用 MSComm 控件的 OnComm 事件捕获并处理这些通讯事件。OnComm 事件还可以检查和处理通讯错误。所有通讯事件和通讯错误的列表,参阅 CommEvent 属性。

在程序的每个关键功能之后,可以通过检查 CommEvent 属性的值来查询事件和错误。如果应用程序较小,并且是自保持的,这种方法可能是更可取的。例如,如果写一个简单的电话拨号程序,则没有必要对每接收一个字符都产生事件,因为唯一等待接收的字符是调制解调器的“确定”响应。

SThreshold 属性

在 MSComm 控件设置 CommEvent 属性为 comEvSend 并产生 OnComm 事件之前,设置并返回传输缓冲区中允许的最小字符数。

说明

若设置 Sthreshold 属性为 0(缺省值),数据传输事件不会产生 OnComm 事件。若设置 Sthreshold 属性为 1,当传输缓冲区完全空时,MSComm 控件产生 OnComm 事件。

如果在传输缓冲区中的字符数小于 value,CommEvent 属性设置为 comEvSend,并产生 OnComm 事件。comEvSend 事件仅当字符数与 Sthreshold 交叉时被激活一次。例如,如果 Sthreshold 等于 5,仅当在输出队列中字符数从 5 降到 4 时,comEvSend 才发生。如果在输出队列中从没有比 Sthreshold 多的字符,comEvSend 事件将绝不会发生。

CommEvent 属性包含实际错误或产生 OnComm 事件的数码。注意,设置 Rthreshold 或 Sthreshold 属性为 0,分别使捕获 comEvReceive 和 comEvSend 事件无效。

web页面上获取客户端的串口数据的方法:

可以写一个串口代理程序,读取本地串口,将获取到的数据存入数据库。web通过ajax+定时器获取数据库中的数据显示就好了。

如果要交互,可以搞一个让上面提到的串口程序开一个socket将串口通信获取的数据,通过socket发出去,web页面可以用websocket。

下面一个通过flash *** 作ardiuno的demo用的是类似于第二种交互的方法。只不过用的是ActionScript原理是一样的。

串行接口是一种可以将接收来自CPU的并行数据字符转换为连续的串行数据流发送出去,同时可将接收的串行数据流转换为并行的数据字符供给CPU的器件。一般完成这种功能的电路,我们称为串行接口电路。

串口通信(Serial Communications)的概念非常简单,串口按位(bit)发送和接收字节的通信方式。

注意事项:

户端的系统数据如果能随便被web页面读取,那大家也不敢随便打开网页了,至于说用IE的ActiveX 控件,这个也没有前途,IE默认不开启,现在有IE的也没什么人,当然如果是用于特定客户的话可以了,反正你想干嘛就干嘛。

这是两个步骤的内容。首先是通讯,将串口接收的数据(十六进制数或ASCII码),按照通讯规约进行解析,解析输出所需的数据;然后是数据存储,这个过程就是一个数据入库过程,与是否串口接收没有大的关系,编写连接数据库代码,写入数据库即可;最后,由于串口接收数据是实时通讯,而数据的解析和写库需要时间,程序的时序应安排好,防止数据解析和写库时间过长造成数据丢失。

看对你有没有帮助:

接收方法:

float nSettp= getSetTP(); //从串口取缓冲数据(自己写)

float nCurtp= getCurTP(); //从串口取缓冲数据(自己写)

1 再建立数据库联接实例:

2 string intsql=StringFormat( "insert into log(SETTP,CURTP) values({0},{1})" ,nSettptostring(),nCurtptostring());

3 执行 查询 调用 execute(sql)

有返回即可

以上就是关于如何实现串口数据采集,如何分析这些数据全部的内容,包括:如何实现串口数据采集,如何分析这些数据、如何在web页面上获取客户端的串口数据、怎样将串口接收到的数据存到数据库中等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/sjk/10186622.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-06
下一篇 2023-05-06

发表评论

登录后才能评论

评论列表(0条)

保存