Programmierung von Motor mit Codesys

cedric
2008-12-08
2008-12-09
  • cedric - 2008-12-08

    Hallo,

    Ich mache ein Studienarbeit über den CAN Bus, aber leider bin ich mit Codesys ein Neuling.

    Ich habe folgendes Problem: ich soll ein Motor mit Codesys steuern. Ich soll verschiedene CAN Botschaften zum Motor senden, um diesen zu steuern (natürlich steht der Motor in keine Bibliothek)

    Diese CAN Botschaften sehen so aus: 2F4 05 11 20 10 00 00 (zum Beispiel). Einige von diesen Botschaften beschreiben den Motorzustand und den anderen sind Befehle zur Motorsteuerung.

    Wie soll ich mit Codesys tun, damit der Motor diese Botschaften bekommt, und gut interpretiert?

    Vielen Dank für ihre Hilfe

     
  • controllfreak - 2008-12-08

    Ich denke Du solltest Dich zuerst mit dem CAN-Bus vertraut machen und Dir dann mit der Can-Lib einen Treiber-Bautein für den Motor (FU!?) bauen. Was fertiges wirst Du wohl nicht finden

     
  • cedric - 2008-12-08

    Vielen Dank für deine Antwort. "was fertiges" möchte ich aber nicht finden. Ich dachte nur, kann man das Senden von Botschaften programmieren.

    Ich denke mit Funktion Block kann ich ein bestimmtes Strom, zum beispiel zu Motor, senden (das weiss ich machen mit Funktion Block).

    Aber ich möchte kein Strom sondern ein bestimmtes Botschaft zu Motor senden. Denkst du, ich kann das auch mit Funktion Block machen?

    oder kann ich ein Programm bauen wie:

    %QX0.0='110 0100 001 001 0000' (wenn %QX0.0 die Adresse von Motor ist, und 110 0100 001 001 0000 mein Botschaft)

    Könnte das auch funktionnieren?

     
  • Pitsch52 - 2008-12-08

    Hallo

    Ich frage mich, was ein Motor mit so einer Botschaft anfangen soll?:?:

    So wie ich das sehe, hatt dieser Motor(sehr wahrscheinlich ein Servo-Motor) eine Steuerung. Dieser Steuerung kannst Du solche Botschaften übermitteln. Diese Steuerung ermittelt dann aus der Botschaft, die Drehrichtung, den Verfahrweg, Geschwindikeit, Start- und Endposition etc.

    Das übermitteln der Botschaft, geht vielleicht am einfachsten über einen Seriell(RS232) Baustein. Das kannst Du dann bestimmt mit Codesys programmieren.

    Mit freundlichen Grüssen! Pitsch

     
  • Erik Böhm - 2008-12-08

    Moin

    Ich vermute mal, der Motor hat einen integrierten Regler mit CAN-Controller (z.B. M-Drive oder IMS).

    Es gibt prinzipiell 2 Möglichkeiten, die auch kombiniert werden können.

    Kommunikation per SDO (ServiceDataObject) und PDO (Process DataObject).

    SDO's werden einzeln 'von Hand' versendet, per CanOpenSendSDO (FB) aus der 3S_CanOpenManager.lib oder einer CanLib deines Steuerungsherstellers.

    PDO's werden vom CanMaster zyklisch übertragen und werden über die Steuerungskonfiguration, bzw. ein EDS(ElectronicDataSheet)-File erzeugt und versendet/empfangen.

    In der Regel werden SDO's benutzt um den Motor zu konfigurieren. Also z.B. um Rampen, Ströme usw. einzustellen. PDO's übetragen dann die zyklischen Daten, wie Controllwort,SollPos / Statuswort,IstPos.

    Das mal nur fürs erste. Kannst dich ja mal zu dem Thema irgendwo einlesen, denn das ist jemandem der sich gar nicht auskennt nicht in ein paar Sätzen erklärt...

    Falls du noch Fragen hast, trotzdem Fragen. Auf meine Antworten musst du aber evtl. ein wenig länger warten, ich bin grade auf der anderen Seite... (-6h)

    Gruss

    Erik

     
  • cedric - 2008-12-09

    Vielen Dank alle. Ich hab´schon einige Sachen besser verstanden.

    Ihr seid auch vollig richtig: mein Motor ist ein Servomotor mit CAN Schnittstelle ausgerüstet (auch mit Regler, und ich vermute mal mit CAN Controller ausgerüstet).

    Ich habe die Zustandbotschaften, und die Ansteuerbotschaften zur Verfügung.

    Zum Beispiel, eine typische Ansteuerbotschaft lautet:

    110 0100 YYYY DDDD1 DDDD2

    mit YYYY die Sollgröße

    0000 der Sollwert in Inkrementen

    DDDD1 DDDD2 Sollinkremente 16 Bit 2er Komplement Darstellung, High Byte zuerst, wenn Regler aktiviert.

    0001 Regelparameter

    DDDD1 0

    DDDD2 Bitweise Kodierung Regelbefehle

    000X XXXX Regler ein

    011X XXXX Motor Bremse wird von EST gesendet (wird bei SE n. benötigt)

    XXXX XXXY SE ein/aus

    Y=1 SE ein

    Y=0 SE aus, Motor frei

    000X XXYX

    Y=0 Regleralgorythmus 1 aktiv (nicht mehr unterstützt)

    Y=1 Regleralgorythmus 2 aktiv (wird von SE nicht ausgewertet)

    0002...FFFF wird nicht benutzt.

    Ich denke, ich werde diese Botschaft, wie du sagst: "von Hand" senden per CANopenSDO. Das soll reichen...mal sehen beim Test.

    Ich denke ich brauche nicht die Daten zyklisch zusenden. Was denkt ihr davon, bin ich falsch? Oder soll ich besser mit PDO´s handeln?

    Nochmals vielen Dank für die Erklärung.

    Gruß

     

Log in to post a comment.