PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Im " Rahmen senden " bei RS485



emulein
30.04.2005, 01:34
Hallo zusammen,

ich habe da einen Servomotor den man über eine 485 Schnittstelle
Befehle schicken kann. Im Datenblatt steht auch was man dem Motor senden muss um etwas zu tun. Was mich etwas unsicher macht, dort steht der Befehl muss in einem Rahmen gesendet werden. Also der Protokollaufbau von seriellen Übertragungen ist nicht meine Stärke, geht das mit BASCOM überhaupt?. Die Folgende Zeichenkette soll gesendet werden:

"STX" - "1M" - "ETX" - "BCC"

versuchen wollte ich das mit einem Mega8, RX und TX gehen nur mit den TTL Signalen auf einen Schnittstellenwandler, der macht dort ein 485 Signal draus, und dann auf den Motor.
Die serielle ist folgendermaßen konfiguriert.

Baud 9600, 8Datenbits, Parität gerade, 1 Stoppbit

Ich hoffe es ist nicht zu allgemein beschrieben, so mann halbwegs versteht was ich meine. also mein Problem ist dieser Rahmen da kann ich nicht mit anfangen.

Vielleicht weis jemand von euch Rat.

Danke!


Gruss Frank

MrNiemand
30.04.2005, 09:17
probiers mit schicken eines chr zeichens (ich glaub 34 müsste es sein kann aber auch was anderes sein):

print chr(34);"STX";chr(34);" - ";chr(34);"1M";chr(34)

usw.

kann natürlich aber auch sein das es einfacher auch geht!!!

darwin.nuernberg
30.04.2005, 09:51
Hallo MrNiemand
sorry ich meinte emulein

ich habe selbst ein Projekt mitRS485 im Auge (das brennt auch)
Allerdings habe ich noch keinen Plan wie ich den RS485 realisiere (von der Softwarelösung (32 Devices/Slaves) habe ich auch noch absolut keinen Plan).

Wie realisiert Du den RS485 - Wandler,
welche CPU verwendest Du?

Sandro
30.04.2005, 14:16
"STX" - "1M" - "ETX" - "BCC"
STX und ETX sind ASCII-Steuerzeichen.
STX = Start of Text ;ASCII-Code: 02
ETX = End of Text ;ASCII-Code: 03

Was "1M" und "BCC" sein soll weiß ich leider auch nicht. Evtl. sind das die zu übertragenden Daten. Kann man das Datenblatt mal sehen?

emulein
30.04.2005, 17:21
Hi,

danke schon mal für die Hilfe, das mit dem CHR(), habe ich mal versucht
bin mittlerweile nicht mehr so sicher, ob meine 485 Schnittstelle überhaupt richtig geht. Glaube da muss ich erst mal sicher gehen.

Also ein Datenblatt habe ich da nicht, habe den Motor an einer kleinen Maschine abgebaut die Klebstoff aufgetragen hat. Der Besitzer hat mir das noch aufgeschrieben (hätte mir besser seine Adresse aufgeschrieben!)
Also das mit den ASCII Steuerzeichen scheint zu stimmen, 1M ist der Befehl für den Motor um die Motorwelle zu halten. Wobei 1 die Adresse vom Motor ist. BCC soll so eine Checksume sein die das ganze nach der Übertragung noch mal prüft, so habe ihn verstanden.

Also werde noch mal die Schnittstelle testen (muss da aber erst was bauen) dann werde ich das ganze noch mal versuchen.


Danke!


Gruss Frank

PicNick
30.04.2005, 18:48
Hi, das Meiste ist ja schon gesagt.
BCC: ist ein Block-Check-Character (xor aller zeichen nach STX)
Der Bursche will halt ein komplettes Message-Frame haben, was durchaus sinnvoll ist.
1M : zwischen STX u. ETX sind die eigentlichen Daten, die eigentlich dokumentiert sein sollten.

emulein
30.04.2005, 21:15
Hallo,

also wie gesagt, eine Handbuch oder ähnliches habe ich nicht, nur die
paar Befehle die ich mir aufgeschrieben habe.
Da sind dann noch: M für Stillstand, N für die Drehzahl, D für die Drehrichtung, I für die Stromgrenze (Drehmoment).

Nur würde mich mal Interessieren wie man so ein "Massage-Frame" dann sendet. weist du das Robert?

Gruss Frank

PicNick
01.05.2005, 08:37
Eigentlich einfach und herzergreifend.
Du mußt die Zahl (1 , Drehzahl, etc) in einen String verwandeln und brauchst die länge. das ist sprachspezifisch (welche Sprache sprichst du ?)
als Beispiel nur das "1M" in basic


dim bcc as byte

print chr (2) ' STX
bcc = 0

bcc = bcc XOR chr("1")
print "1";
bcc = bcc XOR chr("M")
print "M";

bcc = bcc XOR chr(3) ' ETX
print chr (3);
if bcc < 32 then bcc = bcc + 32 ' das ist so definiert bei BCC
print chr (bcc);


Der Datenteil sollt natürlich eine Schleife sein, aber zum probieren, ob's paßt, reicht das mal so
Ich vermute auch, du kannst mehrere Commandos in einem Frame senden
STX 1M1D40I300N ETX BCC ' richtung, strom und drehzahl

fertig (glaub ich)

01.05.2005, 11:19
Hallo,

danke für das Beispiel, hat leider nicht funktioniert, aber wie gesagt morgen erst mal die Schnittstelle testen. Bevor ich hier noch unnötige Arbeit mache. Danke!!

Gruss Frank

PicNick
01.05.2005, 12:23
Gut. Achte darauf, daß alle "print" mit semikolon abgeschlossen sind, sonst fügt der print ein "CRLF" ein, und das wär schlecht.

02.05.2005, 11:15
Hi,

guter Einwand mit dem Semikolon, daran hatte ich nicht gedacht.

Danke!

Gruss Frank

emulein
02.05.2005, 11:54
Der Post vom Gast war natürlich ich, vergessen mich einzulogen.

Gruss Frank

emulein
08.05.2005, 01:40
Guten Morgen,

ich kann verkünden der Motor läuft, super!!!!!!!!!!!

waren ein paar Sachen zusammen, also mein Schnittstellenmodul
muss wissen in was für eine Richtung sich die Daten bewegen, ist also ein PIN das man auf High oder LOW schalten muss, zum senden oder empfangen je nach dem. Der code sieht jetzt so aus:

S = &H02 ' ist STX
Print #1 , Chr(s); 'senden STX
S = &H31 'Adresse von Motor hier " 1 "
Print #1 , Chr(s); ' senden
S = &H4D ' befehl für Motor
Print #1 , Chr(s); 'senden
S = &H03 'ETX
Print #1 , Chr(s); ' senden
S = &H5E ' BCC
Print #1 , Chr(s); ' senden


und siehe da es geht!!!, also danke an alle die sich gedanken drüber gemacht haben.


Gruss Frank

Fränki
08.05.2005, 11:30
Hallo Leutz, hallo darwin.nuernberg

RS485 find' ich gut:
Hier noch einige ( hoffentlich hilfreiche ) Anmerkungen:
Dies Software Protokoll von EMULEIN ist notwendig weil der 485 ein Multislave Bus ist: also muss man ein Protokoll haben, was dem Slave sagt: Hier kommt ein neues Telegramm (STX ist StartTransmit), dann muss der Slave eine Adresse verifizieren: ? bin ich gemeint.
Dann die eigentlichen Daten, der Slave weiss wieviel Bytes kommen...
Dann kommt die Kennung ETX (End of Transmission) und eine BCC- Checksumme
Die anderen Slaves bekommen den Datenstrom zwar mit, warten aber immer auf die STX + meine Adresse Kennung um die Daten auch zu verarbeiten...
Hab' mich vor kurzem damit beschäftigt, könnte noch einen Schaltplan für ein RS232-RS485 (2-Draht) Interface Posten wenn Interesse besteht...
Gruss Frank

08.05.2005, 14:13
Hallo,

ja, solche Info´s kann man immer gebrauchen. Gibt es da eine feste Möglichkeit dieses BCC zu berechnen?. Da ich nicht sicher bin, ob ich noch mal von den Schnittstellenmodulen bekomme, hätte ich schon Interesse an dem Schaltplan.

Gruss Frank

Fränki
08.05.2005, 14:57
ok, ein kleiner Plan:

OK für Baudraten >= 9600bps sonst muss C6 angepasst werden!
Noch zu beachten: die Antwort eines Slave's darf nicht sofort erfolgen:
Da die RX/TX Umschaltung aus dem RS232 Tx Signal generiert wird muss der Slave mit seiner Antwort > 1ms warten!!!

Gruss Frank

emulein
08.05.2005, 22:21
Hi,

danke !

Gruss Frank

emulein
09.05.2005, 12:12
Hi,

eine Frage hätte ich da noch, der Motor sendet auch einen Statusbericht zurück, würde ich gerne mal einlesen.
Wenn man eine Software serielle Schnittstelle beim mega 8 hat, kann man da auch einen Zeichenpuffer nutzen. Was man so in der Hilfe findet beschreibt immer nur die Hardwareschnittstelle.


Gruss Frank

darwin.nuernberg
28.05.2005, 11:09
ok, ein kleiner Plan:

OK für Baudraten >= 9600bps sonst muss C6 angepasst werden!
Noch zu beachten: die Antwort eines Slave's darf nicht sofort erfolgen:
Da die RX/TX Umschaltung aus dem RS232 Tx Signal generiert wird muss der Slave mit seiner Antwort > 1ms warten!!!

Gruss Frank

Hallo Fränki,
endlich mal jemand, der mit einem Plan raus rückt.
Danke erstmal dafür.


Leider ist die Auflösung etwas knapp ausgefallen.
Könnest Du dem Plan mit etwas höherer Auflösung bereitstellen?
Dann bekomme ich keinen Augenkrebs.

Danke

Fränki
28.05.2005, 13:15
OK, Schaltplan RS232 -> RS485 als PDF...

Schaltung funktioniert auch bei 57,6kBps
Gruss Frank

artools
13.09.2005, 13:55
Hallo,

wenn man den AVR z.B. Mega8 direkt anschliessen will brauche ich doch nur den Wandler, verbinde RE und DE auf einen Steuerpin und dann mit Printbefehlen raus.


Gruss
A. Arndt