Forum: Mikrocontroller und Digitale Elektronik RS232 Newbie braucht schnelle Hilfe


von Michael (Gast)


Lesenswert?

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.

von Kübel (Gast)


Lesenswert?

> RS232 Newbie braucht schnelle Hilfe

Kein Problem. Nenne einfach deine Kreditkartennummer & die PIN, der Rest 
geht Ruck Zuck.

von Michael (Gast)


Lesenswert?

Ich hätte nichts gegen konstruktive Beiträge, Danke.

von Kübel (Gast)


Lesenswert?

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.

von egberto (Gast)


Lesenswert?

Das Demo von Vellmann läuft?

von v3.x (Gast)


Lesenswert?

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)

von SuperPCFan (Gast)


Lesenswert?

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.

von Michael (Gast)


Lesenswert?

Das ist nicht konstruktiv, sondern Dummschwätzerei. Weitere Kommentare 
von Dir werden ignoriert bis vielleicht wirklich Hilfe kommt ;-)

von SuperPCFan (Gast)


Lesenswert?

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.

von Philipp L. (philipp_l89)


Lesenswert?

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
von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

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
von Michael (Gast)


Lesenswert?

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...

von Marc V. (Firma: Vescomp) (logarithmus)


Lesenswert?

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.

von HildeK (Gast)


Lesenswert?

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

von SuperPCFan (Gast)


Lesenswert?

Du musst die Kombinationen aus Hex-angaben, Dezimalangaben, Adressen und 
den passenden Checksummen durchspielen.
Bei so einer Anleitung raten wir genauso wie du.

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

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
von Michael (Gast)


Lesenswert?

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.

von SuperPCFan (Gast)


Lesenswert?

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.

von Michael (Gast)


Lesenswert?

wieso hat der dann mit 0x6E auch geschaltet? grübel

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

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
von omg (Gast)


Lesenswert?

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

von Michael (Gast)


Lesenswert?

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.

von Marc V. (Firma: Vescomp) (logarithmus)


Angehängte Dateien:

Lesenswert?

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.

von Michael (Gast)


Lesenswert?

Ah, die seite ist nicht mehr BE, sondern EU, Danke für den Hinweis.

von HildeK (Gast)


Lesenswert?

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 ...

von Walter S. (avatar)


Lesenswert?

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

von guest (Gast)


Lesenswert?

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.

von Werner F. (Gast)


Lesenswert?

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

von Marc V. (Firma: Vescomp) (logarithmus)


Lesenswert?

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
Noch kein Account? Hier anmelden.