Advertisement
Guest User

Untitled

a guest
Feb 5th, 2016
96
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 2.12 KB | None | 0 0
  1. class Program
  2.     {
  3.         static void Main(string[] args)
  4.         {
  5.             Func<ushort[], int, int, byte[]> getNBytesAt = (arr, idx, n) => arr
  6.                 .Skip(idx)
  7.                 .Select(BitConverter.GetBytes)
  8.                 .Aggregate<IEnumerable<byte>>(Enumerable.Concat)
  9.                 .Take(n)
  10.                 .ToArray();
  11.  
  12.             var epoch0 = new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc);
  13.  
  14.             using (var master = ModbusIpMaster.CreateIp(new TcpClient("10.1.6.10", 502)))
  15.             using (var writer = new BinaryWriter(File.OpenWrite(@"E:\testdata\clock.raw")))
  16.             {
  17.                 var plcData = master.ReadHoldingRegisters(1, 0, 4);
  18.                 DateTime dtInit = DateTime.Now;
  19.                 var curTimeInit = BitConverter.ToUInt32(getNBytesAt(plcData, 0, 4), 0);
  20.                 var timeInit = BitConverter.ToUInt32(getNBytesAt(plcData, 2, 4), 0);
  21.                 var pc2Init = GetNetworkTime();
  22.                 while (true)
  23.                 {
  24.                     var now = DateTime.Now;
  25.                     plcData = master.ReadHoldingRegisters(1, 0, 4);
  26.                     foreach (var us in plcData)
  27.                     {
  28.                         writer.Write(us);
  29.                     }
  30.                     writer.Write(now.ToBinary());
  31.                     Console.Clear();
  32.  
  33.                     var curTime = BitConverter.ToUInt32(getNBytesAt(plcData, 0, 4), 0);
  34.                     var time = BitConverter.ToUInt32(getNBytesAt(plcData, 2, 4), 0);
  35.                     Console.WriteLine(writer.BaseStream.Position + " bytes written");
  36.                     var delta = now - dtInit;
  37.                     Console.WriteLine("CurTime drift: {0:0.00} s", delta.TotalSeconds - (curTime - curTimeInit));
  38.                     Console.WriteLine("TIME() drift: {0:0.00} ms", delta.TotalMilliseconds - (time - timeInit));
  39.                     Console.WriteLine("PC2 drift: {0:0.00} ms", (delta - (GetNetworkTime() - pc2Init)).TotalMilliseconds);
  40.                     Console.WriteLine("{0}", delta);
  41.                     Thread.Sleep(50);
  42.                 }
  43.             }
  44.         }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement