Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- class Program
- {
- static void Main(string[] args)
- {
- Func<ushort[], int, int, byte[]> getNBytesAt = (arr, idx, n) => arr
- .Skip(idx)
- .Select(BitConverter.GetBytes)
- .Aggregate<IEnumerable<byte>>(Enumerable.Concat)
- .Take(n)
- .ToArray();
- var epoch0 = new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc);
- using (var master = ModbusIpMaster.CreateIp(new TcpClient("10.1.6.10", 502)))
- using (var writer = new BinaryWriter(File.OpenWrite(@"E:\testdata\clock.raw")))
- {
- var plcData = master.ReadHoldingRegisters(1, 0, 4);
- DateTime dtInit = DateTime.Now;
- var curTimeInit = BitConverter.ToUInt32(getNBytesAt(plcData, 0, 4), 0);
- var timeInit = BitConverter.ToUInt32(getNBytesAt(plcData, 2, 4), 0);
- var pc2Init = GetNetworkTime();
- while (true)
- {
- var now = DateTime.Now;
- plcData = master.ReadHoldingRegisters(1, 0, 4);
- foreach (var us in plcData)
- {
- writer.Write(us);
- }
- writer.Write(now.ToBinary());
- Console.Clear();
- var curTime = BitConverter.ToUInt32(getNBytesAt(plcData, 0, 4), 0);
- var time = BitConverter.ToUInt32(getNBytesAt(plcData, 2, 4), 0);
- Console.WriteLine(writer.BaseStream.Position + " bytes written");
- var delta = now - dtInit;
- Console.WriteLine("CurTime drift: {0:0.00} s", delta.TotalSeconds - (curTime - curTimeInit));
- Console.WriteLine("TIME() drift: {0:0.00} ms", delta.TotalMilliseconds - (time - timeInit));
- Console.WriteLine("PC2 drift: {0:0.00} ms", (delta - (GetNetworkTime() - pc2Init)).TotalMilliseconds);
- Console.WriteLine("{0}", delta);
- Thread.Sleep(50);
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement