ACCON AGLink liest Variablen von Siemens SPS mit Block- und Offset-Parametern

Sergio

Level-1
Beiträge
12
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
HALLO

Ich versuche, mithilfe der ACCON-AGLink-Bibliothek Variablen aus einer Siemens CPU 1513-1 PN S7-1500-SPS zu lesen. Ich versuche, die API durch Angabe der Datenbanknummer, des Blocks und des Offsets zu lesen. Ich habe verschiedene APIs ausprobiert aber alle geben mir Fehler.

Ich habe diese Tests gemacht

Java:
        short[] blockList = plcConnection.readBlockList(aglBlockType);
        for (short block : blockList)
        {
            System.out.println("block: "+block);
        }
        
        System.out.println("block count: "+plcConnection.readBlockCount(AglBlockType.DB));
        
        System.out.println("block count: "+plcConnection.readBlockLen(AglBlockType.DB, 1) );
        AgLink.symbolic_Get_DATA_RW40(root_handle);
        
        AglDataRwDWord m_flagMW101 = new AglDataRwDWord(AglDataArea.AREA_DATA, 1, 101, 2);
        
        List<AglDataRw> m_dataRwVars = new ArrayList<AglDataRw>();
        m_dataRwVars.add(m_flagMW101);
ù

Es gibt mir den folgenden Fehler
de.deltalogic.accon.aglink4.AglIOException: Method: 'readBlockCount', Error Code: 'AGL40_FUNC_NOT_SUPPORTED', Error Nr: '0xFFF0000A', Error Message: 'Funktion wird nicht unterstuetzt',
at de.deltalogic.accon.aglink4.FunctionsDBInfos.readBlockCount(FunctionsDBInfos.java:122)
at de.deltalogic.accon.aglink4.AglPlcConnection.readBlockCount(AglPlcConnection.java:730)

Diese verwenden
Java:
        AglByteBuffer aglByteBuffer = new AglByteBuffer(2);
        plcConnection.readDataBytes(1, 101, aglByteBuffer);
        


boolean allVarsOk = plcConnection.readMixEx(m_flagMW101);
         if (allVarsOk) {
             PrintValues(m_flagMW101);
         }

Es gibt mir den folgenden Fehler
de.deltalogic.accon.aglink4.AglIOException: Method: 'readDataBytes', Error Code: 'AGL40_FUNC_NOT_IMPLEMENTED', Error Nr: '0xFFF00000', Error Message: 'Funktion nicht implementiert',
at de.deltalogic.accon.aglink4.FunctionsReadWriteBytes.readDataBytes(FunctionsReadWriteBytes.java:61)
at de.deltalogic.accon.aglink4.AglPlcConnection.readDataBytes(AglPlcConnection.java:944)

Diese verwenden
Java:
        System.out.println(AgLink.symbolic_Get_DATA_RW40(root_handle));
        
        AglDataRwByte aglDataRw = new AglDataRwByte(AglDataArea.AREA_IN, 1, 0, 1);
        Object object = aglDataRw.getUserValue();
        System.out.println(object);

Es gibt mir den folgenden Fehler
de.deltalogic.accon.aglink4.AglIOException: Method: 'symbolic_Get_DATA_RW40', Error Code: 'AGL40_SYMBOLIC_NOT_APPLICABLE', Error Nr: '0xFFFA0000', Error Message: 'Nicht anwendbar',
at de.deltalogic.accon.aglink4.FunctionsTIA.symbolic_Get_DATA_RW40(FunctionsTIA.java:98)
at de.deltalogic.accon.aglink4.AgLink.symbolic_Get_DATA_RW40(AgLink.java:692)


Es gibt mir den folgenden Fehler
Java:
AglDataRwByte aglDataRw = new AglDataRwByte(AglDataArea.AREA_IN, 1, 0, 1);
Object object = aglDataRw.getUserValue();
System.out.println(object);

Das system.out.println gibt null aus

Ich hänge die SPS-Konfiguration an.

Kannst du mir helfen? Wie kann ich Variablen lesen, ohne symbolische Adressierung zu verwenden?

Danke

Sergio
 

Anhänge

  • PLCConf3.png
    PLCConf3.png
    27,9 KB · Aufrufe: 9
  • PLCConf2.png
    PLCConf2.png
    77,9 KB · Aufrufe: 9
  • PLCConf1.png
    PLCConf1.png
    35,6 KB · Aufrufe: 9
Ich glaube du vermischt den symbolischen und absoluten Zugriff zur SPS.

Absoluter Zugriff:
- "altes" Protokoll
- Variablen werden über absolute Adressen adressiert. Z.B. M0.1, E123.4 oder DB123.DBW66...
- Bei 1500er (und 1200er) muss der Zugriff in HW-Config freigegeben werden. Stichwort: "Put Get Zugriff erlauben"
- Bei 1500er (und 1200er) muss ein DB nicht optimiert für den Zugriff sein. Einstellung bei: Rechtsklick auf den DB...

Symbolischer Zugriff:
- "neues" Protokoll
- kein Zugriff auf 300/400er möglich. Nur 1500/1200er
- Auf Variablen wird über den Namen zugegriffen. Namen: Siehe TIA Expert.

AG Link kann grundsätzlich beide Protokolle (und noch mehr).
Es ist halt eine Lizenz Frage...
Ich weiß nicht was Ihr eingekauft habt.
Im API Guide siehst du die verschiedenen Zugriffsarten.
Dort kann man auch mit den Funktionen herumspielen...
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Wenn bei der SPS PUT/GET freigegeben ist und die DBs absolut sind, kann mit S7-TCP/IP (nicht S7-TCP/IP TIA!) eine Verbindung zur SPS aufgebaut und die Daten mit AGL_ReadMixEx gelesen und geschrieben werden. Die 1500er unterstützt allerdings die Funktionen readBlockCount, readBlockLen etc nicht. Die funktionieren nur bei einer 300er und 400er.
 
Vielen Dank für die Info.
Wenn ich den Wert der Variablen "Numero_persone“ des angehängten Bildes über absolute Adressierung unter Verwendung ihres Offsets (Offset 4.0) lesen möchte, welche Bibliotheks-API sollte ich verwenden? PLC 1513-1 PN
Danke

Sergio
 

Anhänge

  • PLC_Offset.png
    PLC_Offset.png
    63,2 KB · Aufrufe: 8
Ich würde die TIA-Funktionalität verwenden. Dafür werden auch einige Beispiele für .net mitgeliefert, in denen das Lesen von Variablen enthalten ist.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Ja, mit der TIA Expert-Software kann ich die Variablen lesen und schreiben. Ich möchte eine JAVA-Anwendung schreiben, die die Variablen über absolute Adressierung lesen und schreiben kann, wobei Daten wie die DB-Nummer, der Variablen-Offset und die Anzahl der zu lesenden Bytes verwendet werden usw. ... ich konnte nicht die richtige API dafür finden. Können Sie mir sagen, welche ich verwenden soll? Ich habe die im ersten Beitrag ausprobiert, aber ohne Erfolg

Grazie

Sergio
 
Hallo,
wenn sie das AGLink-Setup installiert haben, finden sie hier die AGLink-Java Beispiele:
C:\Users\Public\Documents\DELTALOGIC\ACCON-AGLink_V5\Samples\Java

Die Doku des AGLink Java Wrappers finden sie hier:
C:\Program Files (x86)\DELTALOGIC\ACCON-AGLink V5\Doku\JavaDoc
Hanns-Joerg Renschler
 
Ich folge der Dokumentation Javadoc, wenn ich versuche, den Beispielen zu folgen
REALE 'DB 1.DBD 46'
AglDataRwDWord realVar = new AglDataRwDWord(AglDataArea.AREA_DATA, 1, 46, 1);
realVar.values.putReal(0, 3.14F);

boolean writeOk = m_plcConnection.writeMixEx(realVar);
asserire (writeOk);

Wenn ich versuche, plcConnection.readMixEx zu verwenden, erhalte ich die folgende Fehlermeldung

de.deltalogic.accon.aglink4.AglIOException: Method: 'ReadMixEx', Error Code: 'AGL40_FUNC_NOT_IMPLEMENTED', Error Nr: '0xFFF00000', Error Message: 'Funktion nicht implementiert',
at de.deltalogic.accon.aglink4.FunctionsReadWriteMix.writeOrReadMix(FunctionsReadWriteMix.java:157)
at de.deltalogic.accon.aglink4.FunctionsReadWriteMix.readMixEx(FunctionsReadWriteMix.java:69)
at de.deltalogic.accon.aglink4.AglPlcConnection.readMixEx(AglPlcConnection.java:1340)

das ist mein Code

Java:
AglDataRwByte aglDataRw = new AglDataRwByte(AglDataArea.AREA_DATA, 2, 6, 2);
List<AglDataRw> vars = new ArrayList<AglDataRw>();
vars.add(aglDataRw);

Boolean varsOk = plcConnection.readMixEx(vars);
asserire (varsOk);

Der Fehler wird von readMixEx generiert

Was mache ich falsch?

Danke

Sergio
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo,
Bitte den passenden Device-Typ verwenden.
- "S7-TCP/IP" für PUT/GET-Kommunikation z.B. ReadMixEx
-"S7-TCP/IP TIA" für neues Protokoll über symbolischen Zugriff

1684147299773.png
Wenn "S7-TCP/IP TIA" mit "plcConnection.readMixEx" verwendet wird, kommt es z.B. zur Fehlermeldung "Funktion nicht implementiert'.
Hanns-Joerg Renschler
 
Vielen Dank, ich wusste nicht, dass es sich um ein Problem mit der Verbindungsart handelt. Mit Ihrem Vorschlag funktioniert es
 
Also von nicht-optimierten Bereichen wie DBs die nicht optimiert sind (eine Adresse bei Offset eingetragen haben) oder Merker lassen sich zumindest theoretisch auch weiterhin absolut adressierte Datenblöcke lesen. Also wenn z.B. der DB100 nicht optimiert ist und entsprechend lang ist, dann kann ich weiterhin z.B. 20 Bytes am Offset xy lesen, ohne in der CPU Put/Get aktivieren zu müssen. Könnte bei bestimmten Umständen schneller sein als über das Symbol zu lesen.
 
Zurück
Oben