2023年12月31日发(作者:)

FANUC Robot interface

免责声明:此文档仅供参考。可能部分翻译并不是很正确,有些文件或其它信息可能无法翻译,此外, 由于语言限制,一些内容在翻译后可能无法如预期,翻译者不承担此资料翻译中任何错误,遗漏或表达不当引起的责任,任何人士或企业需自己承担使用翻译内容的风险。

——2011年 2月

1 / 31

1、概述

FANUC Rotot Interface()是 Windows 软件模块,可以通过以太网与机器人进行读/写机器人数据。

<读取数据>

I/O、当前位置、数值寄存器、位置寄存器、字符串寄存器、注释、系统变量、KAREL 变量、任务状态和警报。

<写入数据>

I/O,数值寄存器,位置寄存器,字符串寄存器,注释,系统变量,KAREL 变量

FANUC Robot Interface 是一个 ActiveX 模块。这个文件描述了它的软件接口。 对象提供了读/写机器人输入/输出的方法。在集成 PMC 模块可以读写其 R 区域和 D 区域。

为了访问当前位置、位置寄存器、字符串寄存器、注释、系统变量、KAREL 变量、程序状态和报警历史,首先需要向 DataTable 对象(ble)添加所需的数据。FRRJIF 一次读取所有的 DataTable 对象。它被称为“刷新”。读取值并保持到下一次刷新。

(*)通过一次访问数据来减少读取 DateTable 数据。

机器人与 FANUC Robot Interface 只能有一个连接。一个机器人不能在多个 PC 之间有多个连接。一个机器人不能在 PC 上的多个应用程序之间有多个连接。无法保证多个 PC

或多个应用程序使用 FANUC Robot Interface 都能访问到机器人。

您需要购买一套 FANUC Robot Interface(A08b-9410-j575)用到一台开发 PC。对于额外的许可证,您需要购买一套 FANUC Robot Interface 运行库(A08b-9410-J576) 或一个包含硬件保护器 FANUC Robot Interface 运行库(A08b-9410-J578)或一个带有USB 保护器

FANUC Robot Interface 运行库(A08b-9410-J579)用到一台 PC 上。

你可以在安装 FANUC Robot Interface 后 30 天内试用。您需要输入注册密钥,以便在试用过期后使用它。许可证管理器(任务栏启动/程序/fanuc 机器人/许可证管理器)将向您展示 Robot Interface(RTL-ROBOTIDEM)软件代码。您将把代码发送到 FANUC 销售,然

2 / 31

后获得注册密钥。输入注册钥匙后请重新启动电脑。

或者你可以用 hart key(Printer port type)或 USB hart key 来购买 FANUC Robot Interface。如果你在你的电脑上插入一个 hart key,你不需要输入密码。

FANUC Robot Interface 没有文件传输功能。您可以使用 FTP 来在 PC 和机器人之间传输文件。

3 / 31

基本流程图

读取数据

写入数据

开始

开始

创建 Core 对象

创建 Core 对象

设置 DataTable

设置 DataTable

连接

连接

读取 IO

写入 IO

DataTable 刷新

写入数据

读取数据

断开连接

结束

断开连接

结束

(*)数据读取是一种循环扫描的过程。由于 Robot Interface 应用程序是周期性地读取数据,所以不能得到所有数据交换。

4 / 31

5 / 31

2、环境

操作系统:

Microsoft Windows XP (32bit), Windows Vista (32bit) , Windows 7(32bit) , Windows

7(64bit) (*1)

开发语言:

Microsoft Visual Basic 6.0 + Service pack6

Microsoft Visual Basic 2008 + Service pack1

Microsoft Visual Basic 2010

Microsoft Visual C++ 6.0 + Service pack6 (*2)

Microsoft Visual C++ 2008 + Service pack1

Microsoft Visual C++ 2010

Microsoft Visual C# 2008 + Service pack1

Microsoft Visual C# 2010

(*2)

机器人控制装置:

R‐J3iB 7D80/45 or later

R‐J3iB 7D81/09 or later

R‐J3iB 7D82/01 or later

R‐J3iB Mate 7D91/01 or later

R‐30iA, R‐30iA Mate All Versions (*3)

ROBOGUIDE: (*3)

ROBOGUIDE V7 Rev.F(7N06) or later

Virtual Robot R‐30iA 7DA5/15 or later

Virtual Robot R‐30iA 7DA7/13 or later

PC 必须通过以太网与机器人进行通信。(干扰不能阻止通讯,需要正确的安全设置。)

(*)不支持虚拟 PC、VMWare 和类似软件。

不支持 Windows 7 的 Windows XP 模式,不支持远程桌面。

(*1)即使您使用的是 Windows x64,您也需要使用 robot interfeace 来开发 32 位应用程序,而不是 64 位应用程序。您需要将您的项目指定为 x86。

6 / 31

(*2)你可以在 Windows XP 上用 Visual Basic 6.0 和 Visual C++ 6.0 开发 robot interfeace 应用程序。

(*3)如果选择 R650 FRA Params,则需要 R553“HMI 设备(SNPX)”。如果选择 R651 FRL Params,则不需要选择

(*4) 请参阅“6。连接到 ROBOGUIDE”

(*)Windows,Visual Basic,Visual C++,Visual C#是微软在美国或其他国家合作的注册商标。

7 / 31

3、局限性

当您更新 FANUC Rotot Interface 时,您可能需要用重新编译您的 FANUC Rotot

Interface 应用程序

Rotot Interface 通信响应时间不能保证。通信环境、机器人状态和 PC 状态可能影响响应时间。

如果有干扰影响通信,Rotot Interface 可能无法工作。例如,Rotot Interface 在机器人工作过程中可能无法正常工作。你需要屏蔽以太网电缆或将电缆从干扰源中分离出来。

5 / 31

6 / 31

4、新特性

4.1 V2.0.2 版本新特性

— 支持Visual Basic 2010,Visual C++2010,Visual C#2008 和 Visual C#2010。

— 支持的Windows 7(64 位)。

— 受支持的字符串数据(字符串寄存器和注释)

请参阅 ble。AddString ring。

— 支持焊接I/O 和模拟 I/O。

请参阅 读写 I/O。

— 支持KAREL 变量。

请参阅 Var。

— ble 可以有 80 个项目。移除这个限制。

— ue 支持的程序名超过 8 个字符。

— 支持与ROBOGUIDE 连接。请参阅“6。连接到 ROBOGUIDE”。

4.2 V2.0.1 版本新特性

— 支持Windows 7。

— 改变了写I/O

在以前的版本中,一次输入输出是 8 位。例如,DO[1-8]是一次写入。从 v2.0.1,入输出是 1 位。例如,可以单独编写 DO[1]。

4.3 V2.0.0 版本新特性

— 支持Visual Basic 2008,Visual C++6.0 和 Visual C++2008。

7 / 31

— 增加了Visual C++的方法。(请参考每个方法。)

— 支持Windows Vista。

— NumReg 补充。SetValues 方法,即一次编写一系列数字寄存器。

— 支持双字节报警信息。

— 支持新的许可证管理。

4.4 V1.3.0 版本新特性

— 添加了PosRegXyzwpr 对象和 DataTable。AddPosRegXyzwpr 方法是每次写入多个位置寄存器。

— 添加数据表。AddCurPosUF 方法,它是用一个用户框架读取当前位置。

8 / 31

5、对象引用

5.1 参 考

VB Visual Basic 6.0, Visual Basic 2008 and Visual Basic 2010 VB6 Visual Basic 6.0

VB2008 Visual Basic 2008 and Visual Basic 2010

VC++ Visual C++ 6.0, Visual C++ 2008 and Visual C++ 2010 VC++6 Visual

C++ 6.0

VC++2008 Visual C++ 2008 and Visual C++ 2010 C#

Visual C# 2008 and Visual C# 2010

5.2

5.2.1 方 法

— Connect Methods 连接方法

Connect、Disconnect、TimeOutValue

— IO Methods I/O 方法

ReadSDI, ReadSDO, ReadRDI, ReadRDO, ReadSI, ReadSO, ReadUI, ReadUO, ReadGI,

ReadGO, WriteSDI, WriteSDO, WriteRDO, WriteSO, WriteUO, WriteGI, WriteGO

— DataTable Methods 数据表方法DataTable

— Alarm Methods 报警方法ClearAlarm

— Protect Methods 保护方法

ProtectAvailable, ProtectTrialRemainDays, ProtectStatus

5.2.1.1

Connect – Connect to a robot(连接到机器人)

Function Connect(ByVal HostName As String) As Boolean

VB:

VC++:

BOOL Connect(LPCTSTR HostName);

bool Connect(string HostName)

C#:

指定机器人主机名(或 IP 地址)作为参数。

7 / 31

在调用这个方法之前,您需要初始化 DataTable。

连接成功返回 True,失败返回 False。如果受到保护,也返回 False。可以使用ProtectAvailable 方法来检查保护。

5.2.1.2

Disconnect – Disconnect from a robot(与机器人断开连接)

VB:

VC++:

C#:

Function Disconnect() As Boolean

BOOL Disconnect();

bool Disconnect()

8 / 31

断开成功返回 True,失败返回 False。

(*)当断开连接时,请删除所有 FRRJIF 对象。如果需要再次连接,请重新创建对象。

5.2.1.3

TimeOutValue - Time out value(超时)

VB:

VB2008:

VC++6:

VC++2008:

C#:

Property TimeOutValue As Long

get_TimeOutValue As Integer set_TimeOutValue(ByVal newValue As Integer)

long GetTimeOutValue(); void SetTimeOutValue(long nNewValue);

long

get_TimeOutValue(); void put_TimeOutValue(long newValue);

int get_TimeOutValue() void set_TimeOutValue(int

newValue)

这是通信错误的时间值。默认值是 10000(msec),最小值是 100。如果你设置的时间太小,你可能经常会遇到时间超时错误。在删除 Core 对象时,指定的时间值也会被清除,当创建 Core 对象时,请重新指定超时。

(*)当超时时,请断开并删除所有 FRRJIF 对象。如果您需要再次连接,请重新创建对象。

5.2.1.4

读取I/O:ReadSDI, ReadSDO, ReadRDI, ReadRDO, ReadSI, ReadSO, ReadUI, ReadUO,

ReadGI, ReadGO – Read I/O

VB6:

VB2008:

VC++6:

VC++2008

C#

Function ReadXXX(Index As Long, Buffer() As Integer, Count As Long) As

Boolean

Function ReadXXX(ByVal Index As Integer, ByRef Buffer As ,

ByVal Count As Integer) As Boolean

long X(short Index, short* Buf, short Cnt);

long X(short Index, short * Buf, short Cnt);

bool ReadXXX(int Index, ref Buffer, int Count)

(XXX 可以是 SDI,SDO,RDI,RSO,SI,SO,UI,UO 其中之一)

VB6:

VB2008:

VC++6:

Function ReadXX(Index As Long, Buffer() As Long, Count As Long) As Boolean

Function ReadXX(ByVal Index As Integer, ByRef Buffer As , ByVal Count

As Integer) As Boolean

long (short Index, long* Buf, short Cnt);

VC++2008

long (short Index, long * Buf, short Cnt);

C# bool ReadXX(int Index, ref Buffer, int Count)

(XX 可以是 GI 或 GO)

9 / 31

这个方法可读取一系列的 I/O。

指定引用的 I/O、整型(或长整型)数组的第一个索引储存值和引用的 I/O 数量作为参数。

可以使用 ReadSDO 方法读取集成 PMC 模块的 K 区域(SDO[10001]或更高版本)和 R 区域(SDO[11001]或更高版本)。但是,您不能一次同时读取 K 区域和 R 区域。你需要分别读取 K 区域和 R 区域。

10 / 31

可以使用 ReadGO 方法读取集成 PMC 模块的 D 区域(GO[1000]或更高版本)。但是,

您不能一次同时读取一般的 GO 和 D 区域。你需要分别读取一般的 GO和D 区。

您可以使用 ReadSDI 方法读取 WI。你需要在索引中添加 8000。例如,您需要指定8001 才能读取 WI[1]。

您可以使用 ReadSDI 方法读取 WSI。您需要在索引中添加 8400。例如,为了读取WSI[1],您需要指定 8401。

您可以使用 ReadSDO 方法读取 WO。你需要在索引中添加 8000。例如,你需要请指定 8001,以便读取 WO[1]。

你可以用 ReadGI 方法阅读 AI。你需要在索引中添加 1000。例如,为了读取 AI[1], 您需要指定 1001。

你可以用 ReadGO 方法读取 AO。你需要在索引中添加 1000。例如,为了读取 AO 1,

您需要指定 1001。

在 Visual Basic、C#中,读取成功返回 True,失败返回 False。Visual C++中成功返回 0,失败返回非 0。Visual Basic、C#中的返回值不同于 Visual C++。(当读取不存在的 I/O 时,该方法返回 True。在这种情况下,值是未知的值。)

例如:读取 SDI[1]-SDI[5]

Read SDI[1] to SDI[5]

Dim intBuffer(0 to 4) As In Integer Dim

blnResult As Boolean

blnResult=I(1,INTUFFER(),5)

(*)您最好一次读取多个的 I/O,以减少读取时间。

(*)长数组需要到 GI、GO.

5.2.1.5

WriteSDI, WriteSDO,WriteRDO,WriteSO,WriteUO,WriteGI,WriteGO– Write I/O

(写入I/O)

VB6:

VB2008:

Function WriteXXX(Index As Long, Buffer() As Integer, Count As Long) As

Boolean

Function WriteXXX(ByVal Index As Integer, ByRef Buffer As , ByVal

Count As Integer) As Boolean

11 / 31

VC++6:

long XX(short Index, short* Buf, short Cnt);

VC++2008

long XX(short Index, short * Buf, short Cnt);

C#

bool WriteXXX(int Index, ref Buffer, int Count)

(XXX 可以是SDI, SDO, RDO, SO ,UO其中之一)

VB6:

VB2008:

VC++6:

VC++2008

C#

Function WriteXX(Index As Long, Buffer() As Long, Count As Long) As Boolean

Function

WriteXX(ByVal Index As Integer, ByRef Buffer As ,

ByVal Count As Integer) As Boolean

long X(short Index, long* Buf, short Cnt);

long X(short Index, long * Buf, short Cnt)

WriteXX(int Index, ref Buffer, int Count)

(XX 可以是 GI或GO)

12 / 31

这种方法可写入一系列的 I/O。

指定第一个写入的 I/O,整型(或长整型)数组的第一个索引储存值和引用的 I/O 数量作为参数。

可以使用 WriteSDO 方法写入集成 PMC 模块的 K 区域(SDO[10001]或更高版本)和R

区域(SDO[1100]或更高版本)。但是,不能一次同时写 K 区域和 R 区域,需要分别写K 区域和 R 区。

可以使用 ReadGO 方法写入集成 PMC 模块的 D 区域(GO[10001]或更高版本)。但是,

不能一次同时写入一般的 GO 和 D 区域。需要分别写出一般的 GO和D 区。

可以用 WriteSDO 方法来写入 WO。需要在索引中添加 8000。例如,为了写入 WO[1],

需要指定 8001。

可以用 WriteGO 方法写 AO。你需要在索引中添加 1000。例如,为了写入 AO[1], 需要指定 1001。

Visual Basic、C#中写入成功返回 True,失败返回 False。在 Visual C++中成功返回 0 或正数,失败返回负数。Visual Basic、C#中的返回值不同于 Visual C++。(当读取不存在的

I/O 时,该方法返回 True。在这种情况下,值是未知的值。)

Set SDO[1] to SDO[5] to On Dim

intBuffer(0 to 4) As Integer

Dim blnResult As Boolean

Int Buffer(0)=1 Int

Buffer(1)=1

Buffer(2)=1

Buffer(3)=1

Buffer(4)=1

blnResult=DO(1,intBuffer(),5)

(*)最好一次写入多个 I/O,以减少写入时间。

(*)长数组是需要用到 GI、GO。

13 / 31

Int

Int

Int

(*)SDI 和 GI 可以模拟为写入。

5.2.1.6

DataTable——Get DataTable object(获取数据表对象)

VB6:

VB2008

VC++6:

VC++2008

C#

Property DataTable As DataTable

get_DataTable() As DataTable

LPDISPATCH GetDataTable();

LPDISPATCH get DataTable();

ble get DataTable()

该方法将返回 ble 对象

14 / 31

5.2.1.7

ClearAlarm —— Clear alarms(消除报警)

消除的报警记录。

VB:

VC++:

C#

Function ClearAlarm() As Boolean

BOOL ClearAlarm(long vlngType);

bool ClearAlarm(int vlngType)

对于 Visual c++,传递 0 作为 vlngType。成功返回 True,失败返回 False。

5.2.1.8

ProtectAvailable – Get protect availability (取得保护)

VB6:

VB2008

VC++6:

VC++2008

C#

Property ProtectAvailable As Boolean

get_ProtectAvailable() As Boolean

BOOL GetProtectAvailable();

BOOL

get_ProtectAvailable();

bool get ProtectAvailable()

如果 Rotot Interface 是有效的,这个属性是 TRUE。如果 Rotot Interface 保护无效,则此属性为 False。

5.2.1.9

ProtectTrialRemainDays -Get trial remain days (获取试用天数)

VB6:

VB2008:

VC++6:

VC++2008

C#

Property ProtectTrialRemainDays As Long

get ProtectTrialRemainDays() As Integer

long GetProtectTrialRemainDays();

long get ProtectTrialRemainDays();

int get ProtectTrialRemainDays()

(在试用期内,该属性返回试用天数。注册后,此属性返回 0。如果试用已过期,

此属性返回负值。)

5.2.1.10

ProtectStatus ——Get protect status string(获取保护状态)

VB6:

VB2008:

VC++6:

VC++2008

C#

Property ProtectStatus As String

get_ProtectStatus() As String

CString GetProtectStatus();

CString get ProtectStatus();

string get ProtectStatus()

15 / 31

在试用期中,这个属性返回“TRIAL #days”。(#剩余天数),注册后,属性返回“REGISTERED”。如果试用已过期,此属性返回“PROTECTED”。

备注

(*)当通信出现超时等故障时,请断开连接并删除所有 FRRJIF 对象。如果需要再次连接,请重新创建对象。

16 / 31

5.3 ble

5.3.1 Methods

— Data register methods 数据寄存器的方法

Clear,AddCurPos, AddCurPosUF, AddNumReg, AddPosReg, AddPosRegXyzwpr,

AddSysVar, AddSysVarPos, AddTask, AddAlarm, AddString

— Data read method 数据读取方法Refresh

5.3.1.1

Clear -Clear DataTable (清除数据表)

VB:

VC++:

C#

Function Clear() As Boolean

BOOL Clear();

bool Clear()

在连接后不用调用 Clear 方法。成功返回 Ture,失败返回 False。

5.3.1.2

AddCurPos -Register ‘Current position’ data to DataTable

(将“当前位置”数据记录到 DataTable)

VB6:

Function AddCurPos(DataType As FRIF_DATA_TYPE, Group As

Long) As DataCurPos

As Integer) As rPos

VB2008:

Function AddCurPos(ByVal DataType As _DATA_TYPE, ByVal Group

VC++:

C#

LPDISPATCH AddCurPos(long DataType, long Group);

rPos AddCurPos( DATA TYPE DataType, int Group)

指定

DataType

数据类型(CURPOS=3)和动作组号作为参数。

成功时,此方法返回 DataCurPos 对象。当失败时,此方法返回 Nothing。DataCurPos 对象是读取当前世界坐标位置。

17 / 31

例如:读取动作组 1 的当前位置

Register current position of motion group 1 Dim

objDataCurPos DataCurPos

Set objDataCurPos = Pos(CURPOS,1)

18 / 31

5.3.1.3

AddCurPosUF - Register ‘Current position with user frame’ data to DataTable (将“用户坐标中当前位置”数据记录到 DataTable)

VB6:

Function AddCurPosUF(DataType As FRIF_DATA_TYPE, Group As Long, UF As

Long) As DataCurPos

Function AddCurPosUF(ByVal DataType As _DATA_TYPE, ByVal Group

As Integer, ByVal UF As Integer) As rPos

VB2008:

VC++:

C#

LPDISPATCH AddCurPosUF(long DataType, long Group, long UF);

rPos AddCurPosUF(_DATA_TYPE DataType, int Group, int

UF)

指定

DataType

数据类型(CURPOS=3)、动作组号和用户坐标号作为参数。

当成功时,这个方法返回 DataCurPos 对象。当失败时,这个方法返回 Nothing。DataCurPos 对象是在指定的用户坐标系下读取当前位置。用户坐标系编号为 0 时和世界坐标系一样。下面的用户坐标编号表示当前坐标编号。

7DA4(V7.40)before UF=15

7DA4/P01 – 7DA4/P11 UF=63

7DA4/P12 or later

例如:户坐标系 1 中动作组 1 的当前位置

Register current position of motion group 1 with user frame 1. Dim

objDataCurPos As DataCurPos

Set objDataCurPos = PosUF(CURPOS, 1, 1)

5.3.1.4

AddNumReg - Register numeric registers to DataTable

UF=-1

(数值寄存器记录到DataTable)

VB6:

Function AddNumReg(DataType As FRIF_DATA_TYPE, StartIndex As Long,

EndIndex As Long) As DataNumReg

VB2008:

Function AddNumReg(ByVal DataType As _DATA_TYPE, ByVal

19 / 31

StartIndex As Integer, ByVal EndIndex As Integer) As mReg

VC++:

C#

LPDISPATCH AddNumReg(long DataType, long StartIndex, long EndIndex);

mReg AddNumReg(_DATA_TYPE DataType, int StartIndex, int

EndIndex)

指定

DataType

数据类型(NUMREG_INT=0,for integer case,NUMREG_REAL=1 for

float case),数值寄存器的第一个和结束索引。

在 NUMREG_INT 指定时,float(浮点值)被转换成 integer(整数值)。当 NUMREG_REAL指定时,integer(整数值)被转换为 float(浮点值)。

成功时,这个方法返回 DataNumreg 对象。当失败时,这个方法返回 Nothing。

20 / 31

DataNumreg 对象是读/写数值寄存器的值。

例如:寄存器 R[1]-R[5]

Register R[1] to R[15] Dim

objDataNumReg As DataNumReg

Set objDataNumReg = Reg(NUMREG_INT, 1, 15)

5.3.1.5

AddPosReg - Register position registers to DataTable

(位置寄存器记录到 DataTable)

VB6:

Function AddPosReg(DataType As FRIF_DATA_TYPE, Group As

Long, StartIndex As Long, EndIndex As Long) As DataPosReg

VB2008:

Function AddPosReg(ByVal DataType As _DATA_TYPE, ByVal Group As

Integer, ByVal StartIndex As Integer, ByVal EndIndex As Integer) As sReg

VC++: LPDISPATCH AddPosReg(long DataType, long Group, long StartIndex, long

EndIndex);

C#

sReg AddPosReg(_DATA_TYPE DataType, int Group, int

StartIndex, int EndIndex)

指定

DataType

数据类型(POSREG=2),动作组号,位置寄存器的第一个和最后一个索引。

当成功时,这个方法返回 DataPosReg 对象。当失败时,这个方法返回 Nothing。DataPosReg 对象是读/写位置寄存器的值。

例如:动作组 1 中位置写入位置寄存器 PR[1]-PR[10]

Register PR[1] to PR[10] of motion group 1. Dim

objDataPosReg As DataPosReg

Set objDataPosReg = Reg(POSREG, 1, 1,10)

5.3.1.6

AddPosRegXyzwpr - Register position registers to DataTable

21 / 31

(位置寄存器记录到 DataTable)

VB6:

Function AddPosRegXyzwpr(DataType As FRIF_DATA_TYPE, Group As Long,

StartIndex As Long, EndIndex As Long) As DataPosRegXyzwpr

VB2008:

Function AddPosRegXyzwpr(ByVal DataType As _DATA_TYPE, ByVal

Group As Integer, ByVal StartIndex As Integer, ByVal EndIndex As

Integer) As sRegXyzwpr

VC++:

C#

LPDISPATCH AddPosRegXyzwpr(long DataType, long Group, long StartIndex, long

EndIndex);

sRegXyzwpr AddPosRegXyzwpr(_DATA_TYPE DataType, int

Group, int StartIndex, int EndIndex)

指定

DataType

数据类型(POSREG_XYZWPR=12),动作组号,位置寄存器的第一个和结束最后一个索引。

22 / 31

当成功时,该方法返回 DataPosRegXyzwpr 对象。当失败时,这个方法返回 Nothing。DataPosRegXyzwpr 对象是快速写入位置寄存器的值。

例如:动作组 1 中的位置写入位置寄存器 PR[1]-PR[10]

Register PR[1] to PR[10] of motion group 1. Dim

objDataPosRegXyzwpr As DataPosRegXyzwpr

Set objDataPosRegXyzwpr = RegXyzwpr (POSREG_XYZWPR, 1,

1,10)

5.3.1.7

AddSysVar - Register system variables (integer, real and string type) to DataTable

(向 DataTable 记录系统变量(整型、实数和字符串类型))

VB:

VC++:

C#

Function AddSysVar(DataType As FRIF_DATA_TYPE, SysVarName As

String) As DataSysVar

LPDISPATCH AddSysVar(long DataType, LPCTSTR SysVarName);

sVar

SysVarName)

AddSysVar(_DATA_TYPE DataType, string

指定 DataType(SYSVAR_INT=5 for integer,SYSVAR_REAL=6,for float,

SYSVAR_STRING=8 for string)和系统变量名。

注册 KAREL 变量时,指定“$[KAREL_PROGRAM]KAREL_VARIABLE”。例如,需要为HTTPKCL 的$CMDS[1]指定“$[HTTPKCL]CMDS[1]”。

当成功时,这个方法返回 DataSysVar 对象。当失败时,这个方法返回 Nothing。DataSysVar 对象是存取系统变量和 KAREL 变量。

Register $FAST_CLOCK Dim objDataSysVar As DataSysVar

Set objDataSysVar = Var(SYSVAR_INT, “$FAST_CLOCK”)

23 / 31

5.3.1.8

AddSysVarPos - Register system variables (position type) to DataTable

(向DataTable 记录系统变量(位置类型))

VB6: Function AddSysVarPos(DataType As FRIF_DATA_TYPE, SysVarName As

String) As DataSysVarPos

VB2008: Function AddSysVarPos(ByVal DataType As _DATA_TYPE, ByVal

SysVarName As String) As sVarPos

VC++: LPDISPATCH AddSysVarPos(long DataType, LPCTSTR SysVarName);

C#

sVarPos AddSysVarPos(_DATA_TYPE DataType, string

SysVarName)

指定 DataType(SYSVAR_POS=7)和系统变量名。

注册 KAREL 变量时指定“$[KAREL_PROGRAM]KAREL_VARIABLE”。例如,需要为HTTPKCL 的$CMDS[1]指定“$[HTTPKCL]CMDS[1]”。

24 / 31

当成功时,该方法返回 DataSysVarPos 对象。当失败时,这个方法返回 Nothing。DataSysVarPos 对象是存取位置类型系统变量和 KAREL 变量。

Register $MNUTOOL[1,1]

Dim objDataSysVarPos As DataSysVarPos

Set objDataSysVarPos = VarPos(SYSVAR_POS, “$MNUTOOL[1,1]”)

5.3.1.9

AddTask - Register program execution status to DataTable

(将程序执行状态记录到 DataTable)

VB6:

Function AddTask(DataType

As FRIF_DATA_TYPE, Index As

Long) As DataTask

VB2008:

Function AddTask(ByVal DataType As _DATA_TYPE, ByVal Index

As Integer) As sk

VC++:

C#

LPDISPATCH AddTask(long DataType, long Index);

sk AddTask( DATA TYPE DataType, int Index)

指定 DataType(TASK=4)和任务编号。

当两个任务在多个任务系统中运行时,任务 1 是访问第一个任务,任务 2 是访问第二个任务。任务在执行时保持任务编号。

当成功时,这个方法返回 DataTask 对象。当失败时,这个方法返回 Nothing。DataTask 对象是读取程序执行状态。

Register task number 1 Dim

objDataTask As DataTask

Set objDataTask = k(TASK, 1)

5.3.1.10

AddAlarm - Register alarm history to DataTable

25 / 31

(将报警历史记录到 DataTable)

VB6:

VB2008:

Function AddAlarm(DataType As

Long) As DataAlarm

FRIF_DATA_TYPE, Count As

Function AddAlarm(ByVal DataType As _DATA_TYPE, ByVal

AlarmCount As Integer, Optional ByVal AlarmMessageMode As Integer = 0) As

arm

VC++:

C#

LPDISPATCH AddAlarm(long DataType, long AlarmCount, long AlarmMessageMode);

arm AddAlarm(_DATA_TYPE DataType, int AlarmCount, int

AlarmMessageMode)

指定

DataType

数据类型为 ALARM_CURRENT(=10) 用于报警引用,指定

DataType

数据类型 ALARM_LIST(=9)用于报警历史引用和来自顶部的报警项的数量。指定报警讯息AlarmMessageMode 在 Visual C++中是 0。

26 / 31

当成功时,这个方法返回 DataAlarm 对象。当失败时,这个方法返回 Nothing。DataAlarm 对象是读取报警历史。

register five alarm items Dim

objDataAlarm As DataAlarm

Set objDataAlarm = rm(ALARM_LIST, 5)

6.3.1.11 AddString - Register string data to DataTable

(字符串寄存器记录到DataTable)

VB6:

Function AddString(DataType As FRIF_DATA_TYPE, StartIndex As

Long, EndIndex As Long) As DataNumReg

VB2008:

Function AddString(ByVal DataType As _DATA_TYPE,

ByVal StartIndex As Integer, ByVal EndIndex As Integer) As mReg

VC++:

C#

LPDISPATCH AddString(long DataType, long StartIndex, long EndIndex);

ring AddString(_DATA_TYPE DataType,

StartIndex, int EndIndex)

int

指定下列之一为数据类型

String register STRREG(=13)

String register comment STRREG_COMMENT(=14) Numeric

register comment NUMREG_COMMENT(=15) Position

register comment POSREG_COMMENT(=16) SDI comment

SDI_COMMENT(=17)

SDO comment SDO_COMMENT(=18) RDI

comment RDI_COMMENT(=19) RDO comment

RDO_COMMENT(=20) UI comment

UI_COMMENT(=21) UO comment

UO_COMMENT(=22) SI comment

SI_COMMENT(=23) SO comment

SO_COMMENT(=24) WI comment

WI_COMMENT(=25) WO comment

27 / 31

WO_COMMENT(=26) WSI comment

WSI_COMMENT(=27) GI comment

GI_COMMENT(=29) GO comment

GO_COMMENT(=30) AI comment

AI_COMMENT(=31) AO comment AO_COMMENT(=32

当成功时,这个方法返回 DataString 对象。当失败时,这个方法返回 Nothing。DataString 对象是访问字符串数据

28 / 31

register five string registers Dim

objDataString As DataString

Set objDataString = ing(STRREG, 1, 5)

5.3.1.12 Refresh - Read data values from robot to refresh data

(读取机器人数据值以刷新 DataTable 数据)

VB:

VC++:

C#

Function Refresh() As Boolean

BOOL Refresh();

bool Refresh()

当调用 Refresh 方法时,会刷新 DataTable 对象的数据。DataTable 对象保留该值, 直到下一次Refresh 方法调用。如果你想要获得最新的机器人数据,你需要调用 Refresh 方法。如果你不调用这个方法,数据表上的数据就不会改变。

成功返回 True,失败返回 False。

备注:

(*)在连接之前,必须调用 AddCurPos 之类的数据寄存器方法。连接后不能调用数据记录方法。如果需要更改数据表,那么您需要断开连接,删除所有 FRRJIF 对象并重新创建数据表。

29 / 31

30 / 31

5.4 rPos

5.4.1 Methods(方法)

Valid,GetValue

5.4.1.1

Valid-Check object validity (检查对象的有效性)

VB:

VC++6:

VC++2008

C#

Property Valid As Boolean (read only)

BOOL GetValid();

BOOL get_Valid();

bool Valid { get; }

当这个对象有效时,返回 True。当这个对象无效时,返回 False

5.4.1.2

GetValue - Read current position (读取当前位置)

VB6:

Function GetValue(Xyzwpr() As Single, Config() As Integer, Joint() As Single, UF As

Integer, UT As Integer, validc As Integer, validj As Integer) As Boolean

VB2008:

Function GetValue(ByRef Xyzwpr As , ByRef

Config As , ByRef Joint As , ByRef UF As Short, ByRef UT

As Short, ByRef ValidC As Short, ByRef ValidJ As Short) As Boolean

VC++:

BOOL GetValueXyzwpr(float* X, float* Y, float* Z, float* W, float* P, float* R, float*

E1, float* E2, float* E3, short* C1, short* C2, short* C3, short* C4, short* C5, short* C6,

short* C7, short* UF, short* UT, short* validc);

BOOL GetValueJoint(float* J1, float* J2, float* J3, float* J4, float* J5, float* J6, float*

J7, float* J8, float* J9, short* UT, short* ValidJ);

C#

bool GetValue(ref Xyzwpr, ref Config, ref Joint, ref

short UF, ref short UT, ref short ValidC, ref short ValidJ)

在 Visual Basick 中参数 Xyzwpr()返回笛卡尔坐标值。Xyzwpr()应该有 9 个元素

(机器人 6 轴+3 个扩展轴)。

参数 Config()将返回当前位置的配置。Config(0)到 Config(3)的意思是:

Config(0)

Config(1)

Config(2)

Config(3)

Non 0

F(Flip)

L(Left)

U(Up)

T(Front)

0

N(NonFlip)

R(Right)

D(Down)

B(Back)

Config(4)到 Config(6)意味着转数。

31 / 31

关节参数 Joint()将返回关节值。Joint()应该有 9 个元素(机器人 6 轴+3 个扩展轴)

参数 UF 将返回用户坐标系号。参数 UT 将返回工具坐标系号。

当当前位置有有效的笛卡尔坐标值时,参数 ValidC 为非 0。当当前位置没有有效

32 / 31

的笛卡尔坐标值时,参数 ValidC 为 0。当当前位置有有效的关节值时,参数 ValidJ 为非 0。当当前位置没有有效的关节值时,参数 ValidJ 为 0。(例如,动作组 2 的伺服枪在 ValidC 中返回为 0)

在 Visual C++中,使用 GetValueXyzwpr 来获得笛卡尔坐标值,并使用getvalueJoint 来获得关节值。不要使用数组作为参数。

成功返回 True,失败返回 False。

5.5 mReg

5.5.1 Methods(方法)

Valid,GetValue,SetValues

5.5.1.1

Valid-Check object validity

(检查对象的有效性)

当这个对象有效时,返回 True。当这个对象无效时,返回 False

5.5.1.2

GetValue - Read numeric register value (读取数值寄存器值)

VB:

VC++6:

VC++2008

C#

Property Valid As Boolean (read only)

BOOL GetValid();

BOOL get_Valid();

bool Valid { get; }

VB6:

VB2008:

VC++:

C#

Function GetValue(Index As Long, Value As Variant) As Boolean

Function GetValue(ByVal Index As Integer, ByRef Value As Object) As Boolean

BOOL GetValue(long Index, VARIANT* Value);

bool GetValue(int Index, ref object Value)

指定目标数字寄存器的索引。参数值将返回值,成功返回 True,失败返回 False。

5.5.1.3

SetValue - Set numeric register value (设置数值寄存器值)

33 / 31

VB6:

Function SetValue(Index As Long, Value) As Boolean

这种方法是为了兼容性。请使用 SetValus 代替 SetValue。成功返回 True,失败返回

False。

34 / 31

5.5.1.4

SetValues – Set a series of numeric register values

(设置一系列数值寄存器的值)

VB6:

Function SetValues(Index

As Long, Value As Variant, Count As

Long) As Boolean

VB2008:

Function SetValues(ByVal Index As Integer, ByVal Value As Object,

ByVal Count As Integer) As Boolean

VC++:

C#

BOOL SetValuesInt(long Index, long* Value, long Count);

BOOL SetValuesReal(long Index, float* Value, long Count);

bool SetValues(int Index, object Value, int Count)

这种方法是一次设置一系列的数字寄存器值。它比 SetValue 方法快。

指定第一个目标数字寄存器的索引。设置值时参数值为数组。指定用于参数计数的寄存器数量。

在 Visual C++中,使用 SetValuesInt 来设置整数值,使用 SetValuesReal 来设置真实值。成功返回 True,失败返回 False。

5.6 sReg

5.6.1 Methods (方法)

Valid,GetValueJOINT,SetValueXyzwpr

5.6.1.1

Valid - Check object validity

(检查对象的有效性)

VB:

VC++6:

VC++2008

C#

Property Valid As Boolean (read only)

BOOL GetValid();

BOOL get_Valid();

bool Valid { get; }

当这个对象有效时,返回 True。当这个对象无效时,返回 False。

35 / 31

5.6.1.2

GetValue - Read position register value(读取位置寄存器值)

VB6:

Function GetValue(Index As Long, Xyzwpr() As Single, Config() As Integer,

Joint() As Single, UF As Integer, UT As Integer, validc As Integer, validj As

Integer) As Boolean

VB2008:

Function GetValue(ByVal Index As Integer, ByRef Xyzwpr As ,

ByRef Config As , ByRef Joint As , ByRef UF As Short,

ByRef UT As Short, ByRef ValidC As Short, ByRef ValidJ As Short) As Boolean

36 / 31

VC++: BOOL GetValueXyzwpr(long Index, float* X, float* Y, float* Z, float* W, float* P,

float* R, float* E1, float* E2, float* E3, short* C1, short* C2, short* C3, short* C4,

short* C5, short* C6, short* C7, short* UF, short* UT, short* validc);

BOOL GetValueJoint(long Index, float* J1, float* J2, float* J3, float* J4, float* J5,

float* J6, float* J7, float* J8, float* J9, short* UT, short* ValidJ);

C#

bool

Config,

ValidJ)

GetValue(int Index, ref Xyzwpr, ref

ref Joint, ref short UF, ref short UT, ref short ValidC, ref short

指定目标位置寄存器的索引。ue 方法的参数和其它参数是一样的。成功返回 True,失败返回 False。

5.6.1.3

SetValueJoint - Set joint value to position register

(将关节值设置到位置寄存器)

Function SetValueJoint(Index As Long, Joint() As Single, UF As Integer, UT As

Integer) As Boolean

VB2008:

Function SetValueJoint(ByVal Index As Integer, ByRef Joint As ,

ByVal UF As Short, ByVal UT As Short) As Boolean

VC++:

BOOL SetValueJoint2(long Index, float J1, float J2, float J3, float J4, float J5, float J6,

float J7, float J8, float J9, short UF, short UT);

C#

bool SetValueJoint(int Index, ref Joint, short UF, short UT)

VB6:

指定目标位置寄存器的索引。指定关节值、配置和用户坐标系号和工具坐标系号到Joint(),Config(),UF 和 UT。

成功返回 True,失败返回 False。

5.7 sRegXyzwpr

5.7.1 Methods(方法)

Valid,SetValueXyxwpr,Update,Reset

37 / 31

5.7.1.1

Valid - Check object validity

(检查对象的有效性)

当这个对象有效时,返回 True。当这个对象无效时,返回 False。

VB:

VC++6:

VC++2008

C#

Property Valid As Boolean (read only)

BOOL GetValid();

BOOL get_Valid();

bool Valid { get; }

38 / 31

5.7.1.2

SetValueXyzwpr - Store Cartesian value to buffer

(将笛卡尔值存储到缓冲区)

VB6:

Function SetValueXyzwpr(Index As Long, Xyzwpr() As Single,

Config() As Integer) As Boolean

VB2008:

Function SetValueXyzwpr(ByVal Index As Integer, ByRef Xyzwpr As

, ByRef Config As ) As Boolean

VC++:

BOOL SetValueXyzwpr2(long Index, float X, float Y, float Z, float W, float P,

float R, float E1, float E2, float E3, short C1, short C2, short C3, short C4, short

C5, short C6, short C7);

C#

bool SetValueXyzwpr(int Index, ref Xyzwpr, ref Config)

指定目标位置寄存器的索引。指定笛卡尔坐标值和配置。数据存储在缓冲区中。数据不会立即转移。可通过多次调用 SetValueXyzwpr 来存储一系列位置寄存器,然后通过调用 Update 方法来传输储存的数据。

在 Visual C++中,使用每个值,而不是数组。成功返回 True,失败返回 False。

5.7.1.3

Update - Transfer buffered data to robot position register

(将缓冲数据传输到机器人位置寄存器)

VB:

VC++:

C#

Function Update() As Boolean

BOOL Update();

bool Update()

这种方法是将缓冲区中的数据传输给机器人。传输的数据是从调用SetValueXyzwpr 的最小索引到调用 SetValueXyzwpr 的最大索引。(不调用SetValueXyzwpr 时的传输数据是零值。)在传输之后,缓冲区被重置。

成功返回 True,失败返回 False

5.7.1.4

Reset - Reset the buffer 重置缓冲区

VB:

VC++:

C#

Sub Reset( )

void Reset();

void Reset()

39 / 31

5.8 sVar

5.8.1 Methods(方法)

Valid,GetValue

40 / 31

5.8.1.1

Valid-Check object validity

(检查对象的有效性)

VB:

VC++6:

VC++2008

C#

Property Valid As Boolean (read only)

BOOL GetValid();

BOOL get_Valid();

bool Valid { get; }

当这个对象有效时,返回 True。当这个对象无效时,返回 False。

5.8.1.2

GetValue - Read system variable value (读取系统变量值)

VB6:

VB2008:

VC++:

C#

Function GetValue(Value As Variant) As Boolean

Function GetValue(ByRef Value As Object) As Boolean

BOOL GetValue(VARIANT* Value);

bool GetValue(ref object Value)

参数值将返回系统变量值。成功返回 True,失败返回 False。

5.8.1.3

SetValue - Set system variable value (设置系统变量值)

指定要设置的值。

VB6:

VB2008:

VC++:

C#

Function SetValue(Value As Variant) As Boolean

Function SetValue(ByVal Value As Object) As Boolean

BOOL SetValue(const VARIANT& Value);

bool SetValue(object Value)

成功返回 True,失败返回 False。

5.9 sVarPos

5.9.1 Methods(方法)

Valid,GetValue,SetValueJoint,SetValueXyzwpr

5.9.1.1

Valid - Check object validity

(检查对象的有效性)

VB:

VC++6:

VC++2008

C#

24 / 31

Property Valid As Boolean (read only)

BOOL GetValid();

BOOL get_Valid();

bool Valid { get; }

当这个对象有效时,返回 True。当这个对象无效时,返回 False。

25 / 31

5.9.1.2

GetValue - Read POSITION type system varible value

(读位置类型系统变量值)

VB6:

Function GetValue(Xyzwpr() As Single, Config() As Integer, Joint() As Single, UF As

Integer, UT As Integer, validc As Integer, validj As Integer) As Boolean

VB2008:

Function GetValue(ByRef Xyzwpr As , ByRef Config As

, ByRef Joint As , ByRef UF As Short, ByRef UT As Short,

ByRef ValidC As Short, ByRef ValidJ As Short) As Boolean

VC++:

BOOL GetValueXyzwpr(float* X, float* Y, float* Z, float* W, float* P, float* R,

float* E1, float* E2, float* E3, short* C1, short* C2, short* C3, short* C4, short* C5,

short* C6, short* C7, short* UF, short* UT, short* validc);

BOOL GetValueJoint(float* J1, float* J2, float* J3, float* J4, float* J5, float* J6,

float* J7, float* J8, float* J9, short* UT, short* ValidJ);

C#

bool GetValue(ref Xyzwpr, ref Config, ref Joint,

ref short UF, ref short UT, ref short ValidC, ref short ValidJ)

参数与 ue 方法参数一样。成功返回 True,失败返回 False。

5.9.1.3

SetValueJoint - Set joint value to system variable

(将关节值设置到系统变量)

VB6:

Function SetValueJoint(Joint() As Single, UF As Integer, UT As Integer) As

Boolean

VB2008: Function SetValueJoint(ByRef Joint As , ByVal UF As Short, ByVal

UT As Short) As Boolean

VC++:

C#

BOOL SetValueJoint2(float J1, float J2, float J3, float J4, float J5, float J6, float J7, float

J8, float J9, short UF, short UT);

bool SetValueJoint(ref Joint, short UF, short UT)

指定关节值、用户坐标系号和工具坐标系号到 Joint()、UF 和 UT。在 Visual C++ 中使用每个值,而不是数组。

成功返回 True,失败返回 False。

5.9.1.4

SetValueXyzwpr - Set Cartesian value to system variable

(将笛卡尔坐标系值设置到系统变量)

VB6:

Function SetValueXyzwpr(Xyzwpr() As Single, Config() As Integer, UF

26 / 31

As Integer, UT As Integer) As Boolean

VB2008: Function SetValueXyzwpr(ByRef Xyzwpr As , ByRef Config As

, ByVal UF As Short, ByVal UT As Short) As Boolean

VC++: BOOL SetValueXyzwpr2(float X, float Y, float Z, float W, float P, float R, float E1,

float E2, float E3, short C1, short C2, short C3, short C4, short C5, short C6, short C7,

short UF, short UT);

C#

bool SetValueXyzwpr(ref Xyzwpr, ref Config, short UF, short

UT)

指定笛卡尔坐标系值、配置、用户坐标系号和工具坐标系号到 Joint()、Config()、UF 和

UT。在 Visual C++中,使用每个值,而不是值数。成功返回 True,失败返回 False。

27 / 31