Gegeben sind Daten über RS232.
Die Daten werden korrekt eingelesen über Comport-CutChar-RegisterVariable.
Daten sind Tempdaten und Alarmmeldungen von einem MC.
Auswertung erfolgt über ein Script, wobei die Tempdaten ohne Probleme eingelesen und auch ausgewertet werden. Im Gegensatz zu den Alarm werten.
Hier mal der Code zum einlesen.
<?
/*
*******************************
IP-SYMCON Event Scripting
*******************************
File : Daten_Temp_Alarm.ips.php
Trigger : OnUpdate Daten_Temp
Interval :
*/
//------------------------------------------------------------------------------
//Alle Daten werden im ASCII-Format empfangen. Tempwerte mit aktueller
//Temperatur, Alarmwerte mit aktuellem Zustand. 1 = geschlossen, 0 = offen.
//
//Die Datenübertragung erfolgt im Sekundentakt, wobei die Alarmkontakte
//Vorrang haben.
//Das heisst, je mehr Tempsensoren angeschlossen sind(max16)
//umsolänger dauert die Übertragung, sollte ein Alarmkontakt zwischen melden,
//verschiebt sich das ganze.(Alarm hat Vorrang) um 1 Sek.
//
//Jeder Temperaturwert ist ein eigenes Datenpaket Abschluss je wert (CR).
//Die Alarmeingänge A-D sind ein Datenpaket, wobei je Wert ein (CR) erfolgt.
//
//
//------------------------------------------------------------------------------
//Dateneingang von Registervariable
$Daten = GetValueString ("Daten_Temp");
//Einlesen der Daten in ein Array
//Temperaturdaten je Temperaturwert ein Datenpaket, z.B. 1: 22.9CR, 2: 23.9CR
$buffer_temperatur1 = array();
$buffer_temperatur2 = array();
$buffer_temperatur3 = array();
//Kennung nach Trennzeichen.
$separator_temperatur1 ="1: ";
$separator_temperatur2 ="2: ";
$separator_temperatur3 ="3: ";
//Alarmdaten, alle 4 Werte sind ein Datenpaket, z.B. A:1CR B:0CR
$buffer_Alarm1 = array();
$buffer_Alarm2 = array();
$buffer_Alarm3 = array();
$buffer_Alarm4 = array();
$separator_Alarm1 ="A:";
$separator_Alarm2 ="B:";
$separator_Alarm3 ="C:";
$separator_Alarm4 ="D:";
//Array nach Kennung aufteilen
$buffer_temperatur1 = explode ($separator_temperatur1, $Daten);
$buffer_temperatur2 = explode ($separator_temperatur2, $Daten);
$buffer_temperatur3 = explode ($separator_temperatur3, $Daten);
$buffer_Alarm1 = explode ($separator_Alarm1, $Daten);
$buffer_Alarm2 = explode ($separator_Alarm2, $Daten);
$buffer_Alarm3 = explode ($separator_Alarm3, $Daten);
$buffer_Alarm4 = explode ($separator_Alarm4, $Daten);
//Daten nach Trennung und Aufteilung zuordnen
$temperatur1 = $buffer_temperatur1[1];
$temperatur2 = $buffer_temperatur2[1];
$temperatur3 = $buffer_temperatur3[1];
$Alarm1 = $buffer_Alarm1[1];
$Alarm2 = $buffer_Alarm2[1];
$Alarm3 = $buffer_Alarm3[1];
$Alarm4 = $buffer_Alarm4[1];
//Daten zuteilen und umrechnen
$temperatur1 = (float) $temperatur1;
$temperatur2 = (float) $temperatur2;
$temperatur3 = (float) $temperatur3;
$Alarm1 = (integer) $Alarm1;
$Alarm2 = (integer) $Alarm2;
$Alarm3 = (integer) $Alarm3;
$Alarm4 = (integer) $Alarm4;
// Daten ausgeben
SetValueFloat ("T1", $temperatur1);
SetValueFloat ("T2", $temperatur2);
SetValueFloat ("T3", $temperatur3);
SetValueInteger ("A1", $Alarm1);
SetValueInteger ("A2", $Alarm2);
SetValueInteger ("A3", $Alarm3);
SetValueInteger ("A4", $Alarm4);
?>
und zum Verarbeiten
<?
/*
*******************************
IP-SYMCON Event Scripting
*******************************
File : Temperatur_1Wire.ips.php
Trigger : OnChange Temp....................
Interval :
*/
$T1 = GetValueFloat("T1");
$T2 = GetValueFloat("T2");
$A1 = GetValueInteger("A1");
SetValueInteger("Alarm1", $A1);
if($T1 == 0)
{
$T1 == $T1;
}
else
{
SetValueFloat("Temp1", $T1);
}
if($T2 == 0)
{
$T2 == $T2;
}
else
{
SetValueFloat("Temp2", $T2);
}
?>
Wo ist mein Fehler im Kopp