A short example developed in .NET showing how to query a PLC siemens S7-200 using PPI protocol and the library "libnodave".
using System;
using System.Collections.Generic;
using System.Text;
namespace TestPPI
{
class Program
{
public static void Main()
{
libnodave.daveOSserialType fds;
libnodave.daveInterface di;
libnodave.daveConnection dc;
fds.rfd = libnodave.setPort("COM6", "9600", 'E');
fds.wfd = fds.rfd;
if (fds.rfd <= 0)
Console.WriteLine("Error on open serial port ");
else
{
int localPPI = 0;
int plcPPI = 2;
int res;
di = new libnodave.daveInterface(fds, "IF1", localPPI, libnodave.daveProtoPPI, libnodave.daveSpeed187k);
di.setTimeout(1000000);
dc = new libnodave.daveConnection(di, plcPPI, 0, 0);
if (0 == dc.connectPLC())
{
Byte[] bytes = new Byte[16];
res = dc.readBytes(libnodave.daveFlags, 0, 0, 16, bytes);
if (res != 0)
Console.WriteLine("error {0}, {1}", res, libnodave.daveStrerror(res));
else
{
Console.WriteLine("MD 0: {0}", dc.getS32());
Console.WriteLine("MD 4: {0}", dc.getS32());
Console.WriteLine("MD 8: {0}", dc.getS32());
Console.WriteLine("MD 12: {0}", dc.getFloat());
}
bytes = new Byte[1];
res = dc.readBytes(libnodave.daveDB, 1, 20, 1, bytes);
if (res != 0)
Console.WriteLine("error on read VB 10: {0}, {1}", res, libnodave.daveStrerror(res));
else
Console.WriteLine("VB 20: " + bytes[0]);
bytes = new Byte[2];
res = dc.readBytes(libnodave.daveDB, 1, 110, 2, bytes);
if (res != 0)
Console.WriteLine("error on read VW 110: {0}, {1}", res, libnodave.daveStrerror(res));
else
{
Array.Reverse(bytes);
Console.WriteLine("VW 110: " + BitConverter.ToInt16(bytes, 0));
}
bytes = new Byte[4];
res = dc.readBytes(libnodave.daveDB, 1, 120, 4, bytes);
if (res != 0)
Console.WriteLine("error on read VD 120: {0}, {1}", res, libnodave.daveStrerror(res));
else
{
Array.Reverse(bytes);
Console.WriteLine("VD 120: " + BitConverter.ToSingle(bytes, 0));
}
bytes = new Byte[1];
res = dc.readBytes(libnodave.daveFlags, 0, 10, 1, bytes);
if (res != 0)
Console.WriteLine("error on read MB 10: {0}, {1}", res, libnodave.daveStrerror(res));
else
Console.WriteLine("MB 10: " + bytes[0]);
bytes = new Byte[2];
res = dc.readBytes(libnodave.daveFlags, 0, 12, 2, bytes);
if (res != 0)
Console.WriteLine("error on read MW 12: {0}, {1}", res, libnodave.daveStrerror(res));
else
{
Array.Reverse(bytes);
Console.WriteLine("MW 12: " + BitConverter.ToInt16(bytes, 0));
}
bytes = BitConverter.GetBytes((Int16)(BitConverter.ToInt16(bytes, 0) + 1));
Array.Reverse(bytes);
res = dc.writeBytes(libnodave.daveFlags, 0, 12, 2, bytes);
if (res != 0)
Console.WriteLine("error on write MW 12: {0}, {1}", res, libnodave.daveStrerror(res));
bytes = new Byte[2];
res = dc.readBytes(libnodave.daveFlags, 0, 12, 2, bytes);
if (res != 0)
Console.WriteLine("error on read MW 12: {0}, {1}", res, libnodave.daveStrerror(res));
else
{
Array.Reverse(bytes);
Console.WriteLine("MW 12: " + BitConverter.ToInt16(bytes, 0));
}
res = dc.writeBits(libnodave.daveFlags, 0, 5 * 8 + 3, 1, new Byte[] { 1 });
if (res != 0)
Console.WriteLine("error on write MBX 5.3: {0}, {1}", res, libnodave.daveStrerror(res));
bytes = new Byte[1];
res = dc.readBytes(libnodave.daveFlags, 0, 5, 1, bytes);
if (res != 0)
Console.WriteLine("error on read MB 5: {0}, {1}", res, libnodave.daveStrerror(res));
else
Console.WriteLine("MB 5: " + bytes[0]);
bytes = new Byte[2];
res = dc.readBytes(libnodave.daveCounter200, 0, 0, 2, bytes);
if (res != 0)
Console.WriteLine("error on read Z2 0: {0}, {1}", res, libnodave.daveStrerror(res));
else
Console.WriteLine("Z2 0: " + BitConverter.ToInt16(bytes, 0));
bytes = new Byte[2];
res = dc.readBytes(libnodave.daveTimer200, 0, 0, 2, bytes);
if (res != 0)
Console.WriteLine("error on read T2 0: {0}, {1}", res, libnodave.daveStrerror(res));
else
Console.WriteLine("T2 0: " + BitConverter.ToInt16(bytes, 0));
bytes = new Byte[2];
res = dc.readBytes(libnodave.daveSysFlags, 0, 10, 2, bytes);
if (res != 0)
Console.WriteLine("error on read SMW 10: {0}, {1}", res, libnodave.daveStrerror(res));
else
{
Array.Reverse(bytes);
Console.WriteLine("SMW 10: " + BitConverter.ToInt16(bytes, 0));
}
bytes = new Byte[2];
res = dc.readBytes(libnodave.daveAnaIn, 0, 0, 2, bytes);
if (res != 0)
Console.WriteLine("error on read AEW 0: {0}, {1}", res, libnodave.daveStrerror(res));
else
{
Array.Reverse(bytes);
Console.WriteLine("AEW 0: " + BitConverter.ToInt16(bytes, 0));
}
bytes = new Byte[2];
res = dc.readBytes(libnodave.daveAnaOut, 0, 0, 2, bytes);
if (res != 0)
Console.WriteLine("error on read AAW 0: {0}, {1}", res, libnodave.daveStrerror(res));
else
{
Array.Reverse(bytes);
Console.WriteLine("AAW 0: " + BitConverter.ToInt16(bytes, 0));
}
}
dc.disconnectPLC();
libnodave.closePort(fds.rfd);
}
Console.WriteLine("Press ENTER to exit");
Console.ReadLine();
}
}
}
TestPPI.zip