Epson机器人编程初级阶(二)
Wait
等待时间与信号控制,时间默认单位是秒
Wait Sw(0) =On:等待输入0变为On状态 Wait 60.5:等待60.5秒后执行 Wait Sw(0) = Off And Sw(1) = On:等待输入0变为Off并且出入1变为On状态 Wait Memsw(0) = On Or Memsw(1) = On:等待储存位0变为啥On或存储位1变为On状态 Wait 1;On 1:等待1秒钟,然后将输出1变为On Wait In(0) Mask 7 = 1:在输入端口0的低3位变为1之前进行待机 Wait giCounter > 10:等待变量的值大于10 Wait giCounter = 30000,10:在变量的值到达30000之前,待机10秒钟
Tmr 函数
用于以秒为单位返回计时器开始计时之后的经过时间。格式 :Tmr (计时器编号) 参数 :计时器编号以表达式或数值指定整数(0~63),以确定对 64 个计时器中的哪个计时器进行检查。 返回值 :以实值(单位:秒)返回指定计时器的经过时间。计时器的范围为 0~约 1.7E+31。计时器的分辨率为0.001 秒。
说明 :用于返回指定计时器开始计时之后的经过时间。与 ElapsedTime 函数不同,此函数还要将程序暂停状态的时间作为经过时间来计算。
可利用 TmReset 重置计时器。
Real overhead TmReset 0 overHead = Tmr(0) 参阅 ElapsedTime 函数、TmReset
Tmr 函数使用示例 :
TmReset 0 '重置计时器 0 For i = 1 To 10 '执行 10 次 GoSub Cycle Next Print Tmr(0) / 10 '计算并显示循环时间
DO...LOOP
在条件一致期间或者在不一致时到条件一致为止,反复 DO...LOOP 区段。
格式 1无限循环:
Do [{ While | Until } 条件表达式]
[语句]
[Exit Do]
[语句]
Loop
格式2指定条件下循环:
Do
[语句]
[Exit Do]
[语句]
Loop [{ While | Until } 条件表达式]
Do Loop 语句格式中有条件表达式和语句。
条件表达式 :表示 True 或 False 的数字或字符串表达式。当条件表达式为空(Null)时,条件将作为 False 来处理。可省略。
作为退出 Do...Loop 的另一种方法,在 Do...Loop 中可以随时随地插入 Exit Do 语句。Exit Do 常在用于评价 If...Then 等几个条件之后使用。如果在 If...Then 中使用 Exit Do 语句,则将控制移至 Loop 的 下一语句。
如果在嵌套的 Do...Loop 语句中使用,则 Exit Do 将控制移至发生循环的上 1 级循环
If…Then…Else…EndIf
按照指定的条件转移执行命令。
格式1 :
If 条件表达式 Then
语句 T1
[ElseIf 条件表达式 Then]
语句 T1
[Else]
语句 F1
EndIf
格式2:
If 条件表达式 Then 语句 T1 [;语句 T2...] [Else 语句 F1 [;语句 F2...]]
参数
条件表达式:返回真伪值(True/False 的值)的有效条件表达式。真(True)时返回“0”以外的数值,伪(False)时返回“0”。(请参阅下述条件表达式示例。) 语句 T1 :条件表达式的值为真(True)时,也就是满足条件时执行语句。(可以将多个语句记述在 If...Then...Else 形式的区段中。) 语句 F1 :条件表达式的值为伪(False)时,也就是满足条件时执行语句。(可以将多个语句记述在 If...Then...Else 形式的区段中。)
说明
(1) If...Then...Else 在满足条件时,执行 T1 以后的语句。如果不满足条件,执行 F1 以后的语句。If...Then...Else 命令的 Else 部分可省略。如果省略 Else 部分而又未满足条件,将执行 EndIf 以 后的语句。请用 EndIf 结束 If...Then...Else 语句段,而与有无 Else 无关。
(2) If...Then...Else 还可以通过段以外的形式使用。是将 If...Then...Else 的所有语句都记述在同一行的 方法。按照此方法使用 If...Then...Else 时,不需要 EndIf。如果满足此行记述的条件表达式(如果 有相对于条件表达式的真值(True)),将执行 Then 与 Else 之间的语句。如果不满足条件表达式 (如果有相对于条件表达式的伪值(False)),将执行 Else 后面的语句。If...Then...Else 的 Else 部分 不是必须的。在不满足条件表达式的情况下(相对于条件表达式是伪值(False)),如果没有 Else 关 键字,控制将转至程序中的下一个语句。
在真值(True)时,条件语句输出 “1” 以外的数值,伪值(False)时输出 “0”。
GoSub
用于将程序控制移交给子例程。如果结束执行子例程,控制将返回至 GoSub 命令的下一行。
格式 :GoSub {标签} 标签:以标签指定移动目标。程序执行将转至有该标签的行。标签名请指定在 32 字符以内。 但是,开头字符不能使用数字,请务必使用字母。便签名+”:”定义标签,需要在代码块中能找到,标签名区分大小写。
GoSub 使用示例 :
Function main Integer var1, var2 GoSub checkio '使用标签执行 GoSub On 1 On 2 Exit Function checkio: '子例程的起始位置,定义标签 var1 = In(0) var2 = In(1) If var1 = 1 And var2 = 1 Then On 1 Else Off 1 EndIf Return '子例程的结束位置 Fend
系统管理相关命令
Reset:将控制器重置为初始状态。 SysConfig:显示系统设置参数。 SysErr:返回最新的错误状态或警告状态。 Date:显示日期。 Time:显示时间。 Date$:以字符串返回日期的函数。 Time$:以字符串返回时间的函数。 Hour :显示控制器的累计通电时间。 Stat :返回控制器的状态位。 CtrlInfo:返回控制器的信息。 RobotInfo:返回机器人的信息。 RobotInfo$:返回机器人的文本信息。 TaskInfo:返回任务信息。 TaskInfo$ :返回任务的文本信息。 DispDev:设置当前的显示装置。 EStopOn:返回紧急停止状态。 CtrlDev:返回当前的控制装置的编号。 Cls:清除运行窗口、操作窗口、命令窗口的文本区域以及清除 TP 的打印面板。 Toff:关闭 LCD 上执行行的显示。 Ton:打开 LCD 上执行行的显示。 SafetyOn:返回安全门的状态。 Eval:执行命令窗口的语句并返回错误状态。 ShutDown:关闭 EPSON RC+、关闭或重启 Windows。 TeachOn:返回示教模式的状态。 WindowsStatus:返回 Windows 的启动状态。
注: 蓝色部分是已经测试能在命令窗口正常使用的命令,主要是学会 Cls 消除报错即可。
For...Next
按照指定次数反复执行 For...Next 之间的一系列的语句。 最多嵌套16层。
格式 :For 变量名 = 初始值 To 结束值 [Step 增量值]
语句
Next[变量名]
*Next后面的变量名可以不写
For...Next 使用示例 :
Function fornext Integer counter For counter = 1 to 10 Go Pctr Next counter For counter = 10 to 1 Step -1 Go Pctr Next counter Fend
Pallet
用于定义托盘和显示定义托盘。
格式 :
(1) Pallet [Outside,] [托盘编号, 点编号 1, 点编号 2, 点编号 3 [, 点编号 4], 分区数 1, 分区数 2] (2) Pallet [Outside,] 托盘编号, 坐标系数据 1, 坐标系数据 2, 坐标系数据 3 [, 坐标系数据 4],分区数 1, 分区数 2
Pallet参数 :
Outside:在指定的行和列的范围以外生成可接近的托盘。可省略。 托盘编号:以表达式或数值指定托盘编号(0~15 的整数)。 点编号 1~3:指定用于托盘定义(标准的 3 点定义)的点变量。定义XY轴的起始点长宽距离 点编号 4:进行 4 点定义时,与点编号 1~3 同时使用。可省略。 分区数 1:以整数指定托盘的点编号 1(坐标系数据 1)和点编号 2(坐标系数据 2)的分区数。范围为 1~32767。(分区数 1×分区数_2 < 32767) 分区数 2:以整数指定托盘的点编号 1(坐标系数据 1)和点编号 3(坐标系数据 3)的分区数。范围为 1~32767。(分区数 1×分区数 02 < 32767) 坐标系数据 1~3:直接以点数据指定用于托盘定义(标准的 3 点定义)的坐标系。 坐标系数据 4:进行 4 点定义时,与坐标系数据 1~3 同时使用。可省略。
这里要重点关注:点编号P1,P2,P3,P4的相对位置,不能随意打乱,否则影响系统生成矩形范围。标准生成的是矩形,错乱生成是菱形。
Xqt
后台运行程序,多线程方式程序Xqt:调用指定的函数,作为一个单独的任务运行,与call不同的是:使用xqt任务运行后台程序将在后台运行,Main函数会立刻运行下一个语句而不需要等待xqt任务完成。
不要使用在机器人的动作控制中
LoadPoints
用于将点文件读入到机器人点存储区域中
语法:LoadPoints 文件名 [, Merge]
Merge :用于读入新的点之前,不想清除当前的点时进行设置。如果进行设置,则将新的
点添加到设置的点中。文件中已存在要添加的点时,执行覆写。可省略。
往往在实际应用中,相同的动作程序可能需要在多个空间中重复操作,那么就需要示教出多个点位文件。
LoadPoints 使用示例:
Function main '将通用的点读入到当前的机器人中 LoadPoints "R1Common.pts" '合并部件模型 1 的点 LoadPoints "R1Model1.pts", Merge 机器人 2 ' 读入机器人 2 的点文件 LoadPoints "R2Model1.ps" Fend
TCP/IP命令
Setnet:运行时或从命令窗口中设置通信端口参数 OpenNet:打开TCP/IP端口 ChkNet:返回端口状态:等待读取的字节数或错误值 Print#:从端口发送字符 Input#:从端口接收字符到一个或多个变量中 WaitNet#:等待网络端口连接成功 CloseNet:关闭TCP/IP端口
Pallet(托盘)动作读取多点位文件实例
1.编写运行程序,分2个函数,1托盘运行程序;2点文件读取程序
'1.托盘程序 Function Pat Call inition '初始化程序打开电源,设定速度 Integer A1 '定义整数变量 Pallet 0, P11, P12, P13, 4, 4 '运算4*4托盘点位 For A1 = 1 To 16 '循环抓取12次 = 4*4 Jump P10 '去抓取点 On 11 '打开夹爪 Wait 0.5 '等待0.5秒 Jump Pallet(0, A1) '放到托盘点 Off 11 '松开夹爪 Wait 0.5 '等待0.5秒 Next Home '回到起始点 Fend
'2.点文件示例 Function ReadPoint Do If Sw(10) Then '当输入信号位10打开时,读取第一个点文件 LoadPoints "point1.pts" Call Pat EndIf If Sw(11) Then '当输入信号位11打开时,读取默认的点文件 LoadPoints "robot1.pts" Call Pat EndIf Loop Fend
2.读入程序,验证语法错误
3.打开“运行窗口”,选择读取点文件函数 ReadPoint 运行。然后打开“I/O监视器” ,滑动到下面,可以看到输入位10,11都是关闭的
4.打开simulator模拟装置,可以看到模拟机器人没有动作,因为输入位10,11没有一个打开。
5.打开输入位10,机器人将往point1的点位托盘里装载东西。
6. 打开输入位11,机器人将往默认点位托盘装置东西。