简介
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码 ,并接收返回数据到resres=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没用
最后一次更新于2024-10-10
0 条评论