TIA Pushbenachrichtigung / Snap7 / ioBroker

Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo Wevin

welche mnemonik ist bei dir im Tia eingestellt? ( wir bei dir ein Eingang als I oder E im Programm bezeichnet?)
wenn als I bezeichnet wird bitte mal in den Einstellungen Mnemonik von International auf Deutsch stellen dann sollten deine Awl Fehler verschwinden.


Gruß Tia
 
ist NetPro in TIA v16 enthalten? Was ist eine "passive" Verbindung?
"NetPro" ist in TIA "Geräte & Netze"
Mit passive Verbindung ist gemeint: kein aktiver Verbindungsaufbau, in Eigenschaften der TCP-Verbindung > Besondere Verbindungseigenschaften
(in Deinem Bild der Eigenschaften ein Abschnitt höher)

Sieht nach einigen Fehler aus.
Bei meinem TIA V15.1 funktioniert der Import der awl-Quelle (ModbusTCP_Server_CP_HW.awl) problemlos und läßt sich direkt fehlerfrei übersetzen.
Schau mal nach der Einstellung der Mnemonic wie von Wincctia bereits erwähnt.

PS: Irgendwie interpretiert Dein TIA die Zeilenende-Zeichen (0x0A 0x0D) falsch (neue "Mode" in Windows 10 :roll:) und macht jeweils 2 Zeilenschaltungen draus.

Harald
 
"NetPro" ist in TIA "Geräte & Netze"
Mit passive Verbindung ist gemeint: kein aktiver Verbindungsaufbau, in Eigenschaften der TCP-Verbindung > Besondere Verbindungseigenschaften
(in Deinem Bild der Eigenschaften ein Abschnitt höher)

Dann passt des so, bei aktiver Verbindung ist nichts angewählt.
 
modbus_diag.jpg

Passt so?

Wie kann ich jetzt zB einer Adresse Werte zuweisen? Ich würde einfach gern mal zb der Adresse 0001 die Werte 2#10101010 zuweisen.
Ich hab es mal in den Register Baustein an Register 0 geschrieben. Online steht 16#AAAA drin. (Kann sein dass ich hier total falsch liege :? )

Ich kann nur einmal ReadData in Modbus Diag. ausführen, beim zweiten mal kommt ein Fehler dass kein Socket geöffnet werden konnte.

Hier scheint auch ein Fehler vorzuliegen:

receivce_error.jpg
 
Zuletzt bearbeitet:
Zuviel Werbung?
-> Hier kostenlos registrieren
Tja, das Janitza Tool baut die TCP-Verbindung nicht wieder ab und beschwert sich nachher, daß keine Verbindung mehr geht... Die CP343-1 können nur 1 Verbindung je Port. (Brauchst Du mehr Modbus-Verbindungen, dann müsstest Du mehr Verbindungen an mehr Ports projektieren und je Verbindung eine eigene Instanz des FB MODBUS_SRV aufrufen.)

Der Modbus Test Client müsste den TCP-Timeout abwarten, oder Dein SPS-Programm müsste nach einer Zeit ohne Datenverkehr die Verbindung abbauen. Ich habe das so gelöst, daß nach 30s ohne Modbus-Aufträge mit dem FC AG_CNTRL die Verbindung getrennt/zurückgesetzt wird. Siehe die Bilder und den Beispielcode (FUP). Siehe die Hilfe zu
FC10 AG_CNTRL aus der Bibliothek SIMATIC_NET_CP / CP_300
CMD = 3: CN_STATUS_ALL - all connections status
CMD = 2: CN_RESET - connection reset

Harald
 

Anhänge

  • FUP2.jpg
    FUP2.jpg
    120,1 KB · Aufrufe: 14
  • FUP1.jpg
    FUP1.jpg
    98,3 KB · Aufrufe: 16
  • FC_Modbus.awl.txt
    3,5 KB · Aufrufe: 4
Hier scheint auch ein Fehler vorzuliegen:

Anhang anzeigen 52302
F1 - Hilfe zu AG_RECV: ERROR STATUS 8186: Parameter ID ungültig.
Du hast den FB mit ungültiger Verbindungs-ID aufgerufen (0 ist falsch) und/oder die Verbindungs-Projektierung noch nicht in die CPU geladen. Vermutlich hat Deine projektierte TCP-Verbindung die ID 1

Harald
 
Zuletzt bearbeitet:
F1 - Hilfe zu AG_RECV: ERROR STATUS 8186: Parameter ID ungültig.
Du hast den FB mit ungültiger Verbindungs-ID aufgerufen (0 ist falsch) und/oder die Verbindungs-Projektierung noch nicht in die CPU geladen. Vermutlich hat Deine projektierte TCP-Verbindung die ID 1

Harald

Genau die ID hat gefehlt. Danke
Hatte ich vergessen zu parametrieren
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Sobald ich im Modbus Diag. auf [Read data] klicke geht die CPU in Störung

fehler.jpg

Was muss bei LADDR übergeben werden?
In der NetKonfig steht folgendes: W#16#0150
Probiert hab ich das schon, ändert nichts.

aufruf.jpg

Im Baustein wird zu Faus gesprungen. Das einzige was ausgeführt wird ist dass hier:

ausfuehrung.jpg
 
Was muss bei LADDR übergeben werden?
In der NetKonfig steht folgendes: W#16#0150
Probiert hab ich das schon, ändert nichts.
In Deinem Bild von der HW Konfig Deiner S7-300 steckt der CP343-1 auf dem Steckplatz 5, da hat er standardmäßig die E-Adresse 272 - das ist 16#0110. Vermutlich hast Du da nichts dran geändert? Siehe auch bei Deiner TCP-Verbindung "Eigenschaften > Lokale ID", da wird unter "Bausteinparameter" (für AG_SEND/AG_RECV/MODBUS_SRV/...) gezeigt, welche LADDR Du angeben musst. Siehe mein Bild.

Wenn es nach der Übergabe der korrekten LADDR immer noch zu CPU-Stop kommt, dann schau Dir im Diagnosepuffer die Details des Eintrags "Bereichslängenfehler beim Lesen" an. Vermutlich willst Du mit dem Modbus Test Client zu große Registernummern lesen, die auf höheren Adressen liegen als Dein Register-DB lang ist.

Harald
 

Anhänge

  • Verb_ID_LADDR.png
    Verb_ID_LADDR.png
    39,1 KB · Aufrufe: 11
Zuletzt bearbeitet:
In Deinem Bild von der HW Konfig Deiner S7-300 steckt der CP343-1 auf dem Steckplatz 5, da hat er standardmäßig die E-Adresse 272 - das ist 16#0110. Vermutlich hast Du da nichts dran geändert? Siehe auch bei Deiner TCP-Verbindung "Eigenschaften > Lokale ID", da wird unter "Bausteinparameter" (für AG_SEND/AG_RECV/MODBUS_SRV/...) gezeigt, welche LADDR Du angeben musst. Siehe mein Bild.

Da hatte ich W#16#0150 her. Die 343 sitzt auf Steckplatz 9.

Was genau ist mit E-Adressen gemeint?
Und bei der Modbus Diag. Client Address 250?
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Was genau ist mit E-Adressen gemeint?
Na die unter E/A-Adressen projektierte Eingangs-Anfangsadresse der Baugruppe, siehe auch in der Geräteübersicht die Spalte "E-Adresse"

Und bei der Modbus Diag. Client Address 250?
Das ist die bei Modbus RTU verwendete Modbus Device/Geräte/SlaveID/Slave-Adresse. Wird bei Modbus TCP üblicherweise nur bei Gateways verwendet, kann aber auch wie eine Submodul-Adressierung verwendet werden. Hier im FB MODBUS_SRV wird die Adresse nicht ausgewertet, sondern nur in der Antwort zurückgegeben (Netzwerk 3). Daher ist es egal, was da eingetragen wird, kann also z.B. auch 0 sein.

Der Janitza Modbus Test Client zeigt die empfangene Antwort in 4 verschiedenen Byte-Reihenfolge-Varianten an. Standardmäßig ist die erste Spalte "First Byte high First Word high" die korrekte Auswertung.

Harald
 

Anhänge

  • Modbus_Test.png
    Modbus_Test.png
    28,3 KB · Aufrufe: 20
Bei mir funktioniert es leider nicht, sobald ich auf ReadData gehe, geht die CPU in Störung.

Diagnosepuffer:
Code:
1 von 100; Ereignis-ID: 16# 4562
STOP durch  Programmierfehler (OB nicht geladen oder nicht möglich, bzw. kein FRB vorhanden ) 
Unterbrechungstelle im Anwenderprogramm:  Zyklisches Programm (OB 1)  
Prioritätsklasse:    1
FB-Nummer:     2
Bausteinadresse:    524 
Bisheriger Betriebszustand: RUN
Angeforderter Betriebszustand: STOP (intern)
interner Fehler
Kommendes Ereignis
27.04.2007 10:55:51.459
(Kodierung:  16#  45 62 FF 84 8E 70 01 01  00 02 02 0C 07 04 27 10  55 51 45 96)


2 von 100; Ereignis-ID: 16# 2522
Bereichslängenfehler beim Lesen 
Global -DB , Wortzugriff,  Zugriffsadresse:  38000
Angeforderter OB: Programmierfehler-OB (OB 121)
OB nicht vorhanden oder gesperrt oder nicht startbar im aktuellen Betriebszustand
interner Fehler
Kommendes Ereignis
27.04.2007 10:55:51.450
(Kodierung:  16#  25 22 FE 79 00 24 94 70  00 00 00 00 07 04 27 10  55 51 45 06)

Aufruf
aufruf.jpg

Netzwerk
nw1.jpg

nw3.jpg

nw2.jpg

nw4.jpg

Danke schon mal :)
 
Bei mir funktioniert es leider nicht, sobald ich auf ReadData gehe, geht die CPU in Störung.
Wenn es nach der Übergabe der korrekten LADDR immer noch zu CPU-Stop kommt, dann schau Dir im Diagnosepuffer die Details des Eintrags "Bereichslängenfehler beim Lesen" an. Vermutlich willst Du mit dem Modbus Test Client zu große Registernummern lesen, die auf höheren Adressen liegen als Dein Register-DB lang ist.
Warum fragst Du so große Register-Nummern ab (Register Adress)? Größer als Dein Register-DB lang ist! Für einen generellen Test sollten die untersten 10 .. 20 Register reichen.
"Bereichslängenfehler beim Lesen / Global -DB , Wortzugriff, Zugriffsadresse: 38000" bedeutet, daß Du auf das Modbus-Register 19000 zugreifen wolltest. Oder mach Deinen DB100 "Register" größer, z.B. "Register : Array[0..29999] OF WORD". Der FB MODBUS_SRV kontrolliert nicht ob die Register-Adresse größer als die Länge des Register-DB ist.

Harald
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Vielen Dank. Es läuft. Sorry mir fehlen da die Grundlagen zu Modbus und dem Testclient. Jetzt verstehe ich den Zusammenhang von der Register Address und dem Register DB.
 
Zurück
Oben