PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Isel 4Achs Controller iMC-M per Bascom ansteuern



Iselpeter
30.10.2012, 10:38
Hallo,

Ich bin Maschinenbaustudent und soll mittels Bascom Einen Isel 4 Achs Controller iMC-M ansteuern und Punkte abfahren. Dazu zusagen ist das ich mich als Maschinenbaustudent nicht alzu tief in der Materie befinde und auch nicht sonderlich viele Kenntnisse in der Programmierung mit Bascom habe. Meine erste Frage ist wie ich die Schnittstelle öffen kann? Der Ausgang ist COM3 und hat 19200 baud. Probiert habe ich es mit dem Befehl: Open Com3:19200,8,n,1 for output as #3

Ich weiß nun nicht ob das ausreicht oder dort noch irgendwo ein close kommen muss weil dies in der Hilfe nicht ersichtlich ist. jedenfalls fur mich nicht.

Und zweitens wusste ich gerne wenn ich die Simulator öffne ob die Schnittstelle dann geöffnet wird oder ob mir das Programm dies nur vorgaugelt.

Ich habe folgendes Programm geschrieben und auf dem simulator ablaufen lassen:

Cls
Dim A As String * 1
Open "com3:19200,8,n,1" For Output #3
Print "@01"
A = Waitkey()
Print A
End

Das System benötigt immer einen Handshake aber ich bekomme keine 0 zurück das die Achsen konfiguriert wurden oder auch keine Fehlermeldung deshalb die Frage mit dem simulator ob er die Schnittstelle anspricht.

Ich hoffe es gibt schlaue leute die mir da helfen können. Würde mich sehr über Hilfe freuen.

Dank im vorraus.

Andree-HB
30.10.2012, 10:55
Du musst die Print-Anweisung auf die entsprechend eingestellte Software-Uart zeigen lassen :

Print #3, "@01"

Iselpeter
30.10.2012, 11:06
Ich habe den kanal eingefügt so wie du es geschrieben hast aber nun zeigt er mir fehler in line 7. external routine not found und label not found. Line 7 ist die End Zeile.

Searcher
30.10.2012, 11:52
Schau Dir den open Befehl in der BASCOM Hilfe an. Da ist ein Beispiel for Soft UART.

Im Open Befehl müßte es zB "comb.1:19200, ... " heißen. Dann wäre PB1 der TX
Außerdem muß es ... as #3 heißen.

Für waitkey braucht es einen Input PIn, also open "...." for input as ...
Im waitkey muß die Kanalnummer vom input angegeben sein.

Auf welchem µC soll das laufen?
Komplettes Programm incl Header posten.


wusste ich gerne wenn ich die Simulator öffne ob die Schnittstelle dann geöffnet wird
Der Simulator kann auf dem µC den Port nicht öffnen, wenn er nicht angeschlossen ist.

Gruß
Searcher

Iselpeter
30.10.2012, 12:21
Dim A As String * 3
A = "*"
Open "com3:19200,8,N,1" For Input As #3
Print #3 , "@01"
If Loc(3) < 1 Then Print "hallo"
A = Inkey(#3)
Print "A$" ; A
If A = "0" Then Print "alles ok" ; End If
Marke:
A = Inkey(#3)
If A < 0 Then Goto Marke
Print "a$" ; A
Print #3 , "@0a 500,1000"
A = Waitkey()
Print "A$" ; A
End

Das is ein ein kleiner Anfang den ich mal so probiert habe aber gibt er auch fehler aus. Also ich will über eine RS232 Schnittstelle diesn Isel Roboter ansteuern und damit einzelne Messpunkte anfahren. Das Programm war nur so ein kleiner Versuch zum testen. Angeschlossen habe ich alles. Über andere Programme kann ich auch wunderbar mit dem geraät kommunizieren und alles so bewegen wie ich will aber mein Professor will unbedingt das ich es mit Bascom mache. Er soll einfach 10 voreingegeben Punkte anfahren und dort 30sec verharren dann kann ich den messwert ablesen und weiter gehts. so soll das Programm aussehen aber das ist ganz und gar nicht meine Welt. Vllt könnt ihr mir ja noch mehr nützliche Hinweise geben. Gruß

Searcher
30.10.2012, 18:36
Mit BASCOM schreibt man Programme, die auf einen Mikrokontroller (µC) übertragen werden und dann dort ablaufen.

Damit das Programm auf dem µC ablauffähig ist, muß der Sourcecode für den ganz bestimmten µC kompiliert werden.
Einstellungen für die Kompilierung gibt man der Übersichtlichkeit halber in einem Header im Sourcecode an.

In Deinem Programm versuchst Du SW-UART zum Senden von Daten über die PC COM Schnittstelle zu nutzen. Damit hab ich es nicht geschafft - denke auch nicht, daß das geht :confused:

Das ganze Timing Verhalten in der Simulation entspricht nicht dem, die es auf dem µC haben würde. Um trotzdem was aus der Simulation raus und rein zu kriegen, versuch Folgendes:

In BASCOM unter "Options", "Communication" den COM Port einstellen, den Du am PC nutzen möchtest und die Parameter wie 19200,8,n,1,handshake=none
In BASCOM unter "Options", "Simulator" auch nochmal den COM Port einstellen.

Unten stehendes Programm kompilieren und dann Simulator aufrufen. Oben den Haken bei Terminal aktivieren (Werden COM-Port Parameter geändert, muß der Haken deaktiviert und wieder aktiviert werden!).
Bei Beenden und Neustart von BASCOM verschwindet der Haken wieder - drauf achten daß er gesetzt ist, wenn Du wieder den Datenaustausch brauchst.

Simulation laufen lassen.

So hat die Verbindung bei mir auf WIN-XP mit Nullmodem Kabel zwischen echten COM-Ports zu einem anderen PC mit Hyperterminal geklappt; hatte also keinen USB-RS232 Wandler und korrekte Einstellungen am anderen PC vorausgesetzt.

Das Programm nutzt die defaultmäßigen Einstellungen für die HW-Uart = COM1 des µC. Deshalb keine Einstellungen außer $baud ($baud hat aber keinen Einfluß auf die Kommunikation aus der Simulation heraus). Wegen Nutzung der HW-COM1 ist kein "Open" notwendig.

Bitte gib Bescheid wenns funktioniert hat. und wenn nicht, dann nicht ;)



$regfile = "m88def.dat" 'Für ATMega88 Mikrokontroller
$framesize = 32
$swstack = 32
$hwstack = 34
$crystal = 8000000
$baud = 19200 'Baud Rate ( 8,N,1 ist default - flow control=NONE)

Dim A As String * 1
Print "@01"
A = Waitkey()
Print A
End


Gruß
Searcher

Iselpeter
01.11.2012, 09:41
Hallo... Ganz herzlichen dank schonmal das ihr mir helfen wollt. ICh habe alles so wie du beschrieben hast gemacht und habe alles so eingestellt. Ich habe den simulator geöffnet aber er arbeitet das programm nur bis zum waitkey ab und weiter geht er nicht. Ich denke er bekommt keine antwort. Ich habe es mit einem anderen Programm überprüft. Ich habe com3 und 19200 Baud. Mit diesen Einstellungen kann ich mit dem Isel kommunizeiren und er führt die Befehle auch wunderbar aus. Ich habe wikrlich keine Idee wieso er nichts zurück bekommt. Würde mich über weitere Antworten sehr freuen. Gruß

- - - Aktualisiert - - -

Sry ich muss mich revidieren. Ich hatte ganz vergessen den Haken bei terminal zu setzen und nun bekomme ich die Null also das er den Befehl erpfangen hat zurück also funktioniert es. Tausend dank dafür schonmal. Und wie geht es nun weiter? Wie setze ich die befhele ab das er Punkte anfährt? Also der befehl für isel ist zum beispiel ür eine Achse dann: @0a 5000,10000 -> Der erste Wert bestimmt die Schrittweite und der zweite die Geschwindigkeit. Würde mich über weitere Hilfe sehr freuen. Gruß

Searcher
01.11.2012, 10:12
Na prima!
Als erstes muß ich sagen, daß mir etwas unwohl dabei ist, den Simulator zur Steuerung von Isel zu nehmen. Der Simulator ist ja eigentlich nur zum Debuggen von µC Programmen gedacht. Mit dem Steuern per BASCOM hat Dein Professor wahrscheinlich eher an einen µC gedacht, dessen Programm mit BASCOM erstellt wurde :confused:


Und wie geht es nun weiter? Wie setze ich die befhele ab das er Punkte anfährt?
Ab jetzt führt wohl kein Weg mehr dran vorbei, BASCOM zu lernen :(

Kurz noch das Beispiel für den Achsbefehl, wie ich denke, daß es funktionieren könnte, kenne aber natürlich nicht das Protokoll zu Isel:


$regfile = "m88def.dat" 'Für ATMega88 Mikrokontroller
$framesize = 32
$swstack = 32
$hwstack = 34
$crystal = 8000000
$baud = 19200 'Baud Rate ( 8,N,1 ist default - flow control=NONE)

Dim A As String * 1
Print "@01"
A = Waitkey()
'Print A 'auskommentiert, da A wieder zum Isel geschickt würde
Print "@0a 5000,10000" 'Befehl zum Achse positionieren
A = Waitkey() 'für Quittung? ein Zeichen? vom Isel
Print A 'Anzeige der Quittung (geht aber auch wieder zum Isel zurück! )
End


Für die Kommunikation über RS232 gibt es Monitorprogramme für den PC um den Datenaustauch "abzuhören". Sehr hilfreich um zu sehen, was da wirklich hin und her geht. Früher gab es mal "portmon" von sysinternals. Mit dem Neuen http://www.netzwelt.de/download/6805-portmon.html hab ich noch nicht gearbeitet. Weis auch nicht, ob das mit USB-Port läuft.

Gruß
Searcher

Iselpeter
01.11.2012, 10:32
Ok super. Ich hatte alleine schon so probiert und er bewegt sich mit den befehlen und ich kann auch die referenzfahrt absolvieren wie es sein soll. Er soll an den verschiedenen Punkten so ca 30sec verharren damit ich an meiner messaparatur werte abnhemen kann und dann im porgramm weiter gehen und zum nächsten punkt gehen. macht man das am besten mit ner schleife? oder gibts da n befehl wo ich sagen kann wielange er an einem bestimmten befehl verharren soll? Ein lieben dank schonmal an searcher für die unterstützung.

Searcher
01.11.2012, 11:09
Er soll an den verschiedenen Punkten so ca 30sec verharren damit ich an meiner messaparatur werte abnhemen kann und dann im porgramm weiter gehen und zum nächsten punkt gehen. macht man das am besten mit ner schleife? oder gibts da n befehl wo ich sagen kann wielange er an einem bestimmten befehl verharren soll?


Da fängt das Problem mit dem Simulator schon an. Wenn das Programm auf dem µC läuft, könnte man einfach "wait 30" für eine Wartezeit von 30 Sekunden schreiben. Im Simulator wird die Zeit aber sehr anders sein, abhängig vom PC und dessen Geschwindigkeit. Da könnte Ausprobieren helfen. Mit kurzen Zeiten beginnen, da der Ablauf "ewig" dauert. Es gibt noch waitms mit Angabe von Millisekunden und waitus.

Im µC würde man idealerweise statt wait die Timer zum Abmessen von Zeiten zu nehmen. Timer funktionieren im Simulator jedoch noch problematischer und langsamer :( - nach meinem Wissensstand im Simulator nicht für Deinen Zweck zu gebrauchen :confused:

Aber vielleicht gibt es ja einen Befehl für Isel, der ihn anweist mal eine Pause einzulegen und wenn die Pause fertig ist eine Quittung gibt. Dann kann man auf die Pauseende Quittung warten.

waitkey wartet nur auf ein Zeichen, egal was. Zum Testen, ob es die Richtige ist kann man Abfragen in/mit Schleifen verwenden und entsprechen reagieren. Ob waitkey überhaupt das Richtige ist, hängt davon ab, was Isel sendet. Es gibt zB auch Input und anderes. Die sind sogar noch konfigurierbar, ob CR/LF oder nur LF etc an der Message dran hängt -> BASCOM-Hilfe

Gruß
Searcher

Iselpeter
01.11.2012, 13:49
ok ja ich bin gerade am probieren mit dem wait aber wie du schon sagtest gestaltet sich das mehr als schwierig. aber ich werde mal schaeun ob ich es so hingebastelt bekomme das es für meine zwecke reicht. Gibt es vllt auch sowas das ich manuell das so einrichte das ich enter mache das er bei den anwendungen wo er stehen bleiben soll dann er weitergeht wenn er den cariage return bekommen hat oder auch irgend eine andere taste?

Searcher
01.11.2012, 14:58
Also echt :-) Du läst nicht locker. ...und ich muß auch immer noch antworten :-)
Viel weis ich nu nich mehr. Wenn ich mich aber richtig erinnere, kann man den Cursor im UART0 Fenster plazieren und eine Eingabe machen, mit Enter abschließen. Das wird dann rausgeschickt. Wie Du das aber anwenden kannst ??? Da geht bestimmt noch was, Ausprobieren! Ich bin ausgesaugt :-)

PS: Wenn Du einen zweiten PC hast oder einen PC mit zwei RS232 könntest Du mit Nullmodemkabel eine Verbindung von BASCOM zu einem Terminalprogramm machen und Testen. Terminalprogramm, daß auch nicht druckbare Zeichen wie CR darstellen kann.

Gruß
Searcher

Iselpeter
02.11.2012, 08:54
OK gut. Dann sag ich schonmal danke für deine Hilfe und ich werde mal probieren es hinzubekommen. =)