Пример #1
0
        private void writeFloat32Val(Tag tag, Libplctag client, float value, bool print)
        {
            var sb = new StringBuilder();

            for (int i = 0; i < tag.ElementCount; i++)
            {
                client.SetFloat32Value(tag, (i * tag.ElementSize), value);
            }
            if (print)
            {
                readFloat32Val(tag, client);
            }
        }
Пример #2
0
        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();
        }
Пример #3
0
        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();
        }
Пример #4
0
        private static bool RefreshTags(List <Tag> tags, Libplctag client)
        {
            foreach (var tag in tags)
            {
                if (tag.Name.StartsWith("F"))
                {
                    /* 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)}");
                        return(false);
                    }

                    /* print out the data */
                    for (int i = 0; i < tag.ElementCount; i++)
                    {
                        Console.WriteLine($"{tag.Name} 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++;
                        if (val > 1000)
                        {
                            val = 0;
                        }
                        Console.WriteLine($"{tag.Name} Setting element {i} to {val}");

                        client.SetFloat32Value(tag, (i * tag.ElementSize), val);
                    }

                    rc = client.WriteTag(tag, DataTimeout);

                    if (rc != Libplctag.PLCTAG_STATUS_OK)
                    {
                        LogError(
                            $"{tag.Name} ERROR: Unable to read the data! Got error code {rc}: {client.DecodeError(rc)}");
                        return(false);
                    }

                    /* get the data again*/
                    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)}");
                        return(false);
                    }

                    /* print out the data */
                    for (int i = 0; i < tag.ElementCount; i++)
                    {
                        Console.WriteLine($"{tag.Name} data[{i}]={client.GetFloat32Value(tag, (i*tag.ElementSize))}");
                    }
                }
                else
                {
                    /* 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)}");
                        return(false);
                    }

                    /* print out the data */
                    for (int i = 0; i < tag.ElementCount; i++)
                    {
                        Console.WriteLine($"{tag.Name} data[{i}]={client.GetInt16Value(tag, (i*tag.ElementSize))}");
                    }

                    if (!tag.Name.Contains("O") && !tag.Name.Contains("I")) // we can't write on I/O
                    {
                        /* now test a write */
                        for (int i = 0; i < tag.ElementCount; i++)
                        {
                            var val = client.GetInt16Value(tag, (i * tag.ElementSize));

                            val++;
                            if (val > 1000)
                            {
                                val = 0;
                            }
                            Console.WriteLine($"{tag.Name} Setting element {i} to {val}");

                            client.SetInt16Value(tag, (i * tag.ElementSize), val);
                        }

                        rc = client.WriteTag(tag, DataTimeout);

                        if (rc != Libplctag.PLCTAG_STATUS_OK)
                        {
                            LogError(
                                $"{tag.Name} ERROR: Unable to write the data! Got error code {rc}: {client.DecodeError(rc)}");
                            return(false);
                        }

                        /* get the data again*/
                        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)}");
                            return(false);
                        }

                        /* print out the data */
                        for (int i = 0; i < tag.ElementCount; i++)
                        {
                            Console.WriteLine($"{tag.Name} data[{i}]={client.GetInt16Value(tag, (i*tag.ElementSize))}");
                        }
                    }
                }
            }
            return(true);
        }