나는 직렬 포트를 통해 데이터를 1 초에 3 번 출력하는 센서 (실제로 Quartzonix 압력 변환기)를 가지고 있습니다. 샘플의 x- 양을 기준으로 평균 읽기를 제공하는 코드를 설정하고 싶습니다.롤링 평균, vb.net
출력은 다음과 같이 보입니다 :
01+ 1.502347091823e01
01+ 1.501987234092e01
01+ 1.50234524524e01
01+ 1.502123412341e01
01+ 1.502236234523e01
01+ 1.50198345e01
01+ 1.502346234523e01
.. 및 COM 포트를 닫을 때까지 영원히 계속됩니다 또는 변환기는 다른 명령을 가져옵니다.
은 "$ 01MC"Private Sub btnStart_Click(sender As Object, e As EventArgs) Handles btnStart.Click
Dim a As String
a = "$01MC" & Chr(13)
MyComPort.WriteLine(a)
Do
Dim Incoming As String = MyComPort.ReadLine()
Dim incomingtext As String = Incoming.Remove(0, 3)
If Incoming Is Nothing Then
Exit Do
Else
txtRawData.Text = Incoming
boxPSIA.Text = Format(Val(incomingtext), "##0.000")
End If
Application.DoEvents()
Loop
End Sub
이 변환기가 밖으로 뱉어 시작하는 데 필요한 명령입니다
이
내가 지금까지 가지고 있고, 코드 변환기가 실제로 출력되는 걸 보여주기 위해 작동하는 무슨 코드 데이터. 시작 버튼을 클릭 할 때 몇 가지 이상한 시간 초과 현상이 발생하지만, 다른 프로그램 (어쩌면 .readtimeout 조정이 필요하고, 확실하지 않은 경우)입니다.나는 평균값으로 읽어야하는 값을 입력하기 위해 텍스트 상자 txtReadingsToAvg가 있습니다. 실제로 평균을 계산하는 방법에 대해 머리를 감싸는 것이 아닙니다. (예를 들어, 버튼을 클릭 한 다음 침을 뱉어 요. 메시지 상자에 넣거나 다른 텍스트 상자에 넣기).
n 개의 판독 값에 대해 대기열 또는 시프트 레지스터 n 요소는 어떻습니까? 새로운 독서가 생길 때마다 대기열에 넣고 가장 오래된 독서가 떨어져 나가십시오. 그런 다음 대기열을 평균화합니다. – peterG
프로그램 시작 후 평균값을 원하십니까? 아니면 센서가 기록을 시작한 후 평균값을 원하십니까? –
아니면 지난 n 초/m 샘플의 평균? – djv