Kein Hardwarezugriff mit WAGO 750-841

Kagero
2006-09-14
2006-09-26
  • Kagero - 2006-09-14

    Hallo,

    ich möchte den Wago-Controller 750-841 mit CoDeSys programmieren, kann aber nichts an die Hardware (z.B. an ein Relais) ausgeben.

    An dem Controller sind eine Relaisklemme (517) und eine Busabschlussklemme (600) angeschlossen.

    Mein Programm:

    PROGRAM PLC_PRG

    VAR

    Relais AT %QX0.0:BOOL;
    

    END_VAR


    Relais:=TRUE;

    Im Onlinemodus ergibt sich folgendes Bild:

    0001 Relais (%QX0.0)=TRUE

    0002

    0003


    0001Relais:=TRUE; Relais=TRUE

    0002

    aber das Relais schaltet nicht. Setze ich einen Brakepoint auf 0002 ergibt sich folgendes Bild:

    0001 Relais (%QX0.0)=FALSE

    0002

    0003


    0001Relais:=TRUE; Relais=FALSE

    0002

    Wenn ich an Stelle von %QX0.0:Bool ein Wort (%QW0:WORD) verwende und dieses Word auf 65535 setze, erscheint beim Brakepoint auf 0002 die Zahl 65532.

    Ist %QX0.0 die richtige Adresse? Fehlt evtl. irgendwo eine Einstellung?

    Ich habe bisher mit Wago-IO-Pro 32 gearbeitet. In CoDeSys bin ich neu.

     
  • gnassel - 2006-09-14

    Hallo Kagero,

    wurde der Kontroller gestartet?

    Hast du unter Steuerungskonfiguration eine Hardwarekonfiguration erstellt?

    Dort kannst du den Ausgängen einen symbolischen Namen vergeben und im Onlinemodus den Ausgang auf TRUE setzen (zum Testen)

     
  • Kagero - 2006-09-15

    Der Controller wurde gestartet.

    Nach einem Klemmentausch können Daten von Input-Klemmen gelesen werden (z.B. 750-459 über %IW0 bis %IW3). Aber mit Output-Klemmen geht es nicht.

    Unter Steuerungskonfiguration habe ich keine Hardwarekonfiguration erstellt.

    Dort steht:

    Fieldbus Assignment

    Controller[FIX]

    Die Zeile Controller[FIX] kann ich nicht verändern. Meinen Controller kann ich nur unter "Zielsystemeinstellungen" oder beim Anlegen eines neuer Projektes auswählen. Mit einem Rechtsklick auf "Controller[FIX]" kann ich ein Modul anhängen. Dann erscheint eine neue Zeile: "Module[VAR]". Diese Zeile kann ich aber nicht bearbeiten, d.h. ich kann dem Programm nicht mitteilen was das für ein Modul ist. Auf diese Weise kann ich weitere Module einfügen. Aber wenn ich nicht einstellen kann, um welches Modul es sich handelt, ist das doch sinnlos.

     
  • Uwe - 2006-09-15

    Hallo Kagero

    du musst diese Module anhängen das ist schon ganz richtig auch wenn du nichts editeren kannst.

    Lediglich die Anzahl muss mit den tatsächlich gesteckten Modulen übereinstimmen (die Endklemme wird nicht mitgezählt).

    Auf einer der Registerkarten rechts kann man einstellen wem das jeweilge Modul gehört (dem Feldbus oder der SPS).

    Bei Inputs ist das egal können halt beide sehen.

    Bei Ausgängen darf nur einer schreiben entweder der Feldbus oder die SPS. Daher muss das evtl. konfiguriert werden.

    Default müsste aber alles der SPS gehören.

    Also nur die Anzahl deiner Module anhängen und dann sollte es gehen.

    In neueren Versionen des Targets kannst du noch exakt die Module auswählen die du hast.

    Scheinbar hast du aber noch eine ältere Version.

    Sollte aber trotzdem gehen.

    Uwe

     
  • Kagero - 2006-09-15

    Es funktioniert! Ich habe es gleich mit einem größeren Aufbau von 7 Modulen getestet (war grad aufgebaut). Also habe ich demnach auch 7 Module in der Steuerungskonfiguration angehängt und der Ausgang läßt sich beschreiben! In Wago-IO-Pro 32 mit Controller 750-842 war das nicht nötig.

    Vielen Dank!

     
  • Kagero - 2006-09-20

    Mit dieser Änderung funkioniert der Zugriff auf die Ausgänge über die MBT.DLL (vom PC) nicht mehr. Erst wenn der Modulparameter PAAssignment von "PLC" auf "fieldbus1" umgestellt wird, ist wieder ein Zugriff über die DLL möglich.(Wie Uwe schrieb: "Bei Ausgängen darf nur einer schreiben...").

    Kennt jemand eine Möglichkeit diese Umstellung PLC - fieldbus1 vom Programm aus zu steuern?

     
  • Uwe - 2006-09-21

    Eine Umschaltung des PAAsignment aus dem Steuerungsprogramm ist relativ kompliziert und unpraktisch.

    Man müsste hierzu dynamisch das Mapping in der Datei "\etc\EA-config.xml" ändern und anschl. einen Reset ausführen.

    Ich würde daher einen anderen Weg vorschlagen.

    Die Ausgangslage ist doch das einmal der Ausgang in der Steuerung berechnet wird und einmal über Ethernet via Modbus-TCP.

    Also schreibt man die Ausganginformation via Modbus in einen eigens hierfür vorgesehenen Bereich der Steuerung.

    z.B. Modbusadresse 768...1023 man findet diese Information in der Steuerung dann auf den Adressen %IW256 ... %IW511.

    Oder ab Modbusadresse 12288... die man dann in der Steuerung ab %MW0... findet.

    Und nun kann die Steuerung entscheiden welche Information tatsächlich an den Ausgang geht.

    Die in der Steuerung berechnete oder die vom Modbus.

    Uwe

     
  • Kagero - 2006-09-22

    Diese Vorgehensweise würde das Problem lösen. Leider ist es mir mit der MBT.DLL bisher nicht gelungen diese Speicherbereiche zu beschreiben. Beschreibbar ist der Bereich von %QW0 bis %QW511. Allerdings mit der Einschränkung, dass nur dort geschrieben werden kann wo auch ein Modul dahinter steht für das Modul der Parameter PAAssignment auf "fieldbus1" gesetzt ist.

    Wenn ich z.B. nur ein Modul mit 2 Bit breitem Ausgang habe die beide auf 0 stehen und ich schreibe über MBT.DLL das Wort 15 so wird daraus eine 3. Schreibe ich an die gleiche Stelle über CoDeSys das Wort 15 (wieder von 0 ausgehend) so wird daraus eine 12. CoDeSys kann an QW-Stellen schreiben, hinter denen kein Modul steht.

    Das Erhöhen der Modulanzahl in der Steuerungskonfiguration von CoDeSys auf mehr Module als angeschlossen sind (mit PAAssignment="fieldbus1"), brachte keine Änderungen.

    Kann der %QW-Bereich hinter denen kein Modul steht auf PAAssignment="fieldbus1" gesetzt werden, so dass die DLL den Zugriff bekommt? Das muss ja Dank des Vorschlages von Uwe nicht aus dem Steuerungsprogramm heraus sein. Könnte dazu die von Uwe genannte Datei "\etc\EA-config.xml" verwendet werden? Wo ist sie zu finden?

     
  • Uwe - 2006-09-22

    Ich bin mir eigentlich ziemlich sicher das die MBT.dll auch andere Adressen beschreiben kann.

    Wenn du der MBTWriteRegisters die Startadresse 768 übergibst dann findest du diese Information in der PLC auf der Adresse %IW256.

    Du schreibst bei dieser Adresse also in einen Input der PLC nicht auf einen Ausgang da die Information vom PC an die PLC bei der PLC eine Eingangsinformation ist.

    Auch die Adresse 12288 (funktioniert eigentlich mit der MBT.dll. Du findest diese Information dann im Merkerbereich ab Adresse %MW0.

    In welcher Umgebung / Sprache hast du die MBT.dll eingebunden ?

    Bekommst du eine Fehlermeldung wenn du versuchst auf diese Adressen zu schreiben ?

    Die Modulanzahl in der Steuerungskonfiguration muss genau zu den tatsächlich gesteckten Modulen passen.

    Die EA-config.xml wird von der Steuerungskonfiguration erzeugt und automatisch beim

    download eines PLC-Prog. in den Controller im Filesystem des Controllers abgelegt.

    Uwe

     
  • Kagero - 2006-09-25

    Vielen Dank Uwe. Dank Deiner Angaben kann ich nun auch auf die oben genannten Adressbereiche schreiben:

    Bereich 1:

    768 --> %IW256 (untere Grenze des Bereichs)

    1023 --> %IW511 (obere Grenze des Bereichs)

    Bereich 2:

    12288 --> %MW0 (untere Grenze des Bereichs)

    16383 --> %MW4095 (obere Grenze des Bereichs)

    Das Schreiben funktionierte wahrscheinlich schon sofort nach Uwes Beitrag mit den Adressangaben, aber die Anzeige ob und was geschrieben wurde ist fehlerhaft. Dieser Fehler besteht noch:

    Zur Anzeige benutze ich ein Programm das ich in den Controller lade. Dieses Programm hat u.a. in jeder Zeile ein Inputdatenwort (%IW..).

    Auszug aus dem Programm:

    K:=%IW252;

    K:=%IW253;

    K:=%IW254;

    K:=%IW255;

    K:=%IW256;

    K:=%IW257;

    K:=%IW258;

    K:=%IW259;

    K:=%IW260;

    Im Onlinemodus im Programm CoDeSys kann man dann ja den Inhalt der %IW.. sehen. So dachte ich. Der Inhalt der %IW.. ist aber vom Bildscrollen abhängig, also davon welche %IW.. an oberster Stelle auf dem Bildschirm angezeigt werden. Sowie %IW255 und kleiner auf dem Bildschirm zu sehen sind, werden alle Inhalte, also auch dort wo ich vom PC geschrieben habe (z.B. %IW270) als 0 angezeigt. Scrolle ich wieder zurück, so dass der oberste sichtbare Wert %IW256 oder größer ist, so werden wieder die geschriebenen Inhalte angezeigt. Ich weiß nicht wiso sich CoDeSys so verhält.

    Ich habe die MBT.DLL in Delphi eingebunden. Einen Fehlerwert (Rückgabe der MBTWriteRegisters) erhalte ich in den genannten Adressbereichen nicht.

    Sollte man darauf achten, nicht zu oft in den Merkerbereich (%M0 - %M4095) zu schreiben? Das ist ja besonderer Speicher, der seine Information nach einem Stromausfall nicht verliert. Hat dieser Speicher nur eine begrenzte Anzahl von Schreibzyklen?

     
  • Uwe - 2006-09-26

    Der Merkerbereich liegt im Novram (genauso wie RETAIN-Variable). Dieses Novram ist ein SRam das beim Absinken der Versorgungsspannung in ein EEprom gesichert wird. Die Lebensdauer liegt bei ca. 1 Million Sicherungszyklen. Da diese Sicherungszyklen nur beim Absinken der Versorgungsspannung gefahren werden sollte die Benutzung dieses Speicherbereichs unkritisch sein.

    Uwe

     
  • Kagero - 2006-09-26

    Danke Uwe!

    Du hast mir sehr geholfen.

    Kagero

     

Log in to post a comment.