ich habe gestern Nacht die Vellman 8 Port Relais-Karte zusammen gelötet.
Und mache jetzt meine ersten Gehversuche mit dem Com Port Modul von IPS.
Hat schon jemand die Karte in IPS eingebunden??
Ich denke das sollte ohne große Probelem möglich sein.
Leider habe ich keine Ahnung wie das mit den Bits und Bytes auf der Com -Port funktioniert.Kopfzerbrechen bereitet mir nicht nur die „Checksummen“ berechnung:mad:
Hier ein Auszug aus der Doku:
DIE K8056-KARTE ÜBER RS232-BEFEHLE ANSTEUERN.
Anmerkung: Sie können ein Testprogramm von unserer Site herunterladen. Der
Quellcode ist auch verfügbar (nur auf Englisch).
Anweisungen für den Entwurf der Software:
Weil die Befehle aus einer Kette von ASCII-Zeichen bestehen, ist es einf~
Software, die über einen seriellen Port des PC die Befehle übertragt, zu
entwerfen.
Einstellungen für den Port P:
X Baud:2400
X Paritätt: Keine
X Databits: 8
X Stopbits: 1
• Zur Bedienung mit einem Kabel muss die Sequenz von Befehlen
mindestens zweimal gesendet werden.
• Zur drahtlosen Bedienung empfehlen wir, dass die Sequenz von Befet
fünfmal hintereinander gesendet wird. Für eine höhere Zuverlässigkeil
sorgen Sie am besten für eine Pause von minimal 300ms zwischen 2
verschiedenen Befehlen.
Befehlsfolge:
Um einen Befehl auszuführen, muss die richtige Befehlsfolge der K8056
übertragen werden.
Eigentlich sieht solch eine Befehltolge so aus:
CHR$(13)
Kartenadresse (1 …255)
Befehl
Adresse (1…255) oder Relaisnummer (1…9 ASCII)
‘checksum Summe prüfen (2-Komplement der Summe der 4 vorigei
Bytes + 1)
Befehle:
‘E‘ : Nothalt für alle Karten, ungeachtet die Adresse. (Achtung, Relais, die
durch Open~CollectOrAuSg ge eingeschaltet wurden, werden durch
diesen Befehl nicht ausgeschaltet.)
‘0‘ : Display-Adresse. Alle Karten zeigen binär ihre heutige Adresse. (LD1
MSB, LD8: LSB)
‚S‘:
Relais einstellen. S-Befehl soll durch Relais # ‘1 bis 8‘ (‘9 stellt alle
Relais zur gleichen Zeit ein) gefolgt werden.
‚C‘
Relais löschen. 0-Befehl soll durch Relais # ‘1‘ bis ‘8‘ (‘9‘ löscht alle
Relais zur gleichen Zeit) gefolgt werden.
‚T‘
Toggle-ReIaiS umschalten. T-Befehl soll durch Relais # ‘1‘ bis ‘8‘
gefolgt werden.
‘A‘ : Die heutige Adresse einer Karte wechseln. ‘A‘-Befehl soll durch die
neue Adresse gefolgt werden (1 …255).
‘F‘ : Alle Karten auf Adresse 1 (Standard)
‘B‘ :Byte senden. Ermöglicht es, den Status aller Relais mit einem Befehl
zu steuern, dadurch. dass ein Byte mit dem Relais-Status für jedes
Relais gesendet wird (MSB: Relais 1 LSB: Relais8)
Bei den Schnittstellen-Settings sollte keine Flusskontrolle stehen.
Ich habe mir mal das Demo-Programm angesehen.
Dort wird als erstes RTS und DTR gesetzt. Das könnte evtl. in IPS ein Problem sein. Zum extra setzen dieser Leitungen gibt es wohl noch keine Funktionen, oder wurde das im letztem Update mit eingebaut???
Die Sequenz zum Senden im Testprogramm hat (wie in der Beschreibung/aber anders wie Dein Test 5 Bytes (13, 1(Karte), ‚C‘(Befehl),‚3‘(Relay),Prüfsumme.
Das kann man ja 1:1 in PHP Abbilden. Siehie dazu auch den Thread zum Conrad Relayboard und zu meinem Demo-Script für das M232-Interface bezüglich dem Handling von Binären und Stringdaten.
natürlich kann man das nahezu 1:1 nach PHP übernehmen, aber diese Art der Checksummen-Berechnung ist an Umständlichkeit kaum zu überbieten .
Da ist der von mir vorgestellte Weg doch deutlich eleganter und wegen der fehlenden Typumwandlung (bei der Division) darüberhinaus auch wesentlich effizienter.
Ein bisschen merkwürdig kam mir das auch vor, aber auf Deine Ersetzung wäre ich garantiert nicht gekommen. Vielleicht hatte der Vellemann-Designer vorher am Obfuscation-Toolkit-Contest teilgenommen.
Zum Glück gibt es beim Programmieren meistens (anders als in der Mathematik) nicht nur eine korrekte Lösung…