简介

udp是无连接的,一般用于快速单向通讯,但是也可以在发送的同时,打开一个端口用于接收对方返回的信息.

udp.sendrcv

----发送ascii数据,设置本地端口为16678,并设置2秒接收超时
udp.sendrcv("192.168.2.100",6688,"pwr=1",16678,2);

udp.sendhexrcv

 ----发送16进数据,设置本地端口为16678,并设置2秒接收超时
 udp.sendhexrcv("192.168.2.100",6688,"00 11 22 33",16678,2);

超时参数

  • udp.send(ip,port,data); --udp发ASCII码
  • udp.sendhex(ip,port,data); --udp发HEX码
  • res=udp.sendrcv(ip,port,data,localPort,waitTimeS); --udp带超时参数发ASCII码 ,并接收返回数据到res
  • res=udp.sendhexrcv(ip,port,data,localPort,waitTimeS);--udp带超时参数发HEX码 ,并接收返回数据到res
参数名称类型(单位)参数描述例子
ip字符受控设备IP地址"192.168.2.147"
port整数受控设备端口号501
data字符待发送的数据"00 11 22 33"
localPort[可选]整数udp本地端口默认是16678
waitTimeS[可选]整数(秒)等待(s)无数据就退出1

例子

  • 发送数据
  -- udp发送数据后,立即退出,不接收数据.
  udp.sendhex("192.168.2.147",501,"00 11 22 33");
  • 发送并接收数据
 -- udp发送数据后,在16678端口等待最多2秒接收数据.
 res=udp.sendhexrcv("192.168.2.147",501,"00 11 22 33",16678,2);
 -- 打印接收到的数据
 printhex(res);
把上面代码复制到中控,然后修改IP地址192.168.2.147,端口501 ,数据 00 11 22 33 后,在中控运行测试.

udp.sendhex无法控制

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

可能原因

  • 中控主机和受控设备不在一个网络.
  • 受控设备要求发送设备固定发送端口号

排除方法

  • 中控主机和受控设备在同一个网络,并确保它们通的,例如可以用电脑分别ping它们.
  • 在电脑端开一个udp server,中控发数据给电脑,看电脑是否可以正常接收.
  • udp.sendhex 增加特定本地端口+延时参数.

udp.sendhex默认只需要IP,端口,数据这三个参数,后面还可以多带2个参数,请看下面例子:

----发送ascii数据,设置本地端口为16678,并设置2秒接收超时
udp.sendrcv("192.168.2.100",6688,"pwr=1",16678,2);

主要是后面那个16678,代表发送udp数据本地端口,2代表是2秒后没有收到数据就关闭udp.

影响

加延时参数后,发送udp数据会占用时间,如果不想等它完成,可以新建一个程序,让udp独立在一个程序里,
然后在系统总开和总关中,使用 call 函数,开新线程调用tcp程序. 这样在不会影响其它代码的时序.
慢tcp,设备慢,udp不能控制,tcp没用