Hallo,
an meiner Einrichtung sollen die Messwerte unter anderem über einen Ringspeicher aufgenommen werden.
Nun möchte ich als Abbruchkriterium einen Toleranzbereich für die Messwerte definieren. Läuft ein Messwert aus seinem Toleranzbereich, soll der Ringspeicher stoppen.
Gibt es eine Möglichkeit einen solchen Toleranzbereich im Programm selbst zu definieren?
Vielen Dank.
Gruß Moritz
Messwert-Toleranzbereich für Ring-Puffer
-
- Posts: 10
- Joined: Mon 11. Nov 2013, 16:12
- PEAK-Support
- Sales & Support
- Posts: 1646
- Joined: Fri 10. Sep 2010, 19:34
Re: Messwert-Toleranzbereich für Ring-Puffer
Sie können das ganze in einem Macro implementieren. Eigentlich sollte das kein Problem sein wenn Sie mit reinen Signalen arbeiten. Sie lesen den Signalwert und überprüfen dann die einzuhaltenden Grenzen.
Hier mal ein simples Bsp. welches die Grenzen zweier Signal während der Laufzeit überprüft.
die zugehörige Symboldatei sieht so aus:
Gerne senden wir Ihnen auch das komplette Projekt für den PE5 direkt zu. Dafür schreiben Sie bitte eine kurze E-Mail an support[at]peak-system.com und geben uns Ihre Seriennummer der PE5 Version an (bitte diese hier NICHT posten!)
Hier mal ein simples Bsp. welches die Grenzen zweier Signal während der Laufzeit überprüft.
Code: Select all
'------------------------------------------------
' FILE DESCRIPTION: Macros for CAN logging
' (c) 2013 PEAK-System Technik GmbH
' very simple logger Demo for SIgnal values in customer
' Text format
'------------------------------------------------
Sub RunForever()
' Benötige Variablen erzeugen
Dim sig1
Dim sig2
Dim speed
Dim position
Dim old_speed
Dim old_position
Dim logtext
' Die Datenreferenzen holen
Set sig1 = Signals("SpeedVar")
Set sig2 = Signals("PositionVar")
Dim fso, tf
' Datei erzeugen !!ACHTUNG die vorhandene wird gelöscht !!
Set fso = CreateObject("Scripting.FileSystemObject")
Set tf = fso.CreateTextFile("c:\Trace\CAN-LOG.txt", true)
' Zeile mit Zeilenumbruchzeichen schreiben.
tf.WriteLine("Logfile for CAN")
' Drei Zeilenumbruchzeichen in die Datei schreiben.
tf.WriteBlankLines(1)
tf.Close
position = sig2.Value
speed = sig1.Value
old_speed = speed
old_tion = position
' solange bis Macro gestoppt wird !!
do
' Value changed ?
if position <> old_position Then
' Grenzen abfragen
if position>5000 Then
PrintToOutputWindow("Position out of range !")
PrintToOutputWindow(position)
PrintToOutputWindow(" ")
'Logdatei schreiben
logtext = "Position:" & position
WriteLogEntry(logtext)
old_position = position
end if
end if
' Value changed ?
if speed <> old_speed Then
' Grenzen abfragen
if speed > 3000 Then
PrintToOutputWindow("Speedout of range !")
PrintToOutputWindow(speed)
PrintToOutputWindow(" ")
'Logdatei schreiben
logtext = "Speed:" & speed
WriteLogEntry(logtext)
old_speed = speed
end if
end if
' aktuelle Werte holen
position = sig2.Value
speed = sig1.Value
Wait(10) ' Time for other tasks on the system
Loop While 1=1
End Sub
Sub WriteLogEntry(text)
Dim fso, tf
Dim HourString
Dim MinuteString
Dim SecondString
Dim datetext
HourString = Hour(Now)
MinuteString = Minute(Now)
SecondString = Second(Now)
datetext = HourString & ":" & MinuteString & ":" & SecondString & " " & text
Set fso = CreateObject("Scripting.FileSystemObject")
Set tf = fso.OpenTextFile("c:\Trace\CAN-LOG.txt", 8, false)
' Zeile mit Zeilenumbruchzeichen schreiben.
tf.WriteLine(datetext)
tf.Close
End Sub
Code: Select all
FormatVersion=3.1 // Do not edit!
MuxChar=*
DecimalSeparator=.
UniqueVariables=True
{SENDRECEIVE}
[PositionID]
ID=1D5h
Picture=aaaaaaaa aaaaaaaa aaaaaaaa aaaaaaaa
a=PositionVar unsigned /u:mm // Variable in Intel format
[SpeedID]
ID=2D5h
Picture=aaaaaaaa aaaaaaaa aaaaaaaa aaaaaaaa
a=SpeedVar unsigned /u:mm/sec. // Intel Format
--------------------------------
PEAK-System Technik
Technical Support Team
support[at]peak-system.com
-------------------------------
PEAK-System Technik
Technical Support Team
support[at]peak-system.com
-------------------------------