Zugriff auf ein Array in der SPS

Ein Array, welches sich in der SPS befindet, soll mit einen Lesebefehl ausgelesen werden. Die Variable wird hierbei per Variablenname angesprochen. Die Vorgehensweise weicht nur geringfügig von dem Auslesen diskreter Variablen ab:


import de.beckhoff.jni.Convert;
import de.beckhoff.jni.JNIByteBuffer;
import de.beckhoff.jni.tcads.AmsAddr;
import de.beckhoff.jni.tcads.AdsCallDllFunction;

public class Main
{
public static void main(String[] args)
{
    long err;
    AmsAddr addr = new AmsAddr();
    JNIByteBuffer dataBuff = new JNIByteBuffer(200);

    // Open communication
    AdsCallDllFunction.adsPortOpen();
    err = AdsCallDllFunction.getLocalAddress(addr);
    addr.setPort(851);

    if (err != 0) {
     System.out.println("Error: Open communication: 0x"
         + Long.toHexString(err));
    } else {
     System.out.println("Success: Open communication!");
    }

    // Read value by IndexGroup and IndexOffset
    err = AdsCallDllFunction.adsSyncReadReq(addr,
                     0x4020, // Index Group
                     0x0,    // Index Offset
                     200,
                     dataBuff);
    if(err!=0)
    {
     System.out.println("Error: Read by handle: 0x"
         + Long.toHexString(err));
    }
    else
    {
     for (int i = 0; i < dataBuff.getUsedBytesCount(); i=i+2)
     {
        // PLC datatype int consists of two bytes. Get them.
        byte lowByte = dataBuff.getByteArray()[i];
        byte highByte = dataBuff.getByteArray()[i+1];
        // Create new byte[]. Little endian!
        byte[] valBytes = { lowByte, highByte };
        // Integer value: byte[] to int
        int valInt = Convert.ByteArrToShort(valBytes);
        System.out.println("Value of PLCVar[" + i/2 + "]: " + valInt);
     }
    }

    // Close communication
    err = AdsCallDllFunction.adsPortClose();
    if(err!=0) {
     System.out.println("Error: Close Communication: 0x"
         + Long.toHexString(err));
    }

    try{
     System.in.read();
    }
    catch (Exception e){
     System.out.println("Error: Close program");
    }
}
}

Beispielprogramm 'Zugriff auf ein Array in der SPS' entpacken.

Um das *.jar Sample ausführen zu können, muss in der Konsole im korrekten Verzeichnis der Befehl 'java -classpath "Sample03.jar;[Pfad zu TcJavaToAds.jar] Main' ausgeführt werden (Beispielpfad: "C:TwinCAT\Ads Api\AdsToJava\*"). Dazu muss Java in den Umgebungsvariablen eingetragen sein.

Voraussetzungen

Entwicklungsumgebung

Zielplattform

Einzubindende Java-Packages

TwinCAT v3.0 Build 3102, Java

PC or CX (x86)