tcp.sendhex无法控制
tcp调试软件可以控制,但是使用中控的tcp.sendhex控制时,受控设备无反应.
可能原因
- 中控主机和受控设备不在一个网络.
- 受控设备响应速度太慢,数据丢失.
(tcp.send
和tcp.sendhex
)默认参数是连接到设备后,等待10ms后发送数据,发完数据后,立刻断开.
有些受控设备的网络处理速度太慢,会丢数据,所以导致无法控制. 常见的一些PLC网络设备就会这样这种情况.
排除方法
- 中控主机和受控设备在同一个网络,并确保它们通的,例如可以用电脑分别ping它们.
- 在电脑端开一个tcp server,中控发数据给电脑,看电脑是否可以正常接收.
- 给
tcp.sendhex
增加延时参数.
tcp.sendhex
默认只需要IP,端口,数据
这三个参数,后面还可以多带2个参数,请看下面例子:
主要是后面那个1000,代表中控tcp连接受控设备后,过1000ms再发数据.
----带超时参数,连上后等待 1000ms 后发送 tcp 数据并等待1000ms后断开,2 秒连接不上就取消.
tcp.sendhex("192.168.2.100",6688,"00 11 22 33",1000,2);
tcp超时参数
tcp.send(ip,port,data,waitTime,waitTime);
--TCP 带超时参数发ASCII码tcp.sendhex(ip,port,data,waitTime,waitTime);
--TCP 带超时参数发HEX码res=tcp.sendrcv(ip,port,data,waitTime,waitTime);
--TCP 带超时参数发ASCII码 ,并接收返回数据到resres=tcp.sendhexrcv(ip,port,data,waitTime,waitTime);
--TCP 带超时参数发HEX码 ,并接收返回数据到res
参数名称 | 类型(单位) | 参数描述 | 例子 |
---|---|---|---|
ip | 字符 | 受控设备IP地址 | "192.168.2.147" |
port | 整数 | 受控设备端口号 | 501 |
data | 字符 | 待发送的数据 | "00 11 22 33" |
waitTime[可选] | 整数(毫秒) | 连接后延时多少(ms)再发数据 | 1000 |
connTimeout[可选] | 整数(秒) | 连接多少(s)不成功就超时 | 1000 |
例子
- 发送数据
-- 连接成功后,等1000ms后发数据,发完数据后,1000ms后断开.
tcp.sendhex("192.168.2.147",501,"00 11 22 33",1000);
该行代码逻辑效果如下:
0.00(秒) 连接到 192.168.2.147:501
1.00(秒) 发送数据 "00 11 22 33"
2.00(秒) 断开连接
把上面代码复制到中控,然后修改IP地址192.168.2.147
,端口501
,数据 00 11 22 33
后,在中控运行测试.
- 发送并接收数据
-- 连接成功后,等1000ms发数据,并把收到是数据放到变量res
res=tcp.sendhexrcv("192.168.2.147",501,"00 11 22 33",1000);
-- 打印接收到的数据
printhex(res);
把上面代码复制到中控,然后修改IP地址192.168.2.147
,端口501
,数据00 11 22 33
后,在中控运行测试.
影响
加延时参数后,发送tcp数据会占用时间,如果不想等它完成,可以新建一个程序,让tcp独立在一个程序里,
然后在系统总开和总关中,使用 call 函数,开新线程调用tcp程序. 这样在不会影响其它代码的时序.慢tcp,设备慢,tcp不能控制,tcp没用
最后一次更新于2023-10-15
0 条评论