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]
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。在这种情况下,值是未知的值。)
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 的当前位置
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 的当前位置
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]
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]
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]
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 变量。
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 变量。
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 对象是读取程序执行状态。
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 对象是读取报警历史。
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
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


发布评论