導航:首頁 > 凈水問答 > 怎麼過濾處理串口頻繁資料庫

怎麼過濾處理串口頻繁資料庫

發布時間:2020-12-18 08:28:41

1. 串口通信數據連續性,該怎麼處理

串口通信數據連續性 初學串口編程,使用VC6的MSComm控制項實現上位機串口通信,接收來自單片機發送來的30個字元,通信設置成了收到一個位元組觸發事件,發現上位機軟體雖然能夠接收到所有字元,但是顯示格式並連續(回車換行),而我的本意是接收到這30個字元後在後邊加入回車換行,但是現在是接收到字元後(<30),就觸發事件進入串口接收響應了,所以就在接收到的字元後加了回車換行。用串口調試工具就沒有這種現象。請給些修改建議! ------解決方案-------------------------------------------------------- 正常就是你這么做的,至於你說的串口助手自動"知道"你要通信30個字元並"自動"換行,這可能是湊巧了,你把串口助手窗口變小試試,看看是不是還是接收到30個字元自動換行,或者你改成單片機發5個數據或其它個數的數據試試,看看串口助手能不能知道你實際通信的個數 ------解決方案-------------------------------------------------------- 串口工具之所以接收到一定位元組數據後自動換行,是因為串口工具的文本模式下,將換行控制的接收字元,「自動」轉換為界面的控制符號,故有此效果。 所以在任何應用程序中,如果想達到同樣效果,需要了解你單片機串口通訊協議中數據主體模式, 提取並識別串口數據的「回車換行」符,並針對界面輸出的換行需要,編程實現這個功能。 串口是流概念,想要分行,必須在更上層的位置將流整理成數據。

2. 串口接收數據如何處理

通過串口收到一串16進制 02 2B 30 30 31 35 34 30 30 31 42 03

02代表開始 2B代表正數
30 30 31 35 34 30 代表儀表數據
30 31 42 暫不做處理
03 代表結束

我需要將收到的16進制 處理成如下顯示

textbox1.text= 內顯示「正常」
textbox2.text= 內 「正數」
textbox3.text= 內顯示001540
textbox4.text= 內顯示「結束」

3. 如何實現串口數據採集,如何分析這些數據

MSCOMM控制項在VB6的企業版中有,需通過部件添加方式載入。

Private Sub MSComm_OnComm()
Dim bytInput() As Byte
Dim intInputLen As Integer
Select Case frmMain.ctrMSComm.CommEvent
Case comEvReceive
If blnReceiveFlag Then
If Not frmMain.ctrMSComm.PortOpen Then
frmMain.ctrMSComm.CommPort = intPort
frmMain.ctrMSComm.Settings = strSet
frmMain.ctrMSComm.PortOpen = True
End If
'此處添加處理接收的代碼
frmMain.ctrMSComm.InputMode = comInputModeText '按ASCII接收
intInputLen = frmMain.ctrMSComm.InBufferCount
ReDim bytInput(intInputLen)
bytInput = frmMain.ctrMSComm.Input
Text1 = bytInput
Text2 = Text1
jscd = Len(Text1)
If Left(Text1, 1) <> Chr(27) Or jscd > 25 Then '
frmMain.Label3.BackColor = vbRed
frmMain.Label3.ForeColor = vbWhite
frmMain.Label3.Caption = "接收信號出錯!"
ElseIf Left(Text2, 1) = Chr(27) And Mid(Text2, 25, 1) = Chr(13) Then
frmMain.Label3.BackColor = vbGreen
frmMain.Label3.ForeColor = vbBlack
frmMain.Label3.Caption = "接收信號正常!"
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
frmMain.txtSend = Chr(27) & fa0 & fa1 & "9999" & zhenkong & fa2 & fa3 & fa4 & Chr(13)
lenTxtSend = Len(txtSend)
frmJishi.Label8.Caption = txtSend
frmJishi.Label11.Caption = lenTxtSend
If lenTxtSend = 24 Then
Call commFasong
Else
frmMain.Label3.BackColor = vbRed
frmMain.Label3.ForeColor = vbWhite
frmMain.Label3.Caption = "發送信號出錯!"
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
frmMain.ctrMSComm.PortOpen = 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 事件無效。

4. 如何處理串口超時問題

串口通訊超時(讀或寫)貌似C#只能設定值(知道)沒有聽說會返回標志或斷般下位機從站能會超時時有斷上位機般主站狀態所設定通訊超時時配合下位機使用並能用來直接返回超時標志水平有限知道多

5. 串口通信誤碼率高,什麼原因,如何解決

原因很多,最常見的是:干擾、接地不好或不對、以及雙方定時不一致(例如專晶振不準)等等。
你可以從屬以下幾方面試一試:
1、減小波特率
2、用屏蔽線傳輸信號(屏蔽層不要當地線用,要單點接地)
3、改用485/422
4、檢查地線連接,不要形成大的環路,強弱電分開等等

6. 關於c#的串口接收問題,怎麼接收多次數組進行統一處理

你問的應該是滑動平均濾波演算法的C#實現,C#中可以用版隊列權來實現
Queue<int> queue = new Queue<int>();
if (queue.Count > 10)
{
queue.Dequeue();
queue.Enqueue(data);
}

7. 怎樣將串口接收到的數據存到資料庫中

這是兩個來步驟的內容。首先源是通訊,將串口接收的數據(十六進制數或ASCII碼),按照通訊規約進行解析,解析輸出所需的數據;然後是數據存儲,這個過程就是一個數據入庫過程,與是否串口接收沒有大的關系,編寫連接資料庫代碼,寫入資料庫即可;最後,由於串口接收數據是實時通訊,而數據的解析和寫庫需要時間,程序的時序應安排好,防止數據解析和寫庫時間過長造成數據丟失。

8. 如何實現串口數據採集,處理,邏輯控制

一樓已經給復出了正確制的思路.再提點建議:
你的下位機不僅僅是一個控制儀表,還應包含能組織和分解指令的PLC或單片機,應該符合RS485標准.LZ可以參考"人民郵電出版社"出版的"VISUAL BASIC 串口通信工程開發實例導航"一書.

9. 232串口通信怎麼處理連續數據

你好!

232串口數據接收,都是按照幀來接收的,幀的大小,還要看緩沖區的設置;
你要處理接收到的數據,也就是對每一幀的接收和處理

10. 串口通訊中如何處理接收到重復的數據

dim varResult,T_varResult as string
Private Sub MSComm1_OnComm()
Select Case MSComm1.CommEvent '判斷通信事件
Case comEvReceive: '收到Rthreshold個位元組產生的接收事件
varResult = ""
varResult = MSComm1.Input
if varResult<>T_varResult then
txtResponse.Text=varResult
T_varResult =varResult
end if
MSComm1.InBufferCount = 0
End Select

End Sub

閱讀全文

與怎麼過濾處理串口頻繁資料庫相關的資料

熱點內容
鹽浴後清洗廢水 瀏覽:73
水處理反滲透膜廠家 瀏覽:727
超濾納濾反滲透的異同 瀏覽:229
如何提升廣電伺服器 瀏覽:960
陽離子交換柱的處理方法 瀏覽:669
純凈水超市在哪裡有賣 瀏覽:548
嬰兒水壺可以用白醋除垢嗎 瀏覽:628
檸檬酸除垢需要浸泡一下嘛 瀏覽:753
人工濕地污水怎麼清洗 瀏覽:634
浩澤空氣凈化器怎麼維修 瀏覽:556
大連金州老城區污水一體化改造 瀏覽:187
43樹脂車模 瀏覽:550
移動貓的mac過濾的源 瀏覽:335
反滲透ro膜怎樣安裝視頻 瀏覽:837
沁園凈水機廢水桶滿了不停止制水 瀏覽:63
空氣凈化器萬向輪多少錢 瀏覽:459
冷水壺如何去水垢 瀏覽:773
小米凈化器的價格多少錢一台 瀏覽:220
沒有飲水機怎麼把桶裝水抽出 瀏覽:755
衛萊仕凈水器品牌有限公司在哪裡 瀏覽:425