FCC83 使用教程

黄杰, 2017-11-18
root[a]linuxsand.info

本文作为 http://www.linuxsand.info/fanuc_tools/fcc83_faq.html 的补充。

通过点击上述链接,您可以了解 FCC83 是什么、能做什么,下面谈如何调用它进行编程实现。

核心代码调用(不含错误处理):

    using System;
    using FCC83;

    namespace FCC83_Console
    {
        class Program
        {
            static void Main()
            {
                RegisterWriter regWriter = new RegisterWriter("127.0.0.1"); // 使用真实的控制器时,填写相应的 IP
                if (!regWriter.Ready) // 检查是否具备写入条件:目标 IP 是否能到达,控制器的 HTTP KAREL 是否解锁
                {
                    Console.WriteLine("ERROR: " + regWriter.NotReadyReason); // 会显示未就绪的原因
                    return;
                }

                // 调用 FCC83 的写入方法;检查返回值,看是否写入成功……
                // 将 1 号数字寄存器的值改为 42
                bool ret = regWriter.Write(1, 42);
                Console.WriteLine(string.Format("write result: {0}", ret));
            }
        }
    }

添加运行图片2张


如下是带有错误处理的代码。

    using System;
    using FCC83;

    namespace FCC83_Console
    {
        class Program
        {
            static void Main(string[] args)
            {
                if (args.Length != 3)
                {
                    Console.WriteLine("USAGE: fcc83console.exe <ip> <index> <value>");
                    return;
                }

                // ip
                string _ip = args[0];
                var parts = _ip.Split(new char[] { '.' });
                if (parts.Length != 4)
                {
                    Console.WriteLine("Input IP address error.");
                    return;
                }
                byte[] address = new byte[4];
                for (int i = 0; i < 4; i++)
                {
                    if (!byte.TryParse(parts[i], out address[i]))
                    {
                        Console.WriteLine("Input IP address error.");
                        return;
                    }
                }
                // 至此,简单过滤了不合法的 IP 地址

                // index
                uint _index;
                if (!uint.TryParse(args[1], out _index))
                {
                    Console.WriteLine("user input index is not a number");
                    if (_index > 200)
                    {
                        Console.WriteLine("index: [1, 200], user input is invalid");
                    }
                    return;
                }
                // 至此,确认用户输入的是一个合法的数字寄存器序号(1 ~ 200 的数字)

                // value
                decimal _value = 0m;
                if (!Decimal.TryParse(args[2], out _value))
                {
                    Console.WriteLine("user input value is invalid");
                    return;
                }
                // 至此,确认用户输入的是一个合法的数值,可以尝试把它写入 FANUC 寄存器

                // start updating
                RegisterWriter regWriter = null; // 声明一个 RegisterWriter 对象
                try
                {
                    regWriter = new RegisterWriter(_ip); // 尝试初始化 RegisterWriter 对象,这里可能出错
                }
                catch (Exception re)
                {
                    Console.WriteLine(re.Message); // 出错原因只有一个:你所使用的 FCC83 库并没有得到授权
                    return;
                }
                if (!regWriter.Ready) // 检查是否具备写入条件:目标 IP 是否能到达,控制器的 HTTP KAREL 是否解锁
                {
                    Console.WriteLine("ERROR: " + regWriter.NotReadyReason); // 会显示未就绪的原因
                    return;
                }

                // 至此,终于万事俱备,调用写入方法;检查返回值,看是否写入成功……
                bool ret = regWriter.Write(_index, _value);
                Console.WriteLine(string.Format("write result: {0}", ret));

                // 实际上,FCC83 提供了 3 种写入方法
                // WriteFast    不检查是否写入成功(只要传入数据正确合法,总是能成功)
                // Write        检查写入成功
                // Write2       检查写入成功(特殊情况下使用:会先将目标寄存器写零,再写入预期值)
            }
        }
    }