private void writeInt32Val(Tag tag, Libplctag client, Int32 value, bool print) { var sb = new StringBuilder(); for (int i = 0; i < tag.ElementCount; i++) { client.SetInt32Value(tag, (i * tag.ElementSize), value); } if (print) { readInt32Val(tag, client); } }
static void writeToTag(String tagName, int value) { var tag = new Tag(PLC_IP, "1, 0", CpuType.LGX, tagName, DataType.Int32, 1); var client = new Libplctag(); client.AddTag(tag); while (client.GetStatus(tag) == Libplctag.PLCTAG_STATUS_PENDING) { Thread.Sleep(100); } if (client.GetStatus(tag) != Libplctag.PLCTAG_STATUS_OK) { Console.WriteLine($"Error setting up tag internal state. Error{ client.DecodeError(client.GetStatus(tag))}\n"); return; } client.SetInt32Value(tag, 0 * tag.ElementSize, value); var result = client.WriteTag(tag, 2000); if (result != Libplctag.PLCTAG_STATUS_OK) { if (retry < 2) { Console.WriteLine("ERROR!"); Console.WriteLine("Retrying...."); Thread.Sleep(500); retry++; writeToTag(tagName, value); } else { Console.WriteLine("Retry Failed! Start over!"); retry = 0; return; } } else { retry = 0; } if (value == 1 && tagName.Contains("SOL")) { writeToTag(tagName, 0); } }
static void Main(string[] args) { var client = new Libplctag(); var tag = new Tag("10.206.1.39", "1, 0", CpuType.LGX, "TestDINTArray[0]", DataType.Int32, 10); /* create the tag */ client.AddTag(tag); /* let the connect succeed we hope */ while (client.GetStatus(tag) == Libplctag.PLCTAG_STATUS_PENDING) { Thread.Sleep(100); } if (client.GetStatus(tag) != Libplctag.PLCTAG_STATUS_OK) { Console.WriteLine($"Error setting up tag internal state. Error {client.DecodeError(client.GetStatus(tag))}\n"); return; } /* get the data */ var rc = client.ReadTag(tag, DataTimeout); if (rc != Libplctag.PLCTAG_STATUS_OK) { Console.WriteLine($"ERROR: Unable to read the data! Got error code {rc}: {client.DecodeError(client.GetStatus(tag))}\n"); return; } /* print out the data */ for (int i = 0; i < tag.ElementCount; i++) { Console.WriteLine($"data[{i}]={ client.GetInt32Value(tag, (i * tag.ElementSize))}\n"); } /* now test a write */ for (int i = 0; i < tag.ElementCount; i++) { var val = client.GetInt32Value(tag, (i * tag.ElementSize)); val = val + 1; Console.WriteLine($"Setting element {i} to {val}\n"); client.SetInt32Value(tag, (i * tag.ElementSize), val); } rc = client.WriteTag(tag, DataTimeout); if (rc != Libplctag.PLCTAG_STATUS_OK) { LogError($"ERROR: Unable to read the data! Got error code {rc}: {client.DecodeError(rc)}\n"); return; } /* get the data again*/ rc = client.ReadTag(tag, DataTimeout); if (rc != Libplctag.PLCTAG_STATUS_OK) { LogError($"ERROR: Unable to read the data! Got error code {rc}: {client.DecodeError(rc)}\n"); return; } /* print out the data */ for (int i = 0; i < tag.ElementCount; i++) { Console.WriteLine($"data[{0}]={1}\n", i, client.GetInt32Value(tag, (i * tag.ElementSize))); } client.Dispose(); Console.ReadKey(); }