RS232 Newbie braucht schnelle Hilfe

Gast #4664398
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.
Gast #4664411
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)
Gast #4664436
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...
Gast #4664440
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
Moderator (Firma: Titel) Persönliche Seite #4664447
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...
Gast #4664450
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.
Moderator (Firma: Titel) Persönliche Seite #4664459
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...
Gast #4664466
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.
(Firma: Vescomp) #4664469
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.
Angehängte Dateien:
Gast #4664723
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.
Gast #4665029
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
(Firma: Vescomp) #4665039
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.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren