ARTICLE · INTELLIGENCE

战地情报 · 详情页

来自尧图项目组的一线实战观察与深度解析

Epson常用输入输出指令

Epson常用输入输出指令

Epson常用输入输出指令

IO 是机械手与外围设备(气缸、真空、传感器、PLC、上位机)打交道的入口,做设备联调、信号排查必会。

Function main Wait 2 If Sw(12) = Off Then On 12 EndIf Fend

8输出位打开之后,2s之后自动灭

On 8, 2





Out指令,同时开关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)写字输出
DecimalDigitDecimalDigit 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 管数据交换,各司其职。


九、实用要点

  1. 能用标签就别用裸位号:换线、加机构时只改IOLabels.dat,程序不用动。
  2. 输出尽量集中在后台线程统一刷新:多个任务同时On/Off同一个输出会互相覆盖,这是现场最常见的“输出乱跳”根因。
  3. 字 IO 常用于 PLC 握手:注意字节序、进制(DecimalDigit)和 0/1 定义要和 PLC 侧对齐。
  4. Wait自带超时参数:Wait 输入条件, 时间在“条件成立或时间到”时都会继续,是防死等的最简写法;只有不写时间参数时才会一直等到条件成立。超时后记得用Sw()复核条件,区分“成功”和“超时”。
  5. 写输出前确认权限:RC+ 的 IOMonitor 里bAllowChangeOutputs关闭时程序写输出会受限,联调时先检查。
  6. IO 位号≠物理端子号:位 8 不代表 PLC 卡第 8 脚,一切以控制器 IO Map 为准。
RELATED READING

延伸阅读

更多一线实战笔记与深度复盘,助您持续精进