ARTICLE DETAIL

资讯详情

深耕商务建站与企业官网运营的一线实战洞察。

Epson之Tcp/IP通讯

Epson之Tcp/IP通讯 Epson之Tcp/IP通讯网络助手设置注意1设置ip为0.0.0.0注意2发送信息需要加上换行符因为下面设置的时候设置了CRLF SetNet #201,IP$,8080,CRLF,NONE,0Function main qt Test 启动后台任务不等它继续往下走 Call TcpConnect rint主程序继续干活ait2Fend Function TcpConnect String IP$ IP$192.168.0.12 PC网络调试助手的局域网 IP CloseNet All 先关掉所有旧连接防止残留 Wait1 配置通道 #201目标192.168.0.12端口8080CRLF 换行无校验 SetNet #201,IP$,8080,CRLF,NONE,0OpenNet #201As Client 以客户端身份拨号 WaitNet #201,10 最多等10秒连接结果IfTWTrue Then TWTrue 表示连接失败 Print连接上位机失败请确认网络调试助手已启动监听CloseNet All Quit All EndIf Print连接成功FendEpson 机械手 TCP/IP 通信教程SPEL 版一、TCP/IP 是什么先打个比方IP 地址 门牌号。你的机械手控制器和上位机视觉软件都在同一个局域网里每台设备有一个唯一门牌号如192.168.1.50。发数据前先要知道对方门牌号。端口 房门号。一个门牌号下面有很多房间端口。机械手和视觉软件约定好取料数据走 9600 号房下相机数据走 9700 号房。两边同时开多个房间各聊各的互不干扰。客户端 / 服务器 打电话的主动方和被动方。服务器视觉软件一直守机待呼客户端机械手主动拨号过去。本项目里机械手是客户端视觉软件是服务器机械手控制器客户端 视觉电脑服务器 │ │ │ OpenNet #201 As Client │ 监听端口 9600 │───────────────────────────────────────▶│ │ Print #201, get ←── 发命令 ──▶ │ 收到get │ Input #201, ... ◀── 等回复 ── │ 回 gok1,123.5,45.6,90 ▼ ▼一问一答 对讲机。连上之后两边就靠Print发和Input收轮流说话一问一答保证不抢话。数据格式 信封写法。双方约定一行数据用逗号分隔字段行尾用换行符CRLF表示这句话说完了。二、Epson 网络指令全家桶指令作用项目里怎么用SetNet #n, IP$, 端口, CRLF, NONE, 超时配置一个网络通道相当于拨号设置SetNet #201, 192.168.1.50, 9600, CRLF, NONE, 0OpenNet #n As Client以客户端身份发起连接OpenNet #201 As ClientWaitNet #n, 秒等待连接结果最多等 N 秒WaitNet #201, 10TW连接/发送失败标志True 失败If TW True Then ... 报错退出CloseNet #n/CloseNet All关闭通道 / 全部通道重连前先CloseNet AllPrint #n, 内容通过通道发送数据Print #201, getInput #n, 变量1, 变量2, ...从通道接收一行按逗号拆分Input #201, CMD$, X$, Y$, A$SetNet 参数逐个说参数含义取值说明#n通道号一个控制器可开多个通道本项目用了 #201 / #210 / #216IP 地址对方门牌号字符串如192.168.1.50端口对方房门号数字本项目 9600 / 9700CRLF行终止符每句话结尾的换行格式双方要一致NONE校验位常用 NONE无校验超时连接超时项目初始化用 0标定程序用了 5000具体以控制器手册为准一句话记忆SetNet 配置 → OpenNet 连接 → WaitNet 等结果 → Print/Input 收发 → CloseNet 关闭。三、源码①初始化连接机械手主动连上位机3.1 打开网络调试助手启动服务端3.2 写客户端代码下面这段来自项目Main.prg的ini()函数做了简化。功能连接视觉上位机连不上就提示并退出。FunctionTcpConnectStringIP$IP$192.168.1.50 上位机视觉软件的门牌号 CloseNet All 先关掉所有旧连接防止残留Wait1 配置通道 #201IP192.168.1.50端口9600CRLF 换行无校验 SetNet #201,IP$,9600,CRLF,NONE,0OpenNet #201AsClient 以客户端身份拨号 WaitNet #201,10 最多等10秒连接结果IfTWTrueThen TWTrue 表示连接失败Print连接上位机失败请确认视觉软件已启动 CloseNet All Quit All 退出整个程序 EndIfPrint连接上位机成功 再开一个通道给下相机不同端口各聊各的 SetNet #210,IP$,9700,CRLF,NONE,0OpenNet #210AsClient WaitNet #210,10IfTWTrueThenPrint连接下相机失败 CloseNet All Quit All EndIfPrint连接下相机成功 Fend逐行理解CloseNet All重连前先清场避免上一个连接没断新连接失败。SetNet只是写好拨号设置真正打电话的是OpenNet。WaitNet是等结果的关键不看WaitNet结果就直接发数据等于不等对方接电话就说话。TW是是否出问题的标志连接失败、发送失败都会变 True一定要判断。四、源码②一问一答——向上位机要坐标取料核心这是本项目最典型的通信模式机械手发命令 → 视觉回坐标 → 机械手拿坐标去取料。FunctionGetNutAndTakeStringCMD$,X$,Y$,A$ 接收的命令字三个坐标值 循环要料直到拿到有效坐标DoPrint#201,get ① 发命令我要料Input#201,CMD$,X$,Y$,A$ ② 等回复例如gok1,123.45,67.89,90.0PrintCMD$,X$,Y$,A$ ③ 打印看看收到啥调试必备IfCMD$gok1Then ④ 收到可以取第1颗 → 跳出循环ExitDoEndIfIfCMD$gok2OrCMD$gok3OrCMD$gok4ThenExitDoEndIf ⑤ 没收到有效坐标回安全位让上位机重新准备1秒后再问 Jump homeposWait1Loop ⑥ 拿到坐标去取料Val把字符串转成数值 Tool1Jump XY(Val(X$),Val(Y$),-10,Val(A$))/R /R 相对当前位置移动 Fend这个模式叫协议握手要点先发后收一问一答Print和Input必须配对谁先说话、回什么双方提前约定好。回复是命令字 逗号 数据gok1,123.45,67.89,90.0拆成 4 个变量Input自动按逗号拆分。无效回复就重试收到不认识的内容别硬干回安全位等 1 秒再问这就是异常容错。Val()转数值通信收进来全是字符串取料前记得Val()转成数字。五、源码③完整的 TCP 测试程序可复制到 RC 直接跑想在真实控制器上体验通信写一个机械手-上位机对讲机械手连上后每 1 秒发一个ping上位机回pong就打印。上位机一侧可以用任意 TCP 调试工具如网络调试助手监听 9600 端口当服务器。 TCP 测试程序机械手作为客户端与上位机一问一答 上位机服务器监听192.168.1.50:9600收到 ping 回 pong FunctionTcpTestStringCMD$IntegerCount CloseNet AllWait0.5 ① 连接 SetNet #201,192.168.1.50,9600,CRLF,NONE,0OpenNet #201AsClient WaitNet #201,10IfTWTrueThenPrint连接失败请检查Print1.上位机是否监听9600端口Print2.IP是否192.168.1.50Print3.网线/防火墙是否放行 Quit All EndIfPrint连接成功开始对讲测试 ② 一问一答循环 Count0DoCountCount1Print#201,ping 发命令Print发送 ping(第, Count, 次)Input#201,CMD$ 等回复会阻塞上位机必须回IfCMD$pongThenPrint收到 pong通信正常ElsePrint收到未知内容,CMD$ EndIfWait1LoopFend跑这个程序前请注意Input是阻塞等待的——上位机不回话程序会一直停在那。所以先启动服务器端TCP 调试工具再运行程序。如果卡住不动多半是发了没人回或换行符不一致先 CtrlC / 急停退出程序再检查。六、项目里的通信协议长什么样本项目一共有三个通道各管一摊通道端口用途上行机械手→视觉下行视觉→机械手#2019600取料视觉get、checknutcount、RobotIniOKStart、gok1~gok4(X,Y,A)#2109700下相机acqDown,1、checkCoorddowncamacqok(X,Y,U)、checkCoord 坐标#2169600标定moveacq、toolset、go9point等moveok、toolsetok、anglerotationok协议设计建议命令字 逗号 参数acqDown,1比acqDown1好扩展视觉端用Split一下就行。一问一答要成对发了命令必须等回复回复里带命令字如downcamacqok方便判状态。回复要能区分成功/失败视觉侧回了gok系列代表有料回别的代表没料/异常机械手据此决定取还是等。每条命令都有兜底项目里取料用Do...Loop循环重试防止上位机一时没准备好吃料。换行符必须一致机械手设CRLF视觉软件解析时也要按 CRLF 切行否则两条数据粘在一起。七、常见问题排查表现象原因处理方法TW True连接失败IP 不对 / 端口没监听 / 上位机没启动 / 防火墙拦截先 Ping 通 IP确认视觉软件已启动关防火墙或加白名单连上了但收不到数据程序卡在Input上位机没回、或回的行尾不是 CRLF用网络调试助手模拟回复确认视觉端用 CRLF 换行收到乱码/数据粘在一起换行符不一致、半包/粘包统一 CRLF数据太长时分多次收发有时能连有时连不上上次连接没关闭重连前先CloseNet AllWait 1通信正常但机械手乱动坐标没Val()转换、或没加/R导致绝对定位取料点用Val(X$)并加/R相对移动标定程序连不上 5000通道超时参数设太小参考项目标定通道SetNet #216, ..., 5000排查三板斧先Print打印收到的字符串看内容对不对——通信调试第一原则先看数据再谈运动。用网络调试助手当假服务器不发真视觉软件也能测通协议。卡住先急停/退出程序再查原因别让机械手一直等。八、Epson 源码速查复制即用1. 连接初始化含双通道FunctionTcpInit CloseNet AllWait1SetNet #201,192.168.1.50,9600,CRLF,NONE,0OpenNet #201AsClient WaitNet #201,10IfTWTrueThenPrint连接失败 Quit All EndIf SetNet #210,192.168.1.50,9700,CRLF,NONE,0OpenNet #210AsClient WaitNet #210,10IfTWTrueThenPrint连接失败 Quit All EndIf Fend2. 发送命令Print#201,get 发不带参数的命令Print#210,acqDown,,Index 发带参数的命令逗号拼接3. 接收并拆分Input#201,CMD$,X$,Y$,A$ 一行按逗号拆成4个字符串PrintCMD$,X$,Y$,A$ 先打印再使用调试习惯4. 带超时的等待防死等 发完命令后最多等3秒回复超时重发Print#201,getWait0.1TmReset1DoIfTmr(1)3ThenPrint等待超时重新发送Print#201,getTmReset1EndIfWaitSw(CheckXiQi1)On,0.1 占位循环体里做点别的避免空转LoopWhile10 占位结构实际按需求改写说明Input本身没有超时参数需要限时等待时用Tmr计时器 重发逻辑做保护这是现场防死机的标准做法。九、一句话总结SetNet 配好门牌 → OpenNet 拨号 → WaitNet 等接通 → Print 说话 → Input 听话 → CloseNet 挂断这就是 Epson TCP/IP 通信的全部骨架。剩下的就是和上位机约定好说什么、回什么、用逗号还是空格、换行用啥然后把每一问一答都加上重试和超时保护。
返回列表
PREV
查看更多资讯
NEXT
返回资讯列表