Nachdem ich mein IPS von 2.1 auf 2.2 upgedated habe, läuft es nicht mehr so wie früher.
Nach längerer Suche wo das Problem liegt habe ich nun den Codeteil herausgefunden der nicht mehr richtig funktioniert. Leider ist es mir unerklärlich warum.
Dieser Code liest aus deinem XML File bestimmte Werte aus, fügt sie einer Variablen hinzu und schickt diese Daten an das COM Port. Seit dem Update bekomme ich aber nur noch Nullen über das Comport.
Vermutlich macht diese Zeile das Problem
$TempDaten .= chr(MonitorXMLAuslesen(1, $RealBlockNameArray[$i],0,0)) . chr($HighByte) . chr(MonitorXMLAuslesen(2, $RealBlockNameArray[$i],0,0));
Ich bekomme aber mit print die richtigen Werte zurück
print MonitorXMLAuslesen(1, $RealBlockNameArray[$i],0,0) . $HighByte . MonitorXMLAuslesen(2, $RealBlockNameArray[$i],0,0);
Gibts es mit der chr Umwandlung in der neuen Version ein Problem, oder sieht jemand woanders einen Fehler?
Die zwei Funktionen:
function Datenanfordern_START($ID,$BlockID)
{
//Variable Deklatation
global $ETA_MLP, $ETA_MLP_0, $ETA_MLP_1, $ETA_MLP_2, $ETA_MLP_3, $ETA_MLP_4, $ETA_MLP_5;
global $ID, $Intervall,$HighByte,$Anzahl;
$TempDaten = '';
$TempPS = 0;
$tempBlockName = "ETA_MLP_". $BlockID;
$Anzahl = count($$tempBlockName);
//Daten Bauen
$Daten ="{MC"; //Startzeichen und Servicekennung
$Daten .= chr(1+($Anzahl*3)); //Anzahl der Nutzdatenbytes ( RefreshTime + Anzahl * 3 byte)
$PS = $Intervall;
$RealBlockNameArray = $$tempBlockName;
for ($i=0; $i<$Anzahl; $i++)
{
$TempDaten .= chr(MonitorXMLAuslesen(1, $RealBlockNameArray[$i],0,0)) . chr($HighByte) . chr(MonitorXMLAuslesen(2, $RealBlockNameArray[$i],0,0));
//Pruefsumme
$TempPS = $TempPS + MonitorXMLAuslesen(1, $RealBlockNameArray[$i],0,0) + MonitorXMLAuslesen(2, $RealBlockNameArray[$i],0,0);
}
$PS = $PS + $TempPS;
$PS = $PS%256; //Modulo 256
$Daten .= chr($PS);
$Daten .= chr($Intervall);
$Daten .= $TempDaten;
$Daten .= "}";
ComPort_SendText($ID, $Daten);
}
//Auslesen des MonitorXML Files
function MonitorXMLAuslesen($SuchType, $ID, $Knoten, $LByte)
{
//SuchType
// 1 = ID->Knoten
// 2 = ID->Index(LByte)
// 3 = Knoten und Index->Teiler
// 4 = Knoten und Index->ID
// 5 = Knoten und Index->Name
// 6 = ID->Name
$xml = simplexml_load_file('Monitorliste.xml');
if ($SuchType == 1) {
foreach ($xml->xpath('MonitorRow') as $Row) {
If ($Row->ID == $ID) {
return $Row->Knoten;
}
}
} else if ($SuchType == 2) {
foreach ($xml->xpath('MonitorRow') as $Row) {
If ($Row->ID == $ID) {
return $Row->LByte;
}
}
} else if ($SuchType == 3) {
foreach ($xml->xpath('MonitorRow') as $Row) {
If ($Row->Knoten == $Knoten and $Row->LByte == $LByte) {
return $Row->Teiler;
}
}
} else if ($SuchType == 4) {
foreach ($xml->xpath('MonitorRow') as $Row) {
If ($Row->Knoten == $Knoten and $Row->LByte == $LByte) {
return $Row->ID;
}
}
} else if ($SuchType == 5) {
foreach ($xml->xpath('MonitorRow') as $Row) {
If ($Row->Knoten == $Knoten and $Row->LByte == $LByte) {
return $Row->Name;
}
}
} else if ($SuchType == 6) {
foreach ($xml->xpath('MonitorRow') as $Row) {
If ($Row->ID == $ID) {
return $Row->Name;
}
}
}
}
Daten über die COM vor dem Update auf 2.2:
Request: 05.04.2010 12:01:19.99164 (+0.8594 seconds)
7B 4D 45 00 00 7D 7B 4D 43 0A 51 C8 21 00 03 21 {ME..}{MC.QÈ!..!
00 04 21 00 1F 7D ..!..}
Answer: 05.04.2010 12:02:19.86664 (+0.0313 seconds)
7B 4D 44 0F 18 21 00 03 00 CB 21 00 04 00 E4 21 {MD..!...Ë!...ä!
00 1F 00 E0 7D ...à}
Daten über die COM nach dem Update auf 2.2 (gleicher Code):
Request: 05.04.2010 11:53:40.58264
7B 4D 43 0A 51 C8 00 00 00 00 00 00 00 00 00 7D {MC.QÈ.........}
Answer: 05.04.2010 11:53:43.67564 (+3.0938 seconds)
7B 53 45 17 47 53 79 73 74 65 6D 20 45 72 72 6F {SE.GSystem Erro
72 20 4E 72 2E 3A 30 78 38 46 20 0A 7D 7B 4D 44 r Nr.:0x8F .}{MD
05 00 00 00 00 00 00 7D .......}