Beckhoff CP mit IDS Acos750 über IEC 60870-5-104

Netwalker

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

Ich bin dabei eine IEC 60870-5-104 Schnittstellenverbindung aufzubauen. Diese soll Daten zwischen einem Beckhof Panel(CP6601) und einer IDS SPS(acos750) tauschen. Ich hab alles soweit eingerichtet, doch die Daten werden leider nicht ausgetauscht. Weis jemand woran dies liegt?

Hier mein Projekt:


Die IDS SPS ist Master, das Beckhoff Panel Save (TCPIP Server ist auf Beckhoffpanel installiert)
Es wird hier zunächst versucht nur einen Boolschen Wert vom Slave an den Master zu senden.

Code:
für beide sind folgende Parameter eingestellt:

max. unquitierte ADPUs bei Übertragung (k) : 12
max. empfangene ADPUs bei Übertragung (w) : 8
Verbindungstimeout (t0): 30s
Quittierungstimeout (t1): 15s
Quittierungstimeout (t2): 10s
Verbindungstest Timeout (t3): 20s
Übertragungsursache (Cause of Transfer size): 2 octets
Geräteadressengröße (Common ASDU address size): 2 octets
Informationsobjektadressengröße (Information object adress size): 3 octets
Geräteadresse (Common ASDU adress): 7

auf Beckhoffseite ist des weiteren folgendes eingestellt (wofür ich auf IDS Seite keine Einstellmöglichkeit fand):

Originator address: 1
Max. APDU length: 253
Local port address: 2404
Local host adress: 192.168.253.97 (dies ist die eigene IP des Slave Bedienteils)

auf IDS-Seite ist des weiteren folgendes eingestellt:

IP des Slave(Zieladresse): 192.168.253.97
Die beiden SPS-Programme:

IDS-SPS:
IEC1.jpg


Beckhoff SPS:
Code:
PROGRAM MAIN
VAR
    AODB    : ARRAY[0..1] OF ST_IEC870_5_101AODBEntry; (* Application object data base (only two data points) *)

    hServer    : T_HSERVER;(* server connection handle *)
    server    : FB_IEC870_5_104Slave; (* IEC 60870-5-104 slave function block instance *)
    init    : BOOL := TRUE;

    SPI        AT%MX0.0 : BOOL;(* Single point information (data point used in monitoring direction slave->master) *)
    SCS        AT%MX1.5 : BOOL;(* Single command state (data point used in control direction master->slave) *)


    timer : TON := ( IN := TRUE, PT := t#1s );
END_VAR




IF init THEN
    init := FALSE;

    (* Create server handle *)
    F_CreateServerHnd(     '', (* own TwinCAT netID, empty string = local *)
                        '192.168.253.97', (* own (slave) IP address *)
                        2404,(* own (slave) port number *)
                        LISTEN_MODE_CLOSEALL OR CONNECT_MODE_ENABLEDBG, (* close all previous opened socket connections and enable debug output *)
                        TRUE,(* enable connection *)
                        hServer );

    server.sysPara.asduAddr     := 7; (* Configure common ASDU address *)
    server.sysPara.dbgMode     := IEC870_DEBUGMODE_DEVSTATE (*OR IEC870_DEBUGMODE_ASDU OR IEC870_DEBUGMODE_LINKLAYER*);(* enable output of device state change messages *)

    (* Configure one single point in monitoring direction *)
    F_iecInitAOEntry(     M_SP_NA_1, (* type is single point *)
                    4161, (* information object address *)
                    IEC870_GRP_INROGEN, (* interrogation group *)
                    0,(* multiplier (not used) *)
                    MAP_AREA_MEMORY,(* map this single point value FROM PLC memory area (buffer) *)
                    0, (* map FROM byte offset *)
                    0, (* map FROM bit offset *)
                    AODB[0] );(* data base array element to initialize *)

    (* Configure one single command in control direction *)
    F_iecInitAOEntry(     C_SC_NA_1, (* type is single command *)
                    24578,(* information object address *)
                    0, (* group (not used) *)
                    0, (* multiplier (not used) *)
                    MAP_AREA_MEMORY, (* map this single command value TO PLC memory area (buffer) *)
                    1, (* map TO byte offset *)
                    5, (* map TO bit offset *)
                    AODB[1] ); (* data base array element to initialize *)
ELSE
    (* execute IEC slave function block *)
    server(     pInputs         := 0, (* not used *)
            cbInputs         := 0, (* not used *)
            pOutputs     := 0, (* not used *)
            cbOutputs     := 0, (* not used *)
            pMemory     := ADR( %MB0 ),(* memory buffer where the data point values are mapped to and from *)
            cbMemory     := 2, (* 2 byte size *)
            pData         := 0, (* not used *)
            cbData         := 0, (* not used *)
            pAOEntries     := ADR( AODB ),
            cbAOEntries     := SIZEOF( AODB ),
            hServer         := hServer, (* server connection handle *)
            bEnable         := TRUE );

    (* Check for device errors, remove them and log message to the TwinCAT System Manager log view *)
    REPEAT
        server.system.device.errors.RemoveError();
        IF server.system.device.errors.bOk THEN
            ADSLOGSTR( ADSLOG_MSGTYPE_ERROR OR ADSLOG_MSGTYPE_LOG, 'IEC60870-5-104 slave error: 0x%s',
                        DWORD_TO_HEXSTR( server.system.device.errors.getError.nErrId, 8, FALSE) );
        END_IF
    UNTIL NOT server.system.device.errors.bOk
    END_REPEAT

END_IF
timer( IN := TRUE );
IF timer.Q THEN
    timer( IN := FALSE );

    SPI := NOT SPI;

END_IF
In AcosET (Hardwareparametrierung für Ids SPS) habe ich mir hierfür folgendes Informationsobjekt erstellt(der blau markierte Datenpunkt):
IEC2.jpg



Wer kennt des Retsels Lösung? Vielendank schonmal für die Mühe
 
Zuletzt bearbeitet:
Wie lang ist denn die ASDU auf der Beckhoff-Seite ? 1 oder 2 Byte ?

Aber mal grundsätzlich: Warum muss die Verbindung zu dem Panel über 104 gemacht werden ? Da bietet sich Modbus/TCP doch eher an - und die 750er ist ja sehr kommunikativ :)

Edit: Ich hab mir grad mal AcosET geöffnet, deine blau markierte Testmeldung hat die ASDU 1 ?!?
 
Zuletzt bearbeitet:
Zuviel Werbung?
-> Hier kostenlos registrieren
Wie lang ist denn die ASDU auf der Beckhoff-Seite ? 1 oder 2 Byte ?

Aber mal grundsätzlich: Warum muss die Verbindung zu dem Panel über 104 gemacht werden ? Da bietet sich Modbus/TCP doch eher an - und die 750er ist ja sehr kommunikativ :)

Edit: Ich hab mir grad mal AcosET geöffnet, deine blau markierte Testmeldung hat die ASDU 1 ?!?

Bei meiner Markierten Meldung ist die zweite Spalte die Geräteadresse. Ich geh mal davon aus dass mit Geräteadresse die ADSU gemeint ist. Diese steht wie oben zu sehen auf 1. Nun hab ich auf Beckhoffseite die ASDU ebenfalls auf 1 gestellt. das ergebnis war, dass ich am Ausgang byQual (für die Informationsobjektqualität) des Empfangsbausteins auf IDS-Seite "128" angezeigt bekomme. Daten empfange ich allerdings noch nicht.

Das ganze schaut online auf IEC-Seite nun folgendemasen aus:
IEC3.jpg


Zur länge der ASDU-Adresse auf der Beckhoffseite:
Laut Beschreibnung des verwendeten Beispielprogramms von Beckhoff ist die ASDU-Adresse 2 octet lang, aber ich selbst hab leider nicht gefunden wo dies definiert ist.

Muss ich für die Kommunikation über Modbus/TCP bestimmte Bausteine bei Beckhoff erwerben oder sind die schon in Freien Bibliotheken verfügbar?
 
Ich hatte leider noch keine 750er in der Hand. Ich frage mich ob die eine Meldung, die du in der 750 als UZE von einer UST empfangen möchtest, überhaupt im ACOS angelegt werden muss.

Hattest du eine Schulung ?
 
Laut Ids muss sie wohl angelegt werden.

Schulung hatte ich leider keine, da es so Zeitnah wie ich das brauche keine gab.
Auf das Panel von Beckhoff kommt keine Highlight Zentrale von IDS sondern eine Visu aus TwinCAT PLC. Sprich mir geht es erst mal nur um den nakten Datenaustausch zwischen den beiden SPS Laufzeiten (Beckhoff -> Ids).
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Den Fehler, weshalb ich keien Verbndung über die IEC 60870-5-104 aufbauen konnte, habe ich gefunden. Es lag an der Falschen Lizens für das CP66. Dies geschah aufgrund eines Missverständnisses in der Bezeichnung. Bei Beckhoff werden die Teilnehmer mit Master und Slave bezeichnet und bei Ids mit Server und Client. Mir war nicht bekannt, dass Master = Client und Slave = Server giltet. Nun habe ich die richtige Lizens und kann die Verbindung aufbauen. Die Übertragung der Daten ist allerdings immer noch fehlerbehaftet. Diesbezüglich werde ich jedoch einen neuen Thread auf machen, weil das hier sonst zu kompliziert wird und man sich sonst zu weit in die Vorgeschichte einlesen müsste.
 
Zurück
Oben