Epson常用输入输出指令
IO 是机械手与外围设备(气缸、真空、传感器、PLC、上位机)打交道的入口,做设备联调、信号排查必会。
Function main Wait 2 If Sw(12) = Off Then On 12 EndIf Fend8输出位打开之后,2s之后自动灭
On 8, 2Out指令,同时开关8个位
Out 0(关),0(从0开始)
Out 1(开),255,将8-15位打开
一、先认识 Epson 的 IO 体系
Epson SPEL+ 的 IO 分三类:
| 类型 | 说明 | 单位 |
|---|---|---|
| 物理位 IO | 单个输入/输出点,只有 ON/OFF 两种状态 | Bit(位) |
| 物理字节/字 IO | 按 8 位(字节)/ 16 位(字)分组读写 | Byte / Word |
| 内存 IO | 控制器内存里的虚拟位/字节/字,常用于程序间、与 PLC 交换数据 | Mem |
| 系统状态 | 电机、急停等控制器状态,用只读函数查询 | — |
编号关系:字 n 覆盖 16 个连续位,字节 n 覆盖 8 个连续位。具体哪个位号对应哪个物理端子,以控制器 IO 配置(IOLabels.dat/ IO Map)为准,不要凭印象猜。
标签(Label)机制:在IOLabels.dat里给位/字起名字后,程序里就能直接用名字,比裸位号好维护得多:
输入位 CheckXiQi1 ← 第 1 号吸头真空检测(bit 8) 输入字 LeftPutSigle ← 左摆料信号(word 32) 输出位 takeair1 ← 第 1 号吸头吸真空电磁阀(bit 8)二、位输入:Sw()
功能:返回指定的输入位状态。输入打开时返回「1」,关闭时返回「0」。
| 指令 | 语法示例 | 说明 |
|---|---|---|
Sw(n) | Sw(3) | 读输入位 n 的状态(n 为可用的输入位编号) |
Sw(标签) | Sw(CheckXiQi1) | 用标签读,等价Sw(8) |
条件表达式支持and/or/xor组合,配合Wait可做多条件等待:
' 判断1号吸头真空是否建立IfSw(CheckXiQi1)=OnThenPrint"真空 OK"ElsePrint"真空 NG" EndIfWaitSw(1)=OnandSw(2)=On' 待机直到输入位1和2都开启WaitSw(1)=OnorSw(2)=On' 待机直到输入位1或2开启WaitSw(1)=OnxorSw(2)=On' 待机直到输入位1、2中恰有一个开启三、位输出:On/Off
置单个输出位为 ON(通电)/ OFF(断电)。这是最常用的输出指令,电磁阀、指示灯都靠它。
| 指令 | 语法示例 | 说明 |
|---|---|---|
On 标签 | On takeair1 | 置输出位 ON(通) |
Off 标签 | Off putair1 | 置输出位 OFF(断) |
Ontakeair1 ' 打开1号吸头吸真空Wait0.1' 等真空建立Offputair1 ' 关闭吹气四、字节与字 IO:In/Out/InW/OutW
批量读写 8 位/16 位数据,常用于和 PLC、上位机交换整组信号。
| 指令 | 语法示例 | 说明 |
|---|---|---|
In(n) | In(0) | 返回端口 n 的输入状态:一组 8 个输入位打包成一个 0~255 的整数,可同时确认 8 个输入位的值 |
Out(n, 值) | Out(1, 255) | 写字节输出 |
InW(n) | InW(32) | 读字输入(0~65535) |
OutW(n, 值) | OutW(34, 100) | 写字输出 |
DecimalDigit | DecimalDigit 5 | 设置字 IO 的十进制显示位数,影响 InW/OutW 的换算进制 |
In()的典型用法是按位掩码(&B为二进制掩码)判断某几位是否全部满足,也常与Wait配合:
PrintIn(0)' 打印输入位0~7的状态(0~255)WaitIn(0)and(&B1111)' 待机到输入位0~3全部打开WaitIn(0)=255' 待机到输入位0~7全部开启本项目用法(IOLabels.dat):
输入字 32 = LeftPutSigle 左摆料信号 输入字 33 = RightPutSigle 右摆料信号 输入字 100 = OnLine 是否在线 输出字 33 = X 输出 X 坐标 输出字 34 = Y 输出 Y 坐标' 读左摆料信号(PLC 给机械手的“开始摆料”指令)IfInW(32)=1ThenPrint"收到左摆料信号" EndIf五、等待与同步:Wait(官方标准格式)
功能:等待时间,或等待输入位判断条件。
格式有两种:
| 格式 | 说明 |
|---|---|
Wait 时间 | 只指定时间:待机指定时间后执行下一个命令。时间 0~2147483647,最小有效位 0.01 秒 |
Wait 输入条件[, 时间] | 只指定输入条件:待机至条件成立;同时指定输入条件与时间:条件式成立或指定时间到,都会执行下一个命令(自带超时) |
用Sw函数可以确认输入条件式是否成立,或指定时间是否已到:
Wait1.5' 待机1.5秒后继续WaitSw(3)=On' 待机直到输入位3开启(无超时)WaitSw(3)=On,3' 输入位3开启,或3秒到,都继续(自带超时) ' 吸料后等待真空检测到位,最多等2秒,超时则报警处理Ontakeair1WaitSw(CheckXiQi1)=On,2IfSw(CheckXiQi1)=OffThenPrint"真空超时未建立!" EndIf提示:官方
Wait支持and/or/xor组合条件(见「二、Sw 函数」),也支持用In()做多位掩码等待(见「四、In 函数」)。
六、内存 IO:MemSw/MemIn/MemInW
内存 IO 是控制器内部变量区,不占物理端子,适合程序内部标志位、多任务间传数据、与 PLC 做软信号交换。
| 指令 | 语法示例 | 说明 |
|---|---|---|
MemSw(n) | If MemSw(1) = On | 读/写内存位 |
MemIn(n)/MemOut(n, 值) | MemOut(1, 255) | 内存字节读写 |
MemInW(n)/MemOutW(n, 值) | MemOutW(1, 100) | 内存字读写 |
MemSw(1)=On' 置内存位1(等价OnMemSw(1))IfMemSw(1)=OnThenPrint"标志已置位" EndIf七、系统状态读取(补充)
IO 之外,几个常用的只读状态函数:
| 函数 | 说明 |
|---|---|
Motor | 电机是否上电(If Motor = Off Then Motor On,本项目启动时用) |
Emg | 急停是否被按下 |
TW | 串口/网络发送缓冲等待标志(本项目WaitNet后判TW检查连接结果) |
八、实战:本项目怎么组织 IO
1. 用标签代替位号(IOLabels.dat)
本项目输入 18 个标签、输出 24 个标签,全部起名:真空检测CheckXiQi1~6、气缸到位CheckQiGangUp/Down1~6、吸真空takeair1~6、吹气putair1~6、气缸QiGang_Up/Down1~6。程序里一眼能看懂在控制什么。
2. “变量 → IO”统一控制模式(Main.prg 的 XQTWatchIO 后台线程)
主程序不直接碰 IO,而是写业务变量,由一个后台线程统一刷新电磁阀:
' 后台线程:根据变量刷新 IO(节选) Xqt XQTWatchIO,NoEmgAbort ' 主程序启动后台任务FunctionXQTWatchIODoIfXQTaircylinder(1)=FalseThenOnQiGang_Up1:OffQiGang_Down1 ' 气缸缩回ElseOffQiGang_Up1:OnQiGang_Down1 ' 气缸伸出 EndIfIfXQTtake(1)=FalseThenOfftakeair1 ' 关吸真空ElseOntakeair1 ' 开吸真空 EndIfWait0.1LoopFend好处:任何任务都能改变量,输出状态不会互相打架;换 IO 接线只需改一处映射。
3. 真空检测做取料确认
取料流程里吸真空后等待CheckXiQi到位再抬升,保证真吸到料。
4. 字 IO 与 PLC/上位机握手
左/右摆料信号用InW(32)/InW(33)接收,checkCoord前先读当前摆料坐标字,放完一盘再通过通信通知上位机——IO 管硬握手,TCP 管数据交换,各司其职。
九、实用要点
- 能用标签就别用裸位号:换线、加机构时只改
IOLabels.dat,程序不用动。 - 输出尽量集中在后台线程统一刷新:多个任务同时
On/Off同一个输出会互相覆盖,这是现场最常见的“输出乱跳”根因。 - 字 IO 常用于 PLC 握手:注意字节序、进制(
DecimalDigit)和 0/1 定义要和 PLC 侧对齐。 Wait自带超时参数:Wait 输入条件, 时间在“条件成立或时间到”时都会继续,是防死等的最简写法;只有不写时间参数时才会一直等到条件成立。超时后记得用Sw()复核条件,区分“成功”和“超时”。- 写输出前确认权限:RC+ 的 IOMonitor 里
bAllowChangeOutputs关闭时程序写输出会受限,联调时先检查。 - IO 位号≠物理端子号:位 8 不代表 PLC 卡第 8 脚,一切以控制器 IO Map 为准。