tcp.sendhex无法控制

tcp调试软件可以控制,但是使用中控的tcp.sendhex控制时,受控设备无反应.

可能原因

  • 中控主机和受控设备不在一个网络.
  • 受控设备响应速度太慢,数据丢失.
    (tcp.sendtcp.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码 ,并接收返回数据到res
  • res=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没用