static void Main(string[] args) { var client = new Libplctag(); var tag = new Tag("192.168.0.100", CpuType.SLC, "ST48:0", DataType.String, 1); client.AddTag(tag); if (client.GetStatus(tag) != Libplctag.PLCTAG_STATUS_OK) { LogError($"{tag.Name} 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) { LogError($"{tag.Name} 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++) { var sb = new StringBuilder(); for (int j = 0; j < tag.ElementSize; j++) { sb.Append((char)client.GetUint8Value(tag, (i * tag.ElementSize) + j)); } Console.WriteLine($"string {i} ({82} chars) = {sb.ToString()}\n"); } client.Dispose(); Console.ReadKey(); }
// plc connect button private void connectButton_Click(object sender, EventArgs e) { // set up tag and communication with plc PLCommunication comm = new PLCommunication(IPAddTextBox.Text.Trim(), (PathComboBox.SelectedIndex + 1).ToString().Trim(), SlotTextBox.Text.Trim(), CpuTypeComboBox.Text.Trim(), TagNameTextBox.Text.Trim(), DataTypeComboBox.Text, Int32.Parse(ElementCountTextBox.Text), writeCheckBox.Checked, WriteValueTextBox.Text); // create instance of plc client var client = new Libplctag(); // create the tag var tag = new Tag(comm.ipAddress, comm.path, comm.cput, comm.tagname, comm.dtInt, comm.elemCount); if (comm.cput != CpuType.LGX) { tag = new Tag(comm.ipAddress, comm.cput, comm.tagname, comm.dtInt, comm.elemCount); } // add the tag client.AddTag(tag); // check that the tag has been added, if it returns pending then retry while (client.GetStatus(tag) == Libplctag.PLCTAG_STATUS_PENDING) { Thread.Sleep(100); } // if the status is not ok, then handle error if (client.GetStatus(tag) != Libplctag.PLCTAG_STATUS_OK) { MessageBox.Show($"ERROR: Unable to set up tag internal state.\n {client.DecodeError(client.GetStatus(tag))}\n", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error); return; } // determine if reading or writing to plc if (writeCheckBox.Checked) { // writing to plc switch (DataTypeComboBox.Text) { case "Int8": writeInt8Val(tag, client, sbyte.Parse(comm.valToWrite), true); break; case "Int16": writeInt16Val(tag, client, Convert.ToInt16(comm.valToWrite), true); break; case "Int32": writeInt32Val(tag, client, Convert.ToInt32(comm.valToWrite), true); break; case "Float32": writeFloat32Val(tag, client, float.Parse(comm.valToWrite), true); break; case "String": writeStringVal(tag, client, comm.valToWrite, true); break; default: MessageBox.Show("Invalid Data Type", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error); break; } // write the values var result = client.WriteTag(tag, DataTimeout); if (result != Libplctag.PLCTAG_STATUS_OK) { MessageBox.Show($"Error: Unable to read the data. Got error code {result}: {client.DecodeError(result)}\n"); return; } } else if (!writeCheckBox.Checked) { // reading from plc var result = client.ReadTag(tag, DataTimeout); if (result != Libplctag.PLCTAG_STATUS_OK) { MessageBox.Show($"Error: Unable to read the data. Got error code {result}: {client.DecodeError(result)}\n"); return; } switch (DataTypeComboBox.Text) { case "Int8": readInt8Val(tag, client); break; case "Int16": readInt16Val(tag, client); break; case "Int32": readInt32Val(tag, client); break; case "Float32": readFloat32Val(tag, client); break; case "String": readStringVal(tag, client); break; default: MessageBox.Show("Invalid Data Type", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error); break; } } else { // no defined action: reading/writing MessageBox.Show("Error: No defined action.", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error); } // close and cleanup resources client.Dispose(); Console.Read(); }
static void Main(string[] args) { var client = new Libplctag(); const string PLC_IP = "192.168.10.10"; const string PLC_PATH = "1, 0"; const CpuType PLC_TYPE = CpuType.LGX; var TAG_CONTROL_WORD = new Tag(PLC_IP, PLC_PATH, PLC_TYPE, "CONTROL_WORD", DataType.Int32, 1); var TAG_SHELL_LENGTH = new Tag(PLC_IP, PLC_PATH, PLC_TYPE, "SHELL_LENGTH", DataType.Float32, 1); var TAG_STATUS_WORD = new Tag(PLC_IP, PLC_PATH, PLC_TYPE, "STATUS_WORD", DataType.DINT, 1); var TAG_PC_HEARTBEAT = new Tag(PLC_IP, PLC_PATH, PLC_TYPE, "PC_HEARTBEAT", DataType.Int8, 1); var TAG_MOVE_HOME = new Tag(PLC_IP, PLC_PATH, PLC_TYPE, "MOVE_HOME", DataType.SINT, 1); var TAG_LINTY = new Tag(PLC_IP, PLC_PATH, PLC_TYPE, "LINTY", DataType.LINT, 1); var tags = new List <Tag> { TAG_CONTROL_WORD, TAG_SHELL_LENGTH, TAG_STATUS_WORD, TAG_PC_HEARTBEAT, TAG_MOVE_HOME, TAG_LINTY, }; /* create the tag(s) */ foreach (var tag in tags) { client.AddTag(tag); } /* let the connect succeed we hope */ foreach (var tag in tags) { 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.Name}' internal state. Error {client.DecodeError(client.GetStatus(tag))}\n"); return; } } /* get the data */ int rc; foreach (var tag in tags) { rc = client.ReadTag(tag, DataTimeout); if (rc != Libplctag.PLCTAG_STATUS_OK) { Console.WriteLine($"ERROR: Unable to read the '{tag.Name}' data! Got error code {rc}: {client.DecodeError(client.GetStatus(tag))}\n"); return; } } /* print out the data */ Console.WriteLine("\n\n{{{{{{{{{{{{{{{{{{{{{\n"); Console.WriteLine($"initial 'CONTROL_WORD' = { client.GetUint32Value(TAG_CONTROL_WORD, 0)}\n"); Console.WriteLine($"initial 'SHELL_LENGTH' = { client.GetFloat32Value(TAG_SHELL_LENGTH, 0)}\n"); Console.WriteLine($"initial 'STATUS_WORD' = { client.GetUint32Value(TAG_STATUS_WORD, 0)}\n"); Console.WriteLine($"initial 'PC_HEARTBEAT' = { client.GetUint8Value(TAG_PC_HEARTBEAT, 0)}\n"); Console.WriteLine($"initial 'MOVE_HOME' = { client.GetBitValue(TAG_MOVE_HOME, -1, DataTimeout)}\n"); Console.WriteLine($"initial 'LINTY' = { client.GetUint64Value(TAG_LINTY, 0)}\n"); Console.WriteLine($"initial 'CONTROL_WORD.2 (JOG_REV)' = { client.GetBitValue(TAG_CONTROL_WORD, 2, DataTimeout)}\n"); Console.WriteLine("---------------------\n"); /* now test a write */ /* TAG_CONTROL_WORD */ var controlVal = client.GetUint32Value(TAG_CONTROL_WORD, 0); if (controlVal == 0) { controlVal = 1; } else { controlVal = controlVal * 2; } Console.WriteLine($"setting 'CONTROL_WORD' = {controlVal}\n"); client.SetUint32Value(TAG_CONTROL_WORD, 0, controlVal); /* TAG_SHELL_LENGTH */ float shellLenVal = client.GetFloat32Value(TAG_SHELL_LENGTH, 0); shellLenVal = shellLenVal + (float)0.25; Console.WriteLine($"setting 'SHELL_LENGTH' = {shellLenVal}\n"); client.SetFloat32Value(TAG_SHELL_LENGTH, 0, shellLenVal); /* TAG_STATUS_WORD */ var statusVal = client.GetUint32Value(TAG_STATUS_WORD, 0); if (statusVal == 0) { statusVal = 1; } else { statusVal = statusVal * 2; } Console.WriteLine($"setting 'STATUS_WORD' = {statusVal}\n"); client.SetUint32Value(TAG_STATUS_WORD, 0, statusVal); /* TAG_PC_HEARTBEAT */ byte pcHeartbeatByteVal = client.GetUint8Value(TAG_PC_HEARTBEAT, 0); bool pcHeartbeatBitVal = Convert.ToBoolean(pcHeartbeatByteVal); pcHeartbeatBitVal = !pcHeartbeatBitVal; pcHeartbeatByteVal = Convert.ToByte(pcHeartbeatBitVal); Console.WriteLine($"setting 'PC_HEARTBEAT' = {pcHeartbeatByteVal}\n"); client.SetUint8Value(TAG_PC_HEARTBEAT, 0, pcHeartbeatByteVal); /* TAG_MOVE_HOME */ bool moveHomeVal = client.GetBitValue(TAG_MOVE_HOME, -1, DataTimeout); moveHomeVal = !moveHomeVal; Console.WriteLine($"setting 'MOVE_HOME' = {moveHomeVal}\n"); rc = client.SetBitValue(TAG_MOVE_HOME, -1, moveHomeVal, DataTimeout); if (rc != Libplctag.PLCTAG_STATUS_OK) { LogError($"ERROR: Unable to write the 'MOVE_HOME' data! Got error code {rc}: {client.DecodeError(rc)}\n"); return; } /* TAG_LINTY */ var lintyVal = client.GetUint64Value(TAG_LINTY, 0); if (lintyVal == 0) { lintyVal = 1; } else { lintyVal = lintyVal * 2; } Console.WriteLine($"setting 'LINTY' = {lintyVal}\n"); client.SetUint64Value(TAG_LINTY, 0, lintyVal); /* TAG_CONTROL_WORD.2 (JOG_REV) */ bool jogRevVal = client.GetBitValue(TAG_CONTROL_WORD, 2, DataTimeout); jogRevVal = !jogRevVal; Console.WriteLine($"setting 'CONTROL_WORD.2 (JOG_REV)' = {jogRevVal}\n"); rc = client.SetBitValue(TAG_CONTROL_WORD, 2, jogRevVal, DataTimeout); if (rc != Libplctag.PLCTAG_STATUS_OK) { LogError($"ERROR: Unable to write the 'CONTROL_WORD.2 (JOG_REV)' data! Got error code {rc}: {client.DecodeError(rc)}\n"); return; } foreach (var tag in tags) { rc = client.WriteTag(tag, DataTimeout); if (rc != Libplctag.PLCTAG_STATUS_OK) { if (rc == Libplctag.PLCTAG_ERR_NOT_ALLOWED) { Console.WriteLine($"READ-ONLY TAG: Unable to write the '{tag.Name}' data! Got error code {rc}: {client.DecodeError(rc)}\n"); continue; } LogError($"ERROR: Unable to write the '{tag.Name}' data! Got error code {rc}: {client.DecodeError(rc)}\n"); return; } } Console.WriteLine("=====================\n"); /* get the data again */ foreach (var tag in tags) { rc = client.ReadTag(tag, DataTimeout); if (rc != Libplctag.PLCTAG_STATUS_OK) { LogError($"ERROR: Unable to read the '{tag.Name}' data! Got error code {rc}: {client.DecodeError(rc)}\n"); return; } } /* print out the data */ Console.WriteLine($"latest 'CONTROL_WORD' = { client.GetUint32Value(TAG_CONTROL_WORD, 0) }\n"); Console.WriteLine($"latest 'SHELL_LENGTH' = { client.GetFloat32Value(TAG_SHELL_LENGTH, 0) }\n"); Console.WriteLine($"latest 'STATUS_WORD' = { client.GetUint32Value(TAG_STATUS_WORD, 0) }\n"); Console.WriteLine($"latest 'PC_HEARTBEAT' = { client.GetUint8Value(TAG_PC_HEARTBEAT, 0) }\n"); Console.WriteLine($"latest 'MOVE_HOME' = { client.GetBitValue(TAG_MOVE_HOME, -1, DataTimeout) }\n"); Console.WriteLine($"latest 'LINTY' = { client.GetUint64Value(TAG_LINTY, 0) }\n"); Console.WriteLine($"latest 'CONTROL_WORD.2 (JOG_REV)' = { client.GetBitValue(TAG_CONTROL_WORD, 2, DataTimeout) }\n"); Console.WriteLine("}}}}}}}}}}}}}}}}}}}}}\n"); client.Dispose(); //Console.ReadKey(); }
static void Main(string[] args) { var client = new Libplctag(); var tag = new Tag("192.168.0.100", CpuType.SLC, "B3:0", DataType.Int16, 1); client.AddTag(tag); var status = client.GetStatus(tag); if (status != Libplctag.PLCTAG_STATUS_OK) { LogError($"Error setting up tag internal state. Error {status}"); return; } /* get the data */ var 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)}"); return; } /* print out the data */ for (int i = 0; i < tag.ElementCount; i++) { Console.WriteLine($"data[{i}]={client.GetFloat32Value(tag, (i * tag.ElementSize))}"); } /* now test a write */ for (int i = 0; i < tag.ElementCount; i++) { var val = client.GetFloat32Value(tag, (i * tag.ElementSize)); val++; Console.WriteLine($"Setting element {i} to {val}"); client.SetFloat32Value(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)}"); 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)}"); return; } /* print out the data */ for (int i = 0; i < tag.ElementCount; i++) { Console.WriteLine($"data[{i}]={client.GetFloat32Value(tag, (i * tag.ElementSize))}"); } client.Dispose(); Console.ReadKey(); }
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(); }