Hi,
vielleicht finden sich ein paar Leute die zusammen so eine kleine Anwendung in C# programmieren wollen. So alls OpenSource
Gruß Paulaner
Beiträge von ASK_ROBOTER
-
-
Hallo GreenH,
ich kenne auch keine Möglichkeit die Kommastellen bei Robtargets zu begrenzen aber mit einem kleinem PC-Programm wäre das möglich. Mit C# und dem Framework sollte das machbar sein.Bevor du das Programm vom Roboter in dein Offlinesystem einspielst müßten die gewünschten Module mit den Robtargets und Werkobjekte durch ein anderes Programm gekürtzt werden.
Gruß Paulaner -
Hallo rmac
dein Vorschlag sieht nach weniger Arbeit aus.
Mit den 16 Zeichen: es können jetzt auch Signale verwendet werden die mehr als 16 besitzen.
Oder ist das von der Softwareversion abhängig?
Gruß Paulaner -
Hallo xyz,
keine Ahnung ob das die Lösung ist aber ändere mal die WAIT FOR Anweisung inWAIT FOR ENDWERT <= INK_GEB_ANTR_H * 256 + INK_GEB_ANTR_L
es könnte ja sein das der aktuelle Wert von deinem Geber nicht 100%tig gleich dem Endwert ist.
Mit dem <= (größer gleich) Vergleich ist auch der Wartebefehl erfüllt wenn der aktuelle Wert größer als der Endwert ist.
Erholsames Wochenende
Gruß Paulaner -
Hallo MoinMoin,
für diese Meldung brauchst du nicht unbedingt einen zweiten Task.
Du kannst auch einen Zeitlichen Interrupt erzeugen der z.B. alle 2 Sekunden aufgerufen wird und den Override auf 0% prüft. Und gegebenenfalls ein Signal an die SPS sendet.1: Ein Signal in der IO.sys deklarieren.
-Name "doOverride0Prozent" -SignalType "DO" -Unit "PB_Adapter" -UnitMap "19"
2: Einen Zeitinterrupt und Variablen im Modul erzeugen
!zyklicher interrupt für den override 0% zu senden
LOCAL VAR intnum inOverRide;
!zyklicher interrupt wird alle 1000ms aufgerufen
LOCAL PERS num nITimer:=1.0;3: Ein Programm zum Bekantgeben und Initialisieren des Interrupts
CheckOverRide() ist das verknüpfte Programm (Trap) zu dem InterruptLOCAL PROC InitInterrupts()
!timerinterrupt für override zu senden
IDelete inOverRide;
CONNECT inOverRide WITH CheckOverRide;
ITimer nITimer,inOverRide;
ISleep inOverRide;
ENDPROC3: Das Programm (Trap) das aufgerufen werden soll
TRAP CheckOverRide
IF CSpeedOverride()=0 THEN
Set doOverride0Prozent;
ELSE
Reset doOverride0Prozent;
ENDIF
RETURN;
ENDTRAP4: So! Das ganze muß ja nur in Automatikbetrieb laufen. Im Handmodus kannst du den Interrupt deaktivieren. Dann gibst es noch zwei Programme die den Interrupt steuern. Diese Programme mußt du mit Events verknüpfen.
In der SYS.cfg
CAB_EXEC_HOOKS:-Routine "RestartTrapSys" -Shelf "START" -Task "T_ROB1"
-Routine "RestartTrapSys" -Shelf "RESTART" -Task "T_ROB1"
-Routine "SleepTrapSys" -Shelf "STOP" -Task "T_ROB1"
PROC RestartTrapSys()
InitInterrupts;
!zyklischen interrupt für den overridestatus zu senden
IF OpMode()=OP_AUTO IWatch inOverRide;
RETURN;
ENDPROCPROC SleepTrapSys()
!zyklischen interrupt für den overridestatus zu senden
ISleep inOverRide;
RETURN;
ENDPROCAlso bei mir funktioniert das Ganze ohne Probleme. Manchmal werden noch Fehlermeldungen mit der Interrupt-Warteschlange mitgeloggt aber die sind halb so wild
Wenn der Roboter sich in Automatik befindet und wird von der SPS (oder Manuell) gestartet wird das Programm " RestartTrapSys" abgearbeitet. Der Interrupt wird aktiviert.
Wenn das Programm gestoppt wird, wird das Programm "SleepTrapSys" abgearbeitet. Der Interrupt wird deaktiviert.
Viel Spaß beim programmieren
-
Hallo XYZ und auch ein Hallo an die anderen,
hast du schon was programmieren können?
hier noch eine Lösung wie man das Ganze machen kann.
Irgendwo mußt du das Programm für deine beide Motoren aufrufen. Wie schon geschrieben kannst du das im SUBMIT Interpreter machen oder du programmierst einen Interrupt der über einen Timer ausgelöst wird.
Beispiel:
Im Programmkopf in deinem Hauptrogramm mußt du den Interrupt deklarieren.;TAKTGENERATOR FÜR REGELUNG
INT Takt=-150GLOBAL INTERRUPT DECL 1 WHEN $TIMER_FLAG[1]==TRUE DO PD_Regelung()
INTERRUPT OFF 1
$TIMER[1]=TaktBeim Start ist Timer_flag[1] false: weil negativer wert (takt=-150)
so jetzt kommt ein wenig programmcode
..
..
irgendwann wenn gewünscht (roboter ist bereit für seine arbeit) kannst du den Timer starten und den Interrupt aktivieren.INTERRUPT ON 1
$TIMER_STOP[1]=FALSEab diesem Zeitpunkt wird das Programm (PD_Regelung()) alle 150 ms aufgerufen. Den Taktgeber kann man natürlich anpassen.
wenn die Arbeit erledigt ist kannst du den Interrupt wieder deaktivieren.
INTERRUPT OFF 1
$TIMER_STOP[1]=TRUE
;Taktgeber wider mit Startwert initialisieren
$TIMER[1]=TaktDas Programm PD_Regelung kannst du in einer eingenen Datei schreiben.
Programmkopf und Programmende sollte so aussehen.
;===============================================
;PD_REGLER
;===============================================
GLOBAL DEF PD_Regelung()
;interrupt regelung unterbrechen
INTERRUPT OFF 1
;taktgeber init
$TIMER_STOP[1]=TRUE
$TIMER[1]=Takt;==============
;hier kommt dein code für die regelung rein
;==============;interrupt regelung aktivieren
INTERRUPT ON 1
$TIMER_STOP[1]=FALSE
ENDSo und jetzt mußt du (nur ) noch die Regelung schreiben. Leider habe ich in KRL noch keine Regelung programmiert. Aber ich füge mal ein PD-Regler in C ein. Das ganze sollte dann in KRL umgesetzt werden. Ich hoffe das es ein wenig hilft
Also die Regelung ist für eine kleine Roboterplattform mit zwei Motoren links/rechts. Mit dieser Regelung kann das Teil vor/zurück und Kurven fahren. m pro sekunde und radiaten pro sekunden.
Das Programm mußt du für deinen Bedarf kürzen. Schau dir Speedsystem() an. -
Hallo Forummitglieder,
danke noch mal für die verschiedenen Lösungswege.Genau das habe ich gesucht: MMC_REAL_ROUTINE
Werde das gleich mal einbinden.
Noch eine Frage: Wo findet man diesen Parameternamen in der Doku? In der aktuellen Doku habe ich diesen Parameter nicht gefunden.
Thanks a lot
Paulaner -
Moin Moin,
diese Filtereinstellung habe ich nicht gemeint. Ich möchte gerne ohne diesen Filter die Anzahl der Programme reduzieren. Am besten nur die Anzeigen lassen die das Bedienpersonal benutzen darf.
Mit einem Übergabeparameter könnte man das machen, wäre aber nur eine Alternative.
Bei den Flex-Pedant Einstellungen habe ich irgendwas mit "geschützen Funktionen ...." und "nur warnung bei Zugriff" gelesen!
Kann man über RobotStudio Online diese Einstellungen durchführenBis dann Paulner
-
Hallo Zusammen,
gibt es eine Möglichkeit bei der IRC_5 Steuerung die Auswahl der Routinen zu begrenzen?
Über das Menü Test --> PZ auf Routine wird eine Auswahl aller Aufruffähigen Programmen angezeigt. Kann man für diese Auswahl, Programme angeben die nicht angezeigt werden sollen? Wenn Ja: Wo denn?
Bei vielen Programmen ist es ein wenig nervig das entsprechende Programm zu suchen.
mfg Paulaner -
Servus Robomann,
wie muß man sich diesen Greifer und die Sensoren den vorstellen?
Fährst du nur eine Position an und die Sensoren liefern dir Werte oder muß der Roboter mehrere Positionen an der Palette anfahren?
Gruß Paulaner -
Hallo Freidenker26,
willst du den TCP Speed über ein Bussystem übertragen?
Für dieses Problem mußt du nur ein Analogessignal das auf der entsprechende Unit angelegt ist erzeugen.
z.b. so:-Name "giKameraWinkel" -SignalType "AI" -Unit "profi" -UnitMap "80-95"\
-MaxPhys 32767 -MaxBitVal 32767 -MinPhys -32767 -MinBitVal -32767Ok! Das ist ein Analogeingang aber das Funktioniert auch mit Ausgängen.
Mit 16 Bits kanst du einen Wert von -32767 bis +32767 darstellen. Mit einigen änderungen kannst du dein Signal auf dein Wünsche anpassen.Dieses Signal mußt du dann noch mit dem TCP-Speed Ereignis verbinden.
Viel Erfolg. -
Hallo Noob,
ja da gibt es schon was. :ylsuper:
Ich selbst habe es noch nicht benutzt, deshalb gibt es keine Garantie darauf.
Bei den System-Ausgängen mußt du ein Ausgang hinzufügen. Dieses Signal kannst du mit einem bestimmten Ereignis verbinden. Wenn du Status drückst erscheint eine Auswahl der Ereignisse die man wählen kann. Ein Ereignis nennt sich TCP Speed. Das mußt du verwenden. Im Handbuch bei Systemparameter wird das ganze ausführlich beschrieben.
Funktioniert mit einem Analogausgang. Den mußt du bei "Signal Name" angeben.
Gruß Paul
-
Hallo Loubna,
hört sich interessant an was du da programmieren willst. Ich habe auch mal einen AMR in der Schule gebaut. Der hatte aber zum Glück nur zwei Räder. Als Controller habe ich einen Eyebot verwendet. Das Betriebssystem hatte schon einige Funktionen parat für Rotations- und Translationsbewegungen.
z.b. eine funktion mit zwei paramter vw(v,w) v=m/s w=radianten/sSchau mal da rein:
http://robotics.ee.uwa.edu.au/eyebot/
Bei Filme und Bilder.
Da gibt es ein Fahrzeug mit 4 Rädern dass solche Bewegungen ausführen kann! Glaube ich!
Denke mal das du beide Geschwindigkeitsregler verbinden muß. Muß eine Funktion werden.
Wie sehen denn die Räder aus?Was passiert eigentlich wenn ein Rad in der Fahrrichtung steht.Blockiert das nicht? -
Servus Rapsody,
deine Programmzeile ist wahrscheinlich über die Bedienoberfläsche programmiert worden. Und über das "Ändern"-Menü kannst du auch die Lineargeschwindigkeit einstellen.
Oder
In der Bas.src sind auch Standartfunktionen enthalten.Diese kannst du auch verwenden. Aber du mußt die Befehle im Editor eintippen.BAS(#VEL_CP,1.0)
Die Lineargeschwindigkeit beträgt 1,0 m/s. Gültig ab der nächsten Linearbewegung.
Oder
Direkt die Systemvariable "$VEL.CP" verwenden.$VEL.CP=0.5
Die Lineargeschwindigkeit beträgt 0,5 m/s. Gültig ab der nächsten Linearbewegung.
Hoffe ich konnte dir irgendwie helfen.
-
Hallo Robotic74,
so der Bus läuft! Hat ein wenig gedauert aber das ist normal wenn man mit neuer Software arbeitet. Der Grund war die internen Slotsbelegung von der ET200X. Die Hotline von Siemens hat mich auf die richtige Spur gebracht. Die Slots 1 bis 4 werden schon der ET200X verwendet erst danach also bei Slot 5 dürfen die Erweiterungsmodule eingefügt werden.
Anbei zwei Bilder wie die Konfiguration mit der Softing-Software aussehen soll.
-
Hallo robotic74,
ich bin genauso wie du es schreibst vorgegangen. Leider ohne Erfolg.
Die Hardware wäre:
1 ET200x Modul 141-1BF12-0xB0
2 8xDI 141-1BF31-0xA0
3 8xDI 141-1BF31-0xA0
4 4xDO 141-1BD40-0xA0
5 4xDO 141-1BD40-0xA0
die GSD-Datei habe ich bei Siemens runtergeladen.
Ich glaube daß ich irgendwas mit der Softingsoftware falsch mache. Arbeite jetzt das erste mal damit!
Bei der Hilfedatei von Softing steht geschrieben das man jeweils für eine Baugruppe einen sogenannten Slot paramentrieren (hinzufügen) soll.
In der Doku von ABB über Profibus wird dieser Vorgang nicht so beschrieben. Diese Slots werden bei der Konfiguration nicht erwähnt.
Was ist jetzt hier richtig?
Die Adressen und der Pfad für die ini-Datei ist korrekt. -
Hallo,
ich habe einen IRC5 Roboter der mit einer Profibuskarte von der Firma Softing ausgestattet ist. Master/Slave Karte! An dem Masterkreis hängt eine ET200x drann. Damit steuert der Roboter seinen Greifer. Und jetzt brauche ich ein Beispiel oder ein Tip wie ich mit der Configurations-Software von Softing den Masterkreis zum laufen kriege. Vieleicht hat auch jemand eine CNF-Datei die ich mir anschauen kann.
Kann mir jemand da weiter helfen?
Bei den PDF-Dateien von ABB und Softing gibt es einige Unterschiede über die Konfiguration.
Bis dann.
:idea: