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:
Beispielprogramm 'Zugriff auf ein Array in der SPS' entpacken: sample03.zip
- 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.
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(AdsCallDllFunction.AMSPORT_R0_PLC_RTS1);
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");
}
}
}