RS232 Newbie braucht schnelle Hilfe

Gast #4664398
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.
Gast
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)
Gast
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.
Gast
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...
Gast
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
Gast
Du musst die Kombinationen aus Hex-angaben, Dezimalangaben, Adressen und 
den passenden Checksummen durchspielen.
Bei so einer Anleitung raten wir genauso wie du.
Moderator (Firma: Titel) Persönliche Seite
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...
Gast
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.
Gast
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.
Moderator (Firma: Titel) Persönliche Seite
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...
Gast
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.
(Firma: Vescomp)
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.
Angehängte Dateien:
Gast
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.
Gast
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
(Firma: Vescomp)
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.

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 10 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.