# 750-880 Modbus Master TCP 750-341 Slave Codesys 2.3



## Erdberquark (22 Januar 2018)

Hallo alle zusammen,


ich versuche gerade meine SPS zu erweitern mittels Modbus.

Master 750-880 (inkl. Diverser I/Os)
Slave 750-341 (inkl. Diverser I/Os)

Leider finde ich irgendwie nicht die passende Anleitung wie ich die neuen Module Einbinde.

Die Verbindung zwischen Master und Slave steht. (siehe Bild)


Nun weiß ich leider nicht wie ich jetzt weiter machen muss / kann.

Ein Kurzer Tipp wäre super ;-)

Danke


Gruß

Stefan


----------



## Mavorkit (23 Januar 2018)

Hi Stefan,

du kannst im Prinzip die I/Os direkt ab Adresse 0 aufsteigend über Modbus ansprechen, nur die Adressierung beachten (Analog Input, Analog Output, Digital Input, Digital Output). Leider kenne ich den 750-341 direkt nicht. Wenn du darauf ein Programm aufspielen kannst, dann kannst du Theoretisch einfach eine Struktur des E/A Abbildes an deinen Slave schicken.

Achtung! Die direkte Adressierung von Ausgängen (schreibend) funktioniert nur wenn kein Programm auf dem Feldbuskoppler ist.

Gruß

Mavorkit


----------



## Erdberquark (23 Januar 2018)

Hi,

danke für deine Antwort.


Der 750-341 ist ein reiner Feldbus Koppler als kann ich da kein Programm aufspielen.

Die Reihenfolge der Module kann ich anpassen. War jetzt erst mal nur der Test auf dem Schreibtisch ;-)

Kannst du mir auch sagen wie ich die E/A ansprechen kann?

Ich habe keine Ahnung wie ich die auswählen muss.


----------



## Thruser (23 Januar 2018)

Hallo,



Erdberquark schrieb:


> Kannst du mir auch sagen wie ich die E/A ansprechen kann?
> 
> Ich habe keine Ahnung wie ich die auswählen muss.



schau Dir mal den Modbus Konfigurator an: https://www.wago.com/de/d/6500

Dazu findest Du dann auch noch einige Beiträge hier im Forum.

Gruß


----------



## Mavorkit (23 Januar 2018)

Hi Stefan,

die Reihenfolge der Module ist Relativ egal, die Adressierung wird immer wie von mir beschrieben durchgeführt, unabhängig von der Reihenfolge. Ich hab sowas bisher nur mit einem 750-880 gemacht und hier direkt die Adressen der Steuerungskonfiguration angesprochen. 

Vielleicht ist es in deinem Fall einfacher, mit dem Modbus Configurator die Schnittstelle zum Koppler einzustellen und die Hardwar hierüber suchen zu lassen?
Ressourcen => Steuerungskonfiguration => Modbus-Master => Rechtsklick auf Modbus-Master => Ethernet Schnittstelle einfügen => Rechtsklick auf die Schnittstelle => Modbus Slave hinzufügen => deinen 750-341 auswählen, Konfiguration einstellen und über Knoten Scannen müsste er die I/Os erkennen und du kannst sie wie gewohnt in der Steuerungskonfiguration benamen.

Bin mir allerdings nicht 100% sicher, kann es auch leider nicht probieren. Wenn du wo nicht weiter kommst meld dich einfach nochmal.

Gruß

Mavorkit


----------



## Erdberquark (23 Januar 2018)

@Mavorkit


Ich war mir eigentlich sicher da sich ein Bild bei meinem ersten Post angefügt hatten ;-)

Da sollte eigentlich raus hervorgehen das ich glaube die so eingebunden habe wie du beschrieben hast.


----------



## Thruser (23 Januar 2018)

Hallo,

wollte gerade neue Screenshots machen da habe ich auf dem Rechner noch alte dazu gefunden.  Schau Dir mal meinen Beitrag hier an: Modbus-Kommunikationsproblem

Da siehst Du die Konfiguration im Konfigurator, die taskkonfiguration (die mußte ich damals von Hand einstellen, keine Ahnung ob es immer noch so ist) und dann der Zugrif auf die Variable.

Sonst sieh Dir auch mal bei Wago den Anwendungshinweis a300003 an. Da sind verschiedene Methoden mit Beispielen aufgeführt.

Gruß


----------



## Erdberquark (24 Januar 2018)

Hallo,

ich habe mich jetzt ein wenig durch die Anleitungen gearbeitet und habe gemerkt, das ich einen Teil einfach überlesen habe ;-)

Also ich habe mir jetzt die Einstellungen generieren lassen.


Die Ausgänge werde auch irgendwie gesetzt so wie in Bild 4 zu sehen.

Ich muss jetzt nur noch wissen, wie ich das ganze übergebe oder so.
Denke da liegt aktuell mein Problem.

Oder seht ihr das anders.


----------



## Thruser (24 Januar 2018)

Hallo,

was meinst Du mit übergeben? So wie in Bild 3 ist die Übergabe schon richtig. Werden die Ausgänge nicht gesetzt? Dann zeige bitte einmal die Taskkonfiguration. Dort muß das Programm MBCFG_ModbusSlave regelmäßig aufgerufen werden. Sieh Dir dazu mal meinen verlinkten Beitrag oben an.

Gruß


----------



## Erdberquark (24 Januar 2018)

Hi,

ich habe das jetzt auch mal so erstellt.

Dachte es reicht wenn ich das einfach mit in dem PLC_PRG mit eintrage.

Hatte vorher in der Taskkonfiguration nichts drin.


bei mir schreibt der in den ModbusSlave Block immer noch was in die "()".


Leider hat sich aber nichts geändert


----------



## Thruser (24 Januar 2018)

Hallo,

die Parameter kommen durch den Haken bei 'Mit Argumenten' bei der Auswahl Programmaufruf. Den nimm mal raus. Klick da auf MBCFG_ModbusSlave und dann rechts auf die drei Punkte. Dann ist unten links die Checkbox.

Warum ist der Port des Slave eigentlich 44818? Normal ist 502.

Habe gerade mal ein Testprogramm versucht. Diesmal wurde der Task mit erstellt. Leider komme ich gerade nicht an meine Steuerung, um das noch einmal mit Hardware auszuprobieren.

Gruß

/EDIT: Sonst lass Dir mal den Wert von MBCFG_ModbusSlave.MBCFG_Error online anzeigen.


----------



## Erdberquark (25 Januar 2018)

Hi,


also habe den Port mal angepasst. Keine Ahnung warum der so bei mir war.

Wenn ich beim Task die Argumente weg mache habe ich da keine Klammern mehr stehen.
Muss ich beim Systemereignis was eintragen?


Habe ich den error so richtig ausgelesen?


----------



## Thruser (25 Januar 2018)

Hallo,

bei Systemereignis mußt Du eigentlich nichts eintragen.

Die Zuweisung ist falsch. Erstelle eine Temp Variable. Der weist Du dann MBCFG_ModbusSlave.Error zu.

Also unter var oben:

eTemp : WORD;

Im Code dann (hier jetzt in ST)
eTemp := MBCFG_ModbusSlave.Error;

in FUP (Ungefähr)
eTemp-------MBCFG_ModbusSlave.Error
/EDIT: Es muß natürlich anders rum sein:  MBCFG_ModbusSlave.Error-----eTemp
Ich mach einfach zu wenig mit FUP. Links ist die Quelle, rechts die Senke

Und dann online gehen. Nach dem hochladen natürlich.

Gruß


----------



## Erdberquark (27 Januar 2018)

Hi,


bin leider erst jetzt mal wieder am Rechner ;-)

Was war den an meiner Zuweisung falsch?


mein Test1 war als WORD definiert.


----------



## Mavorkit (27 Januar 2018)

Hi Erdberquark,

Deklaration stimmt, aber bei der Zuweisung in FUP hast du nicht das angegebene MBCFG_ModbusSlave.Error von Thruser stehen. Vielleicht liegt es daran?

Gruß

Mavorkit
​


----------



## Thruser (27 Januar 2018)

Hi,

Entschuldigung, ich war durch die FUP Darstellung verwirrt. Damit habe ich bei Codesys schon lange nicht mehr mit gearbeitet und auch nicht online.

Laut Fehlercode hast Du keine Verbindung zum Koppler


```
MBCFG_NO_ERROR                    := 0,
    MBCFG_START_UP                    := 16#FFFF, (* start up phase after power on *)

    (*--- Modbus Specification ----------------------------------------------------------*)
    MBCFG_ILLEGAL_FUNCTIONCODE        := 16#0001, (* FUNCTION code NOT supported     *)
    MBCFG_ILLEGAL_ADDRESS            := 16#0002,
    MBCFG_ILLEGAL_DATA                := 16#0003,
    MBCFG_SLAVE_DEVICE_FAILURE         := 16#0004,
    MBCFG_SLAVE_DEVICE_BUSY         := 16#0006,
    MBCFG_MEMORY_PARITY_ERROR         := 16#0008,
    MBCFG_GATEWAY_PATH_UNAVAILABLE     := 16#000A,
    (*-----------------------------------------------------------------------------------*)

       MBCFG_NO_SOCKET_AVAILABLE        := 16#0079,    (* no socket available             *)
    MBCFG_CAN_NOT_SEND_REQUEST        := 16#0080, (* can NOT send modbus request     *)

    MBCFG_NO_RESPONSE_RECEIVED        := 16#0081, (* No response received                                      *)
    MBCFG_EXTENDED_SLAVE_ERROR        := 16#0090, (* see the error entry inside modbus response struct          *)

    MBCFG_TCP_RTU_ERROR_0x95        := 16#0095, (* TCP/UDP   -> Socket was "gracefully closed" BY the server *)
                                                (* RTU/ASCII -> not allowed broadcast                          *)

    MBCFG_TCP_RTU_ERROR_0x96        := 16#0096, (* TCP/UDP   -> Server NOT available     *)
                                                (* RTU/ASCII -> crc error                *)

    MBCFG_ILLEGAL_PARAMETER            := 16#0097, (* parameter wWRITE_QUANTITY illegal FOR choosen FUNCTION code     *)
    MBCFG_ILLEGAL_RESPONSE            := 16#0098, (* response does NOT match TO the request (overrun)               *)
    MBCFG_TIMEOUT                    := 16#0099, (* response NOT received withhin the specified timeout              *)

    MBCFG_INVALID_BITSIZE            := 16#0100,    (* invalid bitsize at variable parameter in variable list             *)
    MBCFG_INVALID_STARTBIT            := 16#0200,    (* invalid startbit position at variable parameter in variable list *)
    MBCFG_INVALID_FC_BYTEORDER        := 16#0300    (* the byteorder is not allowed for this function code *)
```

Stimmt die IP Adresse?
Ist der Port aktiviert? Dazu mal mit dm Webbrowser auf den Koppler und die Daten unter Port ansehen, speziel Modbus TCP und Modbus UDP.

Ansonsten könnte man mal qmod master (https://sourceforge.net/projects/qmodmaster/) versuchen, ob man mit dem PC eine Verbindung bekommt. Dazu müßte man sich aber die rictigen Modbus Register raussuchen.

Gruß


----------



## Erdberquark (28 Januar 2018)

Hallo,


also auf das WEBinterface komme ich von beiden Geräten drauf.

Der Port für Modbus TCP ist mit 502 bei beiden hinterlegt.

In den Einstellungen, im Programm steht auch Port 502.


Es gibt noch eine Stelle wo ich mir mit der IP-Adresse nicht ganz sicher bin.


Es gibt Modbus-Ethernet Einstellungen und Service Einstellungen welche IP muss ich da eintragen jedes mal die von dem Modbus Slave??


----------



## Erdberquark (28 Januar 2018)

Hallo nochmal,

ich habe mich heute Nachmittag nochmal mit dem ganzen beschäftige ;-)

Ich hatte bei mir noch einen 750-880 in Reserve stehen und habe damit die Kommunikation getestet.


Dort hat auch alles super funktioniert.

Also habe ich in dem Hauptprogramm alles was Modus angeht gelöscht und neu eingetragen.

Jetzt sieht der Error Log für mich so aus der der gar nicht erst den Modbus Starten kann.

Muss ich was tun damit der Modbus Startet?


----------



## Thruser (28 Januar 2018)

Hi,

läuft denn der Rest des Programms?

Früher war das mal so, das PLC_PRG nur automatisch läuft, wenn es keinen weiteren Taks gibt. Bei Deiner Taskkonfiguration ist jetzt nur der eine Task zu sehen.

Sonst weiß ich jetzt auch nicht weiter.

Das ist das eine, ansonsten: Wie ist der Koppler mit dem Controller verbunden, über einen Switch oder direkt? Wenn direkt, hast Du da irgendetwas spezielles am Ethernetport eingestellt? Port disabled oder sniffer port?

Gruß


----------



## Erdberquark (28 Januar 2018)

Hi,

in dem PCL_PRG sind die anderen Taks ja eingetragen. 

Verbunden bin ich über Switch bzw. Router. Die Geräte stehen an verschiedenen orten ;-)

Die Verbindung zu den Geräten ist ja da nur werden die Sachen für den Modbus nicht richtig ausgeführt.


Mir Fehlt für den anderen 750-880 noch so eine Endplatte 750-600 ;-)
Die Bringe ich mir morgen von Arbeit noch mit.

Dann werde ich das nochmal genauer untersuchen warum der eine 750-880 ohne Programm also da läuft nur eine übergabe- über Modus drauf funktioniert und meine Gesamte Haussteuerung über Modbus nicht raus kriegt ;-)


----------



## Thruser (28 Januar 2018)

Hi,

die Frage ist, ob PLC_PRG immer als default Task abgearbeitet wird. Oben unter Beitrag #12 hast Du es ja noch als extra Task mit in der Konfiguration.

Aber es wird wohl abgearbeitet, da sonst im Haus nichts mehr laufen würde  

Es kann sein, das oben die Anzeige (#18) bei MBCFG_START_UP hängen bleibt, da Du den Debug Fokus auf den Test Task gesetzt hast (siehe eckige Klammern). Wenn man mit unterschiedlichen Tasks arbeitet muß man festlegen mit welchem Task man debuggen möchte (rechte Maustaste: Debug Task festlegen). Dann werden bei der Online Anzeige nur die festgelegten Task aktualisiert (für die Anzeige).

Gruß


----------



## Erdberquark (9 Februar 2018)

HI,

entschuldigt bitte die Späte Antwort.


War wie immer zu viel zu tun ;-)


Also ich habe den Debug Task nun mal geändert und alles neu eingespielt und nun geht ;-)


Besten Danke euch alle !!!!!


----------

