My Blog

Use the library "libnodave" to communicate with a SIEMENS S7-200 PLC

by lupok on lunedì 11 novembre 2013 12:14
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

Blogs Parent Separator My Blog
Author
lupok

My Blog

Tags