[ 博客首页 ]
黄杰, 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 检查写入成功(特殊情况下使用:会先将目标寄存器写零,再写入预期值)
}
}
}