Hallo Zusammen. Um direkt Beschimpfungen oder ähnlichem vorzugreifen: Ich kenne mich nicht aus und benötige nur ein Hilfebeispiel, denn die Beschreibung ist für mich als nicht-Programmierer und nicht-Mikrocontroller-Mensch sehr unverständlich. Den Rest bekomme ich hin, hoffe ich. Es geht um eine 8-Kanal Relais-Karte, die über RS232 gesteuert wird. In der Anleitung steht folgendes: (ZITAT) Befehlsfolge: Um einen Befehl auszuführen muss die richtige Befehlsfolge der K8056 übertragen werden. Eigentlich sieht solch eine Befehlsfolge so aus: 1. CHR$ (13) 2. Kartenadresse (1...255) 3. Befehl 4. Adresse (1...255) oder Relaisnummer ('1'..'9' ASCII) 5. 'checksum' Summe prüfen (2-Komplement der Summe der 4 vorigen Bytes + 1) Befehle: 'S' : Relais einstellen. 'S'-Befehl soll durch Relais # '1' bis '8' gefolgt werden. 'C' : Relais löschen. ...(ich kürze das hier mal ab)... (ZITAT ENDE) Und jetzt steh ich da und nix tut sich ... Was müsste ich zum Beispiel schreiben für 'Relais 1 an'? (In HEX) Den Rest verstehe ich dann und könnte es herleiten. Danke schonmal im voraus.
> RS232 Newbie braucht schnelle Hilfe
Kein Problem. Nenne einfach deine Kreditkartennummer & die PIN, der Rest
geht Ruck Zuck.
Michael schrieb: > Ich hätte nichts gegen konstruktive Beiträge, Danke. Also mein Beitrag war konstruktiv. Er ist extra für Leute die schnelle Hilfe fordern.
DU hast doch schon alles geschrieben: sende 1. CHR$ (13) 2. Kartenadresse (1...255) 3. Befehl: hier wohl 'S' 4. Adresse (1...255) oder Relaisnummer ('1'..'9' ASCII):hier wohl '1' 5. 'checksum' Summe prüfen (2-Komplement der Summe der 4 vorigen Bytes + 1)
Also die Anleitung ist sehr schwammig was Befehlslänge und Formatierung angeht. Ich würde es erst mal mit: 0x13 0x01 0x53 0x31 0x66 versuchen. Sind aber viele Vermutungen eingeflossen.
Das ist nicht konstruktiv, sondern Dummschwätzerei. Weitere Kommentare von Dir werden ignoriert bis vielleicht wirklich Hilfe kommt ;-)
SuperPCFan schrieb: > Also die Anleitung ist sehr schwammig was Befehlslänge und > Formatierung > angeht. > > Ich würde es erst mal mit: > > 0x0D 0x01 0x53 0x31 0x6C > > versuchen. > > Sind aber viele Vermutungen eingeflossen.
1. 0d13 -> 0x0D 2. Kartenadresse (1...255) (Die weiß ich nicht, angenommen 1) -> 0x01 3. 'S' -> 0x53 4. Relais '1' -> 0x31 5. 'checksum' -> 0x5332
:
Bearbeitet durch User
Michael schrieb: > 'checksum' Summe prüfen (2-Komplement der Summe der 4 vorigen Bytes + 1) Philipp L. schrieb: > 5. 'checksum' -> 0x5332 Ich tippe eher, dass die Checksum auch ein einziges Byte ist und damit 0x6F ist... 0x6F deshalb, weil 0x100-0x92=0x6E ist. Und 1 drauf gibt die 0x6F.
:
Bearbeitet durch Moderator
egberto schrieb: > Das Demo von Vellmann läuft? Die Software finde ich nicht. Die Homepage ( www.vellemann.be ) ist auch nicht mehr da... Hast Du die Software vielleicht? SuperPCFan schrieb: > Ich würde es erst mal mit: > > 0x13 0x01 0x53 0x31 0x66 > > versuchen. Das klappt leider nicht. Aber es ist schön zu merken, dass ich nicht der einzige bin, der das nicht aus dem eff eff hin kriegt mit der Anleitung ;-) bis jetzt noch NICHT FERTIG ;-) philip's angabe noch probieren...
Michael schrieb: > Was müsste ich zum Beispiel schreiben für 'Relais 1 an'? (In HEX) Den > Rest verstehe ich dann und könnte es herleiten. 0x0D - 0x01 - 0x53 - 0x31 - 0x6F Eine Sekunde warten, dann 0x0D - 0x01 - 0x43 - 0x31 - 0x7F senden.
Michael schrieb: > Und jetzt steh ich da und nix tut sich ... Und was hast du gemacht was zu diesem Ergebnis führte? Du musst wahrscheinlich schreiben: 0x0d = CHR$13 0x01 = Kartenadresse, Annahme von mir, ich kenne ja nicht deine Einstellungen 0x53 = S 0x01 = Adresse 1, ev. auch ASCII '1', wäre dann 0x31 0x9E = Zweierkomplement der Summe 0x0d+0x01+0x53+0x01, muss geändert werden, wenn Relaisadresse als 0x31 gesendet werden muss
Du musst die Kombinationen aus Hex-angaben, Dezimalangaben, Adressen und den passenden Checksummen durchspielen. Bei so einer Anleitung raten wir genauso wie du.
HildeK schrieb: > 0x9E = Zweierkomplement der Summe 0x0d+0x01+0x53+0x01 Das Zweierkomplement der Summe 0x0d+0x01+0x53 = 0x92 Und noch 1 drauf 0x6E+0x01 = 0x6F Was ich mich da frage: warum machen sich die Leute bei der Prüfsumme eigentlich immer das Leben so umständlich schwer? Ich würde einfach die Summe der vorigen Bytes senden. Oder nur das Zweierkomplement, dann ist die Summe über alle 5 Bytes 0. Aber das +1 hier ist ein unnötiger Knoten im Hirn...
:
Bearbeitet durch Moderator
Vielen Dank alle zusammen! Ich hab geschaltet. freude Das mit der checksumme muss ich mir noch beibringen, dann wird der rest schon ... ;-) Der Sieger: 0x0D 0x01 0x53 0x31 0x6E Danke.
Weil bei Prüfsummen immer Komplexität gegen Sicherheit arbeitet. Will man einfache Berechnungen oder möglichst viele Fehlerfälle erschlagen? Beides geht nicht. Jede Rechenoperation macht andere Fehler erkennbar. Jede Rechenoperation die man weglässt, lässt die entsprechenden Fehler unentdeckt.
SuperPCFan schrieb: > Weil bei Prüfsummen immer Komplexität gegen Sicherheit arbeitet. Das ist aber schon "sich selber Sand in die Augen streuen". > Jede Rechenoperation macht andere Fehler erkennbar. > Jede Rechenoperation die man weglässt, lässt die entsprechenden Fehler > unentdeckt. Was bietet mir hier das +1 ausser der Sicherheit, dass das irgendwann mal einer vergisst? Warum multiplizert man dann das Ergebnis der Prüfsumme nicht noch mit 7 und zieht daraus die Wurzel? Ich hätte gesagt: summiere alle übertragenen Bytes auf, und wenn nicht 0 rauskommt, dann ist es ein Fehler. Michael schrieb: > wieso hat der dann mit 0x6E auch geschaltet? grübel Wenn er das tut, schaltet der vermutlich auch mit jeder beliebigen Prüfsumme, weil die empfängerseitig aus Komplexitätsgründen gar nicht implementiert ist...
:
Bearbeitet durch Moderator
und hier der link zu der Software die dazugehört: https://www.velleman.eu/downloads/files/downloads/k8056_vb_demo.zip Wäre ja auch zu einfach wenn du gesagt hättest was du da überhaupt hast und von wem..... Hier fehlt jetzt das ROLLEYES Emoticon
Vielen Dank Euch allen. Wenn ich mal wieder was Controller-mässiges brauche, komm ich gerne wieder. Ich brauche das nur zu selten (bis eigentlich gar nicht) um mich mit der Materie auseinander zu setzen. Kann als gelöst geschlossen werden. Danke.
Hier. So etwas von Sch..site habe ich lange nicht erlebt. Michael schrieb: > Der Sieger: > > 0x0D 0x01 0x53 0x31 0x6E Mit Sicherheit nicht. Weil: 0x0D+0x01+0x53+0x31 = 0x92 2-er Komplement = 0x6E +1 = 0x6F Andersrum: 0x0D+0x01+0x53+0x31 = 0x92 +1 = 0x93 2-er Komplement = 0x6D Wo kommt denn noch einmal +1 im zweitem Beispiel ? Richtig ist entweder Beitrag "Re: RS232 Newbie braucht schnelle Hilfe" oder 0x6D Oder das, was du oben aufgeführt hast, stimmt nicht. Oder es wird jede beliebige Prüfsumme angenommen.
Ah, die seite ist nicht mehr BE, sondern EU, Danke für den Hinweis.
Michael schrieb: > Der Sieger: > > 0x0D 0x01 0x53 0x31 0x6E Damit geht's? OK, dann ist es nur das Zweierkomplement ohne irgendwelche weitere Additionen. Vielleicht hätte stehen sollen: Einerkomplement + 1 ...
Lothar M. schrieb: > Ich hätte gesagt: summiere alle übertragenen Bytes auf, und wenn nicht 0 > rauskommt, dann ist es ein Fehler. und so war es dann ja auch
In dem ZIP sind doch die Sourcen von dem Demotool mit drin. Warum da nicht einfach mal reinschauen?
1 | checksum = (255 - ((((13 + address + Asc("S") + Asc("1")) / 256) - Int((13 + address + Asc("S") + Asc("1")) / 256)) * 256)) + 1 |
2 | |
3 | messagestring = Chr$(13) & Chr$(address) & "S1" & Chr$(checksum) |
4 | messagestring = messagestring & messagestring |
5 | messagestring = messagestring & messagestring |
6 | comm.Output = messagestring |
Hier noch ein Auszug aus dem PDF:
1 | For wired operation, the instruction sequence needs to be sent at least twice. |
Hallo, wie kommunizierst Du denn hardwaremäßig per Kabel mit der Relaiskarte? Per Softwarehandshakes oder Hardwarehandshakes? Bei Softwarehandshakes reicht ein 3 aderiges Kabel. Also Masse, RX und TX. Bei Hardwarehandshakes musst Du mindestens 4 Adern haben. Also Masse, RX, TX und DTR. Wichtig hierbei könnte sein, dass der Rechner der die Daten zur Relaiskarte sendet, zuerst das DTR-Bit (Data-Terminal-Ready-Bit) an die Relaiskarte senden muss, bevor die Relaiskarte mit dem Rechner kommunizieren kann. Stimmen denn die übrigen Parameter wie Baudrate, Datenbit, Stopbit und Parität? Falls nicht, ist eine Kommunikation ebenfalls nicht möglich. MfG. Zeinerling
guest schrieb: > checksum = (255 - ((((13 + address + Asc("S") + Asc("1")) / 256) - > Int((13 + address + Asc("S") + Asc("1")) / 256)) * 256)) + 1 Was für ein Schwachsinn. > messagestring = Chr$(13) & Chr$(address) & "S1" & Chr$(checksum) > messagestring = messagestring & messagestring > messagestring = messagestring & messagestring > comm.Output = messagestring Und das ist noch schwachsinniger. > Hier noch ein Auszug aus dem PDF:For wired operation, the instruction > sequence needs to be sent at least twice. Und das ist absoluter Wahnsinn.
:
Bearbeitet durch User
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.