Ports des IPIO88 per Script schalten (C#)
18.07.2012, 11:22
Hi!
Wie auch im FAQ zu lesen, gibt es Probleme das IPIO88 via Script über Telnet zu steuern, was ich auch erst selber erfahren musste, bevor ich das FAQ las.
Abhilfe kann die Steuerung über den HTML Quellcode des Boards leisten.
Ich kann jeden In/Out Port auslesen und die Ausgange setzen.
Dazu geht man folgendermaßen vor:
Im Quelltext des HTML Dokument gibt es z.B. die Zeile:
Input auslesen:
<input name="in1" size="1" disabled="disabled" type="checkbox"> </td>
Dies ist der Input 1, welcher momentan auf "0" liegt (checkbox = unchecked).
Wenn dieser Input aktiv ist, sieht der Quellcode folgendermaßen aus:
<input name="in1" checked="checked" size="1" disabled="disabled" type="checkbox"> </td>
Man kann sehen, dass der Eintrag checked="checked" hinzu kommt.
So ist man in der Lage alle Inputs des IPIO88 auszulesen und weiter zu verarbeiten.
Output setzen:
Den Output zu setzen ist noch einfacher. Einfach in der URL die zu setzenden Ausgänge angeben (zur Prüfung kann dann wieder der Quellcode ausgelesen werden ob der Port auch gesetzt wurde).
Beispiel:
http://IPAdresse o. Name/ipio.cgi?pg=main&out1=on&out2=on&out3=on&out4=on&out5=on&out6=on&out7=on&out8=on&end=main
=> Es werden alle Ausgänge auf "High" gesetzt.
Beispiel2:
http://IPAdresse o. Name/ipio.cgi?pg=main&out1=on&out2=on&out3=on&out5=on&out6=on&out7=on&out8=on&end=main
=> Alle bis auf Ausgang 4 werden gesetzt.
Das ganze kann z.B. in C# mit "Regex.Match" aus dem Quelltext ausgelesen/gefunden werden.
Dazu erstellt man im Projekt ein "Webbrowser" und liest nach dem aufbau der Seite den Quelltext aus und sucht mit "Regex.Match" nach den Inputs bzw. Outputs.
Code Snippet zu auslesen des Ausgangs:
foreach (string item in lines)
{
Match match = Regex.Match(item, @".*checked.*name=out(\d).*", RegexOptions.IgnoreCase);
if (match.Success)
{
string ID = match.Groups.Value;
a_ID_Output.Add(ID);
}
}
=> Es werden alle gesetzten Ausgänge in das Array a_ID_Output geschrieben.
Code Snippet zu auslesen der Eingänge:
foreach (string item in lines)
{
Match match = Regex.Match(item, @".*checked.*name=in(\d).*", RegexOptions.IgnoreCase);
if (match.Success)
{
string ID = match.Groups.Value;
a_ID_Input.Add(ID);
}
}
=> Es werden alle gesetzten Eingänge in das Array a_ID_Input geschrieben.
Mit diesen Tricks lässt sich wunderbar und ohne Fehler die einzelnen Ports auslesen und setzen.
Ich hoff die Info ist hilfreich und wird von ELV ins FAQ von IPIO88 kopiert.
Gruß
Thomas D.
Wie auch im FAQ zu lesen, gibt es Probleme das IPIO88 via Script über Telnet zu steuern, was ich auch erst selber erfahren musste, bevor ich das FAQ las.
Abhilfe kann die Steuerung über den HTML Quellcode des Boards leisten.
Ich kann jeden In/Out Port auslesen und die Ausgange setzen.
Dazu geht man folgendermaßen vor:
Im Quelltext des HTML Dokument gibt es z.B. die Zeile:
Input auslesen:
<input name="in1" size="1" disabled="disabled" type="checkbox"> </td>
Dies ist der Input 1, welcher momentan auf "0" liegt (checkbox = unchecked).
Wenn dieser Input aktiv ist, sieht der Quellcode folgendermaßen aus:
<input name="in1" checked="checked" size="1" disabled="disabled" type="checkbox"> </td>
Man kann sehen, dass der Eintrag checked="checked" hinzu kommt.
So ist man in der Lage alle Inputs des IPIO88 auszulesen und weiter zu verarbeiten.
Output setzen:
Den Output zu setzen ist noch einfacher. Einfach in der URL die zu setzenden Ausgänge angeben (zur Prüfung kann dann wieder der Quellcode ausgelesen werden ob der Port auch gesetzt wurde).
Beispiel:
http://IPAdresse o. Name/ipio.cgi?pg=main&out1=on&out2=on&out3=on&out4=on&out5=on&out6=on&out7=on&out8=on&end=main
=> Es werden alle Ausgänge auf "High" gesetzt.
Beispiel2:
http://IPAdresse o. Name/ipio.cgi?pg=main&out1=on&out2=on&out3=on&out5=on&out6=on&out7=on&out8=on&end=main
=> Alle bis auf Ausgang 4 werden gesetzt.
Das ganze kann z.B. in C# mit "Regex.Match" aus dem Quelltext ausgelesen/gefunden werden.
Dazu erstellt man im Projekt ein "Webbrowser" und liest nach dem aufbau der Seite den Quelltext aus und sucht mit "Regex.Match" nach den Inputs bzw. Outputs.
Code Snippet zu auslesen des Ausgangs:
foreach (string item in lines)
{
Match match = Regex.Match(item, @".*checked.*name=out(\d).*", RegexOptions.IgnoreCase);
if (match.Success)
{
string ID = match.Groups.Value;
a_ID_Output.Add(ID);
}
}
=> Es werden alle gesetzten Ausgänge in das Array a_ID_Output geschrieben.
Code Snippet zu auslesen der Eingänge:
foreach (string item in lines)
{
Match match = Regex.Match(item, @".*checked.*name=in(\d).*", RegexOptions.IgnoreCase);
if (match.Success)
{
string ID = match.Groups.Value;
a_ID_Input.Add(ID);
}
}
=> Es werden alle gesetzten Eingänge in das Array a_ID_Input geschrieben.
Mit diesen Tricks lässt sich wunderbar und ohne Fehler die einzelnen Ports auslesen und setzen.
Ich hoff die Info ist hilfreich und wird von ELV ins FAQ von IPIO88 kopiert.
Gruß
Thomas D.