Anfängerproblem

willi1

Level-1
Beiträge
2
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
Moin,
Ich beschäftige mich seit kurzem (ca. 4 Wochen) mit der SPS Programmierung über Codesys.
Ich habe jetzt folgendes Problem, meine SPS (Moeller XC 201) soll über Modbus TCP mit einer anderen Steuerung kommunizieren. Die Zweite simuliere ich derzeit mit dem ModbusPoll, während meine SPS den Slave darstellt.
Meine SPS gibt über eine zusätzliche Analogkarte einen Analogwert aus, den ich fürs erste mit Modbus auslesen möchte. Das Funktioniert mit meiner derzeitigen Implementierung auch, aber ich glaube nicht, das die Kommunikation über Modbus so gedacht war, wie ich es umgesetzt habe.
Leider habe ich bisher noch nichts gefunden was mir weitergeholfen hat. Daher setze ich jetzt auf eure Hilfe.

Ich bedanke mich schon mal im voraus.
 

Anhänge

  • Globals.jpg
    Globals.jpg
    222,2 KB · Aufrufe: 52
  • PLC_PROG2.jpg
    PLC_PROG2.jpg
    184,4 KB · Aufrufe: 59
  • TCPSlave1.jpg
    TCPSlave1.jpg
    216,2 KB · Aufrufe: 52
  • TCPSlave2.jpg
    TCPSlave2.jpg
    257,4 KB · Aufrufe: 74
  • TCPSlave3.jpg
    TCPSlave3.jpg
    245,7 KB · Aufrufe: 48
Moinsen Willi,

dafür das du gerade 4 Wochen dabei bist, sieht dein Programm schon sehr gekonnt aus, von daher gehe ich mal davon aus, dass du andersartige Programmiererfahrung hast.

Da du keine direkte Frage formuliert hast, was dein Problem ist, schreibe ich dir einfach was ich vermute.

Ich Empfehle dir die Kommunikation in eine eigene Task zu verlagern, die unabhängig von deiner Main-Task läuft.

Ich sehe, dass du deine Umwandlungsfunktionen zwischen Strom und Spannung als FB deklariert sind, dafür sind Funktionen ausreichend, die brauchst du dann auch nicht instanziieren.

Was sind in dem riesigen analog und digital Array für Daten?

Um dir besser helfen zu können, ist es sinnvoll wenn du genaue Fragen stellst.

MFG
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Danke für die Antwort.

Ich hatte irgendwo eine Liste mit Modbus Adressen gefunden und diese als Offset eingesetzt und deshalb sind die Arrays so riesig. Und genau da ist auch das Problem den das mit den Adressen habe ich noch nicht wirklich Verstanden.
Im Beispiel das ich habe sind die auch deutlich kleiner, allerdings lande ich da halt natürlich immer ausserhalb des Arrays mit einem großen Offset. Zum Beispiel geht der Merkerbereich bei, glaube ich, 12288 los.

MFG
 
Zuletzt bearbeitet:
Den Offset kannst du als Index für den Speicherbereich von deinem Modbus Slave sehen.
Du hast ja drei Parameter mit denen du pollst.
1. function code, der gibt an was du tun willst, z.B. einzelnes Bit auslesen, ganzes Byte schreiben, usw.. Der function code ist bei modbus genormt und überall gleich.
2. offset, abhängig vom function code darfst du einen gewissen Speicherbereich lesen bzw. schreiben, mit dem offset legst du fest, bei welcher Speicherzelle du anfängst
3. count, dieser wert gibt an wieviele bits/bytes du lesen/schreiben willst
Und dein Array muss nur so groß sein, so viele Werte wie du ausliest. Und das Array indizierst du mit einem eigenen Index. Ich empfehle dir, noch ein bisschen mehr über Modbus in Erfahrung zu bringen.
 
Zurück
Oben