Auf Seite 24 der Doku siehst du das. Du gibst die Bytefolge aus um den Motorstatus abzufrufen. Anschließend gibt dir das Board über RS232 die Bytes zurück. Diese musst du dann nur noch mit der dementsprechenden Schnittstelle einlesen.
hi ,
weiss jemand welche wert den rn Schrittmotor den motorstatus zurück gib? Nach Datenblatt gib es 1 byte zurück
Liefert zurück:
1. Byte:
0=Aus
1=Stop (Haltestrom)
2=Dreht bis Fahrschritte erreicht
3=Dauerdrehung bis Stop
2.
Übliche Rückgabecode (42)
aber mit was kann ich den Byte abrufen? Bitte um hilfe
danke
Auf Seite 24 der Doku siehst du das. Du gibst die Bytefolge aus um den Motorstatus abzufrufen. Anschließend gibt dir das Board über RS232 die Bytes zurück. Diese musst du dann nur noch mit der dementsprechenden Schnittstelle einlesen.
hi Kampi,
danke für dein schnelle antwort ^^. hier ist mein Code
und noch zum info ^^. ich will den motorstatus über visual basic auslesen. PC <-> RN-Controll <-> Rn-SchrittmotorCode:'RN-Schrittmotor Motorstatus abrufen '=========================================== If Adresse = Adr_motorstatus Then If Crc_save = Crc Then Motorstatus = Kommando If Motorstatus = 113 Then Rs232daten(1) = Befehl_motorstatus 'Befehlscode Rs232daten(2) = Motor_1 '1 Parameter Sendebytearray Input #2 ' hier ist das problem, was sollte ich zurückgeben End If End If End If
Geändert von CN84 (06.09.2011 um 19:39 Uhr) Grund: statt print muss ja input sein
hi ^^,
also nochmal zu meine problem. Ich möchte über Visual Basic 2010 <-> RN-Cotroll<->RN-Schrittmotor steuern. Ich kann über Visual Basic daten an Rn Controll und dann zum RN Schrittmotor senden. Also Schrittmotor bewegt sich auch wie ich möchte und Schrittanzahl abrufen könnte ich auch. Meine problem ist wenn RN-Schritmotor daten senden also Rückmeldung vom Board kann ich nicht an Visual Baisc empfangen bzw vom RN Controll. Also z.b ich kann kein RN-Schrittmotor Fehlermeldung (42) oder Motor status abrufen. Hab alles versuch aber geht irgendwie nicht
Und hier ist eine Skizze wie ich den Board anschließen
http://imageshack.us/photo/my-images/713/rncontroll.png/"][IMG]http://img713.imageshack.us/img713/7628/rncontroll.png
Und hier nochmal den Code
Bitte an alle RN-Controll Profi um HILFECode:'================ 'AVR-File, Quarz, Baudrate, Hardwarestack, Softwarestack, Framesize $regfile = "m32def.dat" $framesize = 64 $swstack = 64 $hwstack = 64 $crystal = 16000000 'Quarzfrequenz $baud = 9600 'open channel for output Open "COMA.0:9600,8,N,1" For Output As #1 'Port PA0 wird als TX definiert Schwarz Kabel Open "COMA.1:9600,8,N,1" For Input As #2 . . . . 'RN-Schrittmotor Motorstatus abrufen '=========================================== If Adresse = Adr_motorstatus Then If Crc_save = Crc Then Motorstatus = Kommando If Motorstatus = 113 Then Rs232daten(1) = Befehl_motorstatus 'Befehlscode Rs232daten(2) = Motor_1 '1 Parameter Sendebytearray End If Input #2 , Status ' hier liegt wahrscheinlich das problem :( bekomm hier immer 0 auf PC Print Satus End If End If
Haste mal geguckt ob der UART vom Controller richtig funktioniert? Du kannst ja mittels eines Terminalprogrammes an deinem PC dein RN-Schrittmotor simulieren, also das dein PC dann quasi das Schrittmotorboard ist. Dazu gibst du einfach im Terminalprogramm die Codes ein und guckst wie sich dein RN-Control verhält. So kannst du sicher gehen das dein UART richtig arbeitet. Und dann musst du natürlich Rx vom RN-Control mit Tx vom RN-Schrittmotor und Tx vom RN-Control mit Rx vom RN-Schrittmotor verbinden
naja normaleweise muss ja funktionieren schließlich kann ich ja über RN-Schrittmotor den schrittzahl die sich der Motor bislang gedreht hat, abgerufen werden. Also kann ich doch daten vom RN-Schrittmotor empfangen. Aber das komische wenn RN-Schrittmotor mir ein byte senden auf welche wert wird das gspeichert o0. Weil beim Schrittzahl abrufen kann ich das hier ist mal den Code
und des klappt wunderbar. Aber ins Doku beim Motor status steht halt nicht drin auf was das gespeichert wird bin echt ratlosCode:If Adresse = Adr_schrittzahl_abrufen Then If Crc_save = Crc Then Schrittzahl_abrufen = Kommando If Schrittzahl_abrufen = 114 Then Rs232daten(1) = Befehl_schrittzahlabrufen 'Befehlscode Rs232daten(2) = Motor_1 '1 Parameter Sendebytearray Inputbin #2 , Empfang(1) , 5 Schritte = Empfang(1) Ltemp = Empfang(2) * 256 Schritte = Schritte + Ltemp Ltemp = Empfang(3) * 65536 Schritte = Schritte + Ltemp Ltemp = Empfang(4) * 16777216 Schritte = Schritte + Ltemp Print Schritte End If End If End If
Naja wenn du die Kommunikation mit UART machst, musst du nur:
Print "!#": chr(102);chr(1);chr(0); chr(0); chr(0); chr(0); chr(0);
schreiben.
Wenn du hier in der Doku:
http://www.robotikhardware.de/downlo...hrittmotor.pdf
auf Seite 25 schaust siehst du wieso du das Senden musst.
Die ersten beiden Bytes sind ein ! und ein #. Die sendest du mit Print "!#". Anschließend musst du eine 102 senden damit der Controller weiß das nun ein Befehl kommt. Dies machst du mit chr(102);.
Ganz wichtig ist das Semikolon damit Bascom weiß das nach dem Wert 102 kein CR und LF gesendet wird. Sonst verwirrst du den Controller auf deinem RN-Schrittmotor, da der mit 0x10 und 0x13 nichts anfangen kann. Und so wiederholt sich das dann. In der Doku steht gut erklärt drin wo du was senden musst.
Nachdem du
Print "!#": chr(102);chr(1);chr(0); chr(0); chr(0); chr(0); chr(0);
ausgeführt hast, musst du nur noch die 4 Rückgabebytes mittels "Input" einlesen und auswerten. In dem Beispiel "Schrittzahl abrufen" besteht das was das RN-Schrittmotor ausgibt aus 4x 1 Byte also 4 Byte d.h. 32 Bit. Wichtig ist auch das die die Bytes richtig herum zusammen setzt. Also so muss das fertig zusammengesetzte Ergebniss aussehen
High Byte - Low Byte - High Byte - Low Byte
High Word - High Word - Low Word - Low Word
00000000 - 00000000 - 00000000 - 00000000
naja das schrittzahl abruf geht ja auch bei mir wunderbar nur den Motor Status geht bei mir nicht (S.24) deswegen verstehe ich warum bei schrittzahl abruf einwandfrei funktioniert aber beim Motor Status die normaleweise viel einfacher sein muss nicht funnktioniert
so ich habe meine Problem gelöst ^^ und möchte an alle danken vorallem an Kampi die mir dabei geholfen haben bitte den Beitrag schließen ^^
Hallo CN84
könntest du bitte deien Lösung hier kundtun? Ich habe im Augenblick ein ähnliches Problem und bekomme ums verrecken nicht den Motorstatus von Motor 2. Motor 1 sendet das Bord wunderbar zurück, nur Motor 2 funktioniert nicht. Vielleicht komme ich ja mit deiner Lösung weiter.
vielen Dank
b112enno
Lesezeichen