Gelöst: TC3: Zugriff auf Merkerbereich %MB0 via Modbus TCP

Beiträge
6.681
Reaktionspunkte
1.616
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo,
RTFM und auch Tante Google hat mich nicht wirklich weitergebracht.
Ein Projekt ist von TC2 auf TC3 (4024.64) hochgerüstet worden und läuft soweit auch, bis auf die Modbus Server Funktionalität.
Es sollen Daten aus einem Merkerbereich gelesen werden. Hier mal die Varriablendeklaration:
Code:
awModbusData    AT %MB0    : ARRAY[0..170] OF WORD; // Array for Modbus data
Die Modbus Startadresse soll 12288 sein und es wurde folgende XML-Datei eingespielt:
XML:
<Configuration>
    <Port>502</Port>
    <IpAddr>172.19.40.250</IpAddr>
    <Mapping>
        <InputRegisters>
            <MappingInfo>
                <AdsPort>851</AdsPort>
                <StartAddress>12288</StartAddress>
                <EndAddress>12300</EndAddress>
                <IndexGroup>16416</IndexGroup>
                <IndexOffset>0</IndexOffset>
            </MappingInfo>
        </InputRegisters>
    </Mapping>
</Configuration>
Wenn ich jetzt mit ModPoll versuche Daten auszulesen erscheint die Fehlermeldung "Illegal Data Address exception response!". Ich nutze folgende Befehlszeile:
modpoll -a 255 -t 3 -r 12288 172.19.40.250
Ein Versuch mit -t 4 machte keinen Unterschied, auch eine Änderung der Konfiguration von "InputRegisters" zu "OutputRegisters" brachte nichts.
Wer hat hier eine Idee?
 
Zuletzt bearbeitet:
Zuviel Werbung?
-> Hier kostenlos registrieren
Wenn das Merker sein sollen, müssten das doch Holding Register sein?
Bei der XML-Datei gibt es nur die Optionen "InputRegisters" und "OutputRegisters".
Hier mal ein Beispiel aus dem Handbuch:
1754554956118.png
Da geht es zwar um das Schreiben, aber das Lesen sollte ja auch funktionieren. Allerdings muss ich in der XML-Datei statt "InputRegisters" den Eintrag "OutputRegisters" nutzen.
 
Ich habe leider mit Modbus noch nicht arbeiten dürfen, von daher etwas laienhaft, aber:
Ist dein Inhalt der XML so 1 zu 1 hier her kopiert worden?
Mir ist beim lesen sofort
Code:
 <InpputRegisters> </InpputRegisters>
mit doppeltem P aufgefallen.
Kurz gegoogelt schreibt sich das laut InfoSys wie gedacht als InputRegisters. Vielleicht klappt auch deshalb Schreiben aber nicht Lesen?!
 
Ich habe leider mit Modbus noch nicht arbeiten dürfen, von daher etwas laienhaft, aber:
Ist dein Inhalt der XML so 1 zu 1 hier her kopiert worden?
Mir ist beim lesen sofort
Code:
 <InpputRegisters> </InpputRegisters>
mit doppeltem P aufgefallen.
Kurz gegoogelt schreibt sich das laut InfoSys wie gedacht als InputRegisters. Vielleicht klappt auch deshalb Schreiben aber nicht Lesen?!
Ja, ist ein Tippfehler.
Problem ist mittlerweile gelöst. Details folgen noch.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
So, hier die versprochenen Details.
Die Ursache ist, dass ich nicht so fit mit ModPoll bin und eine leicht falsche Befehlszeile genutzt habe.
Ich hatte modpoll -a 255 -t 4 -r 12288 172.19.40.250 genutzt, dadurch wurde aber am Server nicht die Adresse 12288 abgefragt, sondern die 12287, die nicht existierte, deswegen kam es zur Fehlermeldung.
Mit der Zeile modpoll -a 255 -t 4 -0 -r 12288 172.19.40.250 klappt es jetzt.
Ein weiteres "Problem" war, dass der Modbus Konfigurator bei jeder Konfigurationsübertragung TwinCAT angehalten hatte und, da ich kein Bootprojekt verwendet habe, jedes Mal mein Projekt weg war und der Dienst sich im Konfig Modus befand.
hier noch die zugehörige Konfiguration des Servers:
XML:
<Configuration>
    <Port>502</Port>
    <IpAddr>172.19.40.250</IpAddr>
    <Mapping>
        <OutputRegisters>
            <MappingInfo>
                <AdsPort>851</AdsPort>
                <StartAddress>12288</StartAddress>
                <EndAddress>12458</EndAddress>
                <IndexGroup>16416</IndexGroup>
                <IndexOffset>0</IndexOffset>
            </MappingInfo>
        </OutputRegisters>
    </Mapping>
</Configuration>
 
Zurück
Oben