Modbus Kommunikationsfehler ADS-Fehlercode 6

mido420

Level-2
Beiträge
30
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo Leute,

Ich bin neu in der Welt der SPS und ich soll für mein Praktikum ein Programm schreiben, um E-Ladestationen zu verwalten.
Der erste Schritt in diese Richtung ist, den Gesamtstromverbrauch über eine janitza umg 96 pa mittels modbus tcp auszulesen.
Ich habe die Tc2_ModbusSrv Bibliothek eingebunden, die 3. Funktion (FB_MBReadRegs) eingebunden und habe den Server Konfigurator richtig konfiguriert.
Egal was ich mache oder ändere, die Funktion wirft einen Fehler, den TARGETPORTNOTFOUND Error.

Ich habe jede einzelne Internetseite die es auf dieser Welt gibt durchsucht und nichts gefunden.
Das ist mein erster Beitrag in irgendeinem Forum, entschuldigt die Unordnung.

Bitte helft mir!
 
Zuletzt bearbeitet:
Ist denn die TF6250 (Modbus TCP) überhaupt auf dem Zielsystem installiert, also nicht nur auf der Entwicklungsumgebung, dann kommt es nämlich auch zu der Fehlermeldung.
Zum Thema Installation schau mal hier im Infosys nach.
 
ich habe es schon herausgefunden, ich habe das bExecute, was dafür verantwortlich ist die Funktion auszuführen, ohne eine Bedingung willkürlich gesetzt, ich habe nun einen Timer mit Delay hinzugefügt und es funktioniert einwandfrei.

Nun das nächste Problem: Wie kann ich die Rohdaten umformen um meine Ströme zu bekommen?
 
Naja, da dürfte Dir das Handbuch helfen. Die Daten kommen ja in einem bestimmten Format rüber, WORD ist ja nur eine Ansammlung von Bits. Du musst jetzt im Handbuch nachsehen als was die Daten übertragen werden und das aus dem Word dann umwandeln.
Mal angenommen ein Wert wird als REAL übertragen, dann müsstest Du zwei Words nehmen und diese je nach Byteorder, an die richtige Stelle einer REAL-Variablen schieben, wobei das bei der Verwendung von Words etwas komplizierter werden könnte, als wenn Du die Daten in ein Byte-Array abgelegt hättest.
 
Ich habe das Word-array in ein BYTE-Array umgeschrieben, jetzt stehen mehr Sachen in dem Array, die Frage ist nun was das MSB und das LSB ist und wie ich die Bytes "verschieben" kann?
1659965071377.png
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Was was ist muss sich aus dem Handbuch der Geräte ergeben.
Kommen die Daten als Big Endian an, steht das höchstwertige Byte immer zuerst im Array.
"Verschieben" kannst Du die Bytes z.B. mit dem Konstrukt UNION. Mal angenommen Dein Gerät liefert einen Wert als INT mit der Byteorder Big Endian, dann könntest Du die folgende UNION definieren.
Code:
TYPE UN_Int :
UNION
    iValue  : INT;
    abValue : ARRAY[1..2] OF BYTE;
END_UNION
END_TYPE
Im Programm musst Du jetzt, da TC3 mit Little Endian arbeitet, die Bytes vertauschen. Das folgende Beispiel erhält die Integerzahl -32768 als Big Endian und verteilt die einzelnen Bytes so in der Union, dass ein Integer in Little Endian bei rauskommt.
Code:
PROGRAM MAIN
VAR
unInt01     : UN_Int;
abValue01   : ARRAY[1..2] OF BYTE := [16#80, 16#00];
iValue01    : INT;
END_VAR

unInt01.abValue[2]  := abValue01[1];
unInt01.abValue[1]  := abValue01[2];
iValue01            := unInt01.iValue;
 
Guten Morgen,
Heute habe ich es mit der UNION ausprobiert und es ist ein komisches Ergebniss herausgekommen, ich habe einfach 2 Werte die ich ausgelesen habe als Beispiel reingeschrieben:
1660023988534.png
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Wie ist Dein U_Convert deklariert?
Ist Dir bekannt daß ein REAL aus 4 Bytes besteht?
Warum deklarierst Du arrUDP_Data1 als Array aus 3 Bytes??? Und benutzt davon nur die ersten 2 Bytes?

Dein Ziel: Du musst 4 Bytes (gesamt: 32 Bit) in der richtigen Reihenfolge in ein Byte-Array eintragen, und dann den in der UNION auf der selben Speicheradresse liegenden REAL (32 Bit) herauslesen.

Harald
 
1660025711256.png
das Array sollte 4 Byte groß sein, ich hatte vergessen das REAL 4 Byte groß ist

ich versuche die Daten mal richtig in ein Array zu schreiben
 
1660026736521.png
Nun kommen wir der Sache schon näher, aber da steht E-25, es sollten um die 215 Ampere sein.
Woran könnte das liegen?
 
Zurück
Oben