TIA SCL-Beispiel für Modbus RTU

Tom_PLC

Level-1
Beiträge
7
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo,

ich steuere und lese erfolgreich zwei Messkarten. Habe mit RS485 und ASCII angefangen und bin dann auf SCL übergegangen - immer noch RS485 und ASCII. Hardware ist eine S7-1212 mit CM1241.

Nun muss ich zwei Messkarten ansteuern und auslesen, die mit RS485 und Modbus RTU daherkommen. Die SPS soll als Master dienen.

Modbus habe ich mir beigebracht - die Steuerung der Messkarten funktioniert über den PC und Python wunderbar. Der Code und die GUI waren rasch umgesetzt.

Hat jemand evtl. SCL-Code für die SPS und Modbus-RTU-Kommunikation?

Jeder Schnippsel wäre hier hilfreich. Wenn die Kommunikation erstmal steht (Mobus_Comm_Load und Modbus_Master) sollte der Rest einfacher sein.

Ich finde im Internet nur KOP-Lösungen...



Viele Grüße,

Tom
 
Du kannst doch die KOP-Beispiele nutzen indem Du einfach den SCL-Editor(Baustein) öffnest und dann aus dem rechten Bausteinordner den Baustein in den Code reinziehst, dann sind die gleichen Parameter als wie in KOP(FUP) einzugeben, was ja nur noch abtippen wäre.
 
Kommunikation Modbus RTU als Slave S7 1500
Vielleicht helft es dir weiter.

Code:
  REGION Initialisieren Modbus Anbindung mit Modbus Comm LOAD   
    #Modbus_Comm_Load_Instance.MODE := 1;
    #"Initialisieren Modbus Load"(IN := "FirstScan",
                                  PT := t#5s);
    IF #"Initialisieren Modbus Load".Q THEN
        #Modbus_Comm_Load_Instance(REQ := true,
                                "PORT" :="Local~A101_CM_Modbus" ,
                                  BAUD := 9600,
                                PARITY := 0,
                               RESP_TO := 2000,
                                STATUS => #Status_Com_Load,
                                 MB_DB := #Modbus_Slave_Instance.MB_DB);
    END_IF;
END_REGION

REGION Kommunizieren mit Modbus Slave  
    #Modbus_Slave_Instance.HR_Start_Offset :=  16#12d;    // Startoffset Modbusregister auf Register 40301 (HEX vorgabe)
     #Modbus_Slave_Instance(MB_ADDR := 49,
                            STATUS => #Status_Slave,
                            MB_HOLD_REG := "Modbus_ABB_800xxA");
 END_REGION
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Nach etlichen Videos und mit einigen glücklichen Fügungen und der Hilfe hier - läuft das nun. Sogar die Umwandlung von 2 Words in ein Float klappt. Noch ein Gemisch aus SCL und KOP, aber wird schon, Hauptsache, die Kommunikation läuft.

Was ich nur nicht verstehe ist, warum nach dem Impuls des "FirstScan" die Modbus_RTU-Bibliothek im Loader den Done-Status permanent auf "False" lässt, so als wäre diese Komponente nicht geladen worden. Selbst wenn ich mit einer "Clock_0.5Hz" auf den REQ ziele , kommt nie Done = "True".
Muss man bei der S7-1200 die ältere Modbus-Bibliothek statt der neueren Modbus-RTU nehmen?

Viele Grüße,

Tom
 
Hast Du mal den Done mit einem SR verknüpft? Done sollte nur einen einzigen Zyklus true sein, eben einmal zur Ausführung.
 
Ich verstehe, quasi ich sehe das nicht, weil zu kurz da.

Nee, bei dem Video, das ich angesehen habe, wird einmal durchgefahren (wegen "FirstScan") und es bleibt auf "Done".
 
Nein nicht händisch.... Entweder wenn du die SPS von Run auf Stop schaltest geht der auf 0 oder wenn du neue Schnittstellen Parameter
überträgst. Der Done ist nur True wenn die Schnittstelle erfolgreich mit deinen Einstellungen initialisiert wurde.
 
Zurück
Oben