☰
Epson之if语句教程
2026/10/28 10:19:56 网站建设 项目流程

Epson 机械手 SPEL+ 条件判断(If/Select Case)语法教程

面向初学者的条件判断语法入门:If的各种写法、比较/逻辑运算符、多分支Select Case,最后给一个可直接复制到 RC+ 运行的学习 Demo 和几个机械手实战示例。


一、条件判断是什么?打个比方

程序默认从上往下一条条执行,但现实里需要"看情况办事":有料才去取、真空建立才抬升、左工位放左边……条件判断就是让程序会"动脑子"。

是 料盘空? ──▶ 去取料 │ 否 │ ▼ 等下一盘

SPEL+ 里做判断有两大工具:If(灵活)和Select Case(多分支)。


二、If 的基础写法

1. 单条件:If ... Then ... EndIf

Ifi>3ThenPrint"条件成立" EndIf

2. 二选一:If ... Then ... Else ... EndIf

IfiMod2=0ThenPrint"偶数"ElsePrint"奇数" EndIf

3. 多分支:ElseIf

Ifscore>=90ThenPrint"优秀"ElseIfscore>=80ThenPrint"良好"ElseIfscore>=60ThenPrint"及格"ElsePrint"不及格" EndIf

从上往下找,第一个成立的分支执行,其他全部跳过。

4. 单行 If:一句话搞定(不用 EndIf)

Ifi>5ThenPrint"i 大于5"

一行里做多件事,用冒号:分隔:

Ifi>5ThenPrint"大了" : Print "注意!"

项目真实用法:If Abs(CU(putpos1) - CU(downst1)) > 0.002 Then Print "角度不一致" : Quit All——条件不满足直接打印并退出整个程序。


三、比较运算符与逻辑运算符

比较运算符(结果是 True/False)

运算符含义示例
=等于If i = 5 Then(字符串也能比:If CMD$ = "gok1")
<>不等于(不是!=)If i <> 8 Then
<>小于 / 大于If i < 10 Then
<=>=小于等于 / 大于等于If i >= 7 Then

逻辑运算符(组合多个条件)

运算符含义示例
And并且(都成立才行)If i > 0 And i < 10 Then
Or或者(有一个就行)If i = 5 Or i = 6 Then
Not取反If Not (i = 5) Then
Xor异或(恰有一个成立)If a = 1 Xor b = 1 Then
' 判断:真空建立 且 气缸到位,才继续IfSw(CheckXiQi1)=OnAndSw(CheckQiGangUp1)=OnThenPrint"条件全满足,继续" EndIf

注意区分:逻辑And(组合条件)和位运算And(掩码,如In(0) And &B1111)——都是And,一个管"判断",一个管"按位算",看操作数类型。


四、嵌套 If

If 里面再套 If,注意每个 If 都要配一个 EndIf:

Ifi>10ThenIfi<20ThenPrint"10 < i < 20"EndIf EndIf

嵌套越深越难读,超过两层建议拆开或用And合并。


五、Select Case:多分支神器(项目最爱)

当判断的对象是"同一个变量的多个取值"时,用Select Case比一长串ElseIf清爽得多。

语法(注意结束符是Send,不是 EndSelect!):

Select变量Case值1语句Case值2,值3' 多个值用逗号Case值4To值6' 范围CaseElse' 兜底 语句 Send

项目真实用法——遍历 6 个吸头切换工具:

ForIndex=1To6SelectIndexCase1:Tool1Case2:Tool2Case3:Tool3Case4:Tool4Case5:Tool5Case6:Tool6Send Jump downcamacq1/RNext

Case后面单行用冒号写语句,多行直接换行写,两种都行。


六、学习 Demo(可直接运行)

复制到 RC+ 新建.prg,编译后运行main,对照终端输出理解每种写法:

'============================================================' SPEL+条件判断语法学习 Demo ' 运行方式:RC+打开 → Compile →Runmain '============================================================FunctionmainIntegeri,scoreStringcmd$Print"=====If语法 Demo 开始=====" '----1)基础If...Then...EndIf----i=5Ifi>3ThenPrint"1)5大于3,条件成立" EndIf '----2)If...Then...Else:二选一----i=4IfiMod2=0ThenPrint"2)4是偶数"ElsePrint"2)4是奇数" EndIf '----3)ElseIf多分支----score=85Ifscore>=90ThenPrint"3)优秀"ElseIfscore>=80ThenPrint"3)良好"ElseIfscore>=60ThenPrint"3)及格"ElsePrint"3)不及格" EndIf '----4)单行If(不需要 EndIf)----i=10Ifi>5ThenPrint"4)单行If:i 大于5"Ifi>5ThenPrint"4)冒号连写第一句" : Print "4)冒号连写第二句" '----5)比较运算符----i=7Ifi<>8ThenPrint"5)7不等于8(<>)"Ifi<=7ThenPrint"5)7小于等于7(<=)"Ifi>=7ThenPrint"5)7大于等于7(>=)" '----6)逻辑运算符----i=6Ifi>0Andi<10ThenPrint"6)6在0~10之间(And)"Ifi=5Ori=6ThenPrint"6)i 是5或6(Or)"IfNot(i=5)ThenPrint"6)i 不是5(Not)" '----7)字符串比较----cmd$="gok1"Ifcmd$="gok1"ThenPrint"7)收到有效坐标命令 gok1" EndIf '----8)嵌套If----i=15Ifi>10ThenIfi<20ThenPrint"8)10<i<20(嵌套)" EndIf EndIf '----9)Select Case多分支----Fori=1To4SelectiCase1Print"9)一号吸头"Case2,3Print"9)二号或三号吸头"CaseElsePrint"9)其他吸头" SendNextPrint"=====Demo 结束=====" Fend

预期终端输出:

===== If 语法 Demo 开始 ===== 1) 5 大于 3,条件成立 2) 4 是偶数 3) 良好 4) 单行 If:i 大于 5 4) 冒号连写第一句 4) 冒号连写第二句 5) 7 不等于 8(<>) 5) 7 小于等于 7(<=) 5) 7 大于等于 7(>=) 6) 6 在 0~10 之间(And) 6) i 是 5 或 6(Or) 6) i 不是 5(Not) 7) 收到有效坐标命令 gok1 8) 10 < i < 20(嵌套) 9) 一号吸头 9) 二号或三号吸头 9) 二号或三号吸头 9) 其他吸头 ===== Demo 结束 =====

七、机械手实战:项目里的条件判断长这样

实战 1:真空检测判断(传感器输入 → 决定动作)

' 吸完料,判断真空是否建立IfSw(CheckXiQi1)=OnThenPrint"真空 OK,抬升" Jump Here:Z(0)' 建立真空就抬走ElsePrint"真空 NG,重新取料" Jump PUT1/R ' 没吸到,去抛料位重来 EndIf

实战 2:左右工位判断(项目 Main.prg 真实逻辑)

' 根据工位选择放料矩阵IfStage=0ThenPrint"当前左工位" Jump XY(Nut1_X(coordY,coordX),Nut1_Y(coordY,coordX),-5,0)/RElsePrint"当前右工位" Jump XY(Nut2_X(coordY,coordX),Nut2_Y(coordY,coordX),-5,0)/R EndIf

实战 3:命令字判断(通信协议解析,项目真实)

Input#201,CMD$,X$,Y$,A$IfCMD$="gok1"ThenPrint"有料,坐标:",X$,Y$,A$ExitDo' 跳出等待循环ElsePrint"无料,重新要" Jump homeposWait1EndIf

实战 4:安全校验 + 退出(单行 If + 冒号,项目真实)

' 示教角度不一致直接退出,防止撞机IfAbs(CU(putpos1)-CU(downst1))>0.002ThenPrint"示教点1角度不一致,请重新示教" Quit All EndIf

八、常见错误与排错

错误原因解决
编译报"缺 EndIf"块状 If 没写全每个If...Then都要有EndIf;单行 If 则不要写 EndIf
用了!=SPEL+ 不等于不是!=用<>
Select 报错结束符写成了EndSelectSPEL+ 的 Select 用Send结束
Else If拼错应该是ElseIf连写,不加空格
条件恒真/恒假把=当赋值用了条件里=是比较:If i = 5
嵌套 EndIf 配不上多套了一层少写了一个缩进对齐,数一数每个 If 的 EndIf
And/Or 用错逻辑 And 和位 And 混了组合条件用逻辑 And;掩码用In(n) And &B...

调试技巧:条件分支里放Print,看走了哪条路;不确定条件真假,直接Print Sw(8)或Print i把值打出来。


九、总结

需求用什么
一个条件判断If 条件 Then ... EndIf
两种情况二选一If ... Then ... Else ... EndIf
多种情况依次判断If ... ElseIf ... Else ... EndIf
同一变量的多个取值Select Case ... Send(最清爽)
一句话快速判断单行If 条件 Then 语句
多个条件同时满足And组合
任一条件满足Or组合

一句话:二选一用 If/Else,多分支用 Select Case,简单判断用单行 If,条件组合用 And/Or。


需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询