RJ45_px6x 接口文档¶
简介¶
简述:该文件提供了基于RJ45网口连接PX6x系列无人机集群的TCP通信设备管理能力,实现了网口设备抽象与TCP服务端功能,支持无人机集群的组网通信。
在RflySim无人机集群仿真与实飞测试场景中,多架PX6x飞控无人机通常需要通过有线RJ45网口与地面站控制端建立稳定的数据通信,实现飞行控制指令下发、飞控状态回传等功能。本模块作为RflySimSDK集群模块的网口通信组件,通过RJ_Device类抽象单个RJ45连接的PX6x无人机通信设备,TCPServer类提供多设备接入的TCP服务支撑,适用于实机RJ45组网集群测试、仿真环境固定IP集群通信对接等场景,为上层集群任务调度、状态监控提供基础通信接口。
快速开始¶
最简可用示例,复制后修改最少配置即可运行。
from RflySimSDK.swarm import RJ45_px6x
# 1. 初始化RJ45组网设备对象,使用默认广播地址和端口
rj_device = RJ45_px6x.RJ_Device()
# 2. 搜索局域网内的所有PX6x设备,设置搜索超时时间为2秒
found_devices = rj_device.discover_devices(timeout=2)
print("搜索到的设备列表:", found_devices)
# 3. 示例:重启指定ID的设备(如果搜索到设备则执行)
if found_devices:
first_device_id = found_devices[0]
print(f"正在重启设备 {first_device_id}")
rj_device.reboot_device_by_id(device_id=first_device_id)
# 4. 启动所有已发现的设备
rj_device.start_all_devices()
print("所有设备已启动")
环境与依赖¶
- Python 环境:
>= 3.8.10 - 依赖库:
re、socket、time - 前置准备:调用此接口前,必须确保已正确配置RJ45网络连接,完成PX6x设备的硬件接线,并正确安装RflySimSDK依赖环境。
核心接口说明¶
该模块 RJ45_px6x.py 包含了配置变量、辅助函数及核心业务类。
全局常量与枚举定义¶
本节列出模块中所有可直接引用的全局常量和枚举定义。
独立常量¶
无
全局/独立函数¶
无
RJ_Device 类¶
用于通过UDP广播发现和管理网口连接的PX6x系列RJ45设备,支持设备发现、重启、网络配置等功能,适用于集群无人机设备的网络管理场景。
__init__(broadcast_ip='255.255.255.255', broadcast_port=5000)¶
功能说明:初始化RJ_Device设备管理对象,设置UDP广播的IP地址和端口 参数列表 (Args):
| 参数名 | 类型 | 是否必填 | 默认值 | 说明 |
|---|---|---|---|---|
broadcast_ip |
str |
否 | '255.255.255.255' |
UDP广播使用的IP地址 |
broadcast_port |
int |
否 | 5000 |
UDP广播使用的端口号 |
返回值 (Returns):
RJ_Device实例对象
异常 (Raises):
- 无
discover_devices(timeout=1)¶
功能说明:在局域网内广播搜索可用的RJ45设备,获取已发现设备的列表信息 参数列表 (Args):
| 参数名 | 类型 | 是否必填 | 默认值 | 说明 |
|---|---|---|---|---|
timeout |
float |
否 | 1 |
等待设备响应的超时时间,单位为秒 |
返回值 (Returns):
list: 包含所有发现的设备信息字典的列表,每个字典包含设备ID、IP地址等信息
异常 (Raises):
- 无
示例:
from RflySimSDK.swarm.RJ45_px6x import RJ_Device
device_manager = RJ_Device()
# 搜索局域网内的设备,超时2秒
devices = device_manager.discover_devices(timeout=2)
print(f"发现{len(devices)}个设备: {devices}")
reboot_device_by_id(device_id)¶
功能说明:根据设备ID向指定设备发送重启指令 参数列表 (Args):
| 参数名 | 类型 | 是否必填 | 默认值 | 说明 |
|---|---|---|---|---|
device_id |
int/str |
是 | - | 目标设备的ID |
返回值 (Returns):
bool: 指令发送成功返回True,失败返回False
异常 (Raises):
- 无
start_all_devices()¶
功能说明:向局域网内所有已发现的设备发送启动指令 参数列表 (Args): 无 返回值 (Returns):
None
异常 (Raises):
- 无
get_current_ip(device_id)¶
功能说明:根据设备ID获取对应设备当前的IP地址 参数列表 (Args):
| 参数名 | 类型 | 是否必填 | 默认值 | 说明 |
|---|---|---|---|---|
device_id |
int/str |
是 | - | 目标设备的ID |
返回值 (Returns):
str | None: 成功获取返回设备的IP地址字符串,未找到对应设备则返回None
异常 (Raises):
- 无
set_dhcp(device_id, enable)¶
功能说明:设置指定设备是否启用DHCP自动获取IP 参数列表 (Args):
| 参数名 | 类型 | 是否必填 | 默认值 | 说明 |
|---|---|---|---|---|
device_id |
int/str |
是 | - | 目标设备的ID |
enable |
bool |
是 | - | True表示开启DHCP,False表示禁用DHCP |
返回值 (Returns):
bool: 设置成功返回True,失败返回False
异常 (Raises):
- 无
示例:
from RflySimSDK.swarm.RJ45_px6x import RJ_Device
device_manager = RJ_Device()
devices = device_manager.discover_devices()
# 开启第一个设备的DHCP
if devices:
device_id = devices[0]['device_id']
success = device_manager.set_dhcp(device_id, enable=True)
print(f"设置DHCP结果: {success}")
set_static_ip(device_id, ip_address, gateway, mask)¶
功能说明:为指定设备设置静态IP地址、网关和子网掩码 参数列表 (Args):
| 参数名 | 类型 | 是否必填 | 默认值 | 说明 |
|---|---|---|---|---|
device_id |
int/str |
是 | - | 目标设备的ID |
ip_address |
str |
是 | - | 要设置的静态IP地址 |
gateway |
str |
是 | - | 要设置的网关地址 |
mask |
str |
是 | - | 要设置的子网掩码 |
返回值 (Returns):
bool: 设置成功返回True,失败返回False
异常 (Raises):
- 无
modify_device_id(device_id)¶
功能说明:修改指定设备的设备ID 参数列表 (Args):
| 参数名 | 类型 | 是否必填 | 默认值 | 说明 |
|---|---|---|---|---|
device_id |
int/str |
是 | - | 设备要修改为的新ID |
返回值 (Returns):
bool: 修改成功返回True,失败返回False
异常 (Raises):
- 无
modify_device_port(device_id)¶
功能说明:修改指定设备的通信端口 参数列表 (Args):
| 参数名 | 类型 | 是否必填 | 默认值 | 说明 |
|---|---|---|---|---|
device_id |
int/str |
是 | - | 设备要修改为的新通信端口 |
返回值 (Returns):
bool: 修改成功返回True,失败返回False
异常 (Raises):
- 无
TCPServer 类¶
TCP/UDP多模式网络通信服务端工具类,用于RflySim无人机集群仿真中建立PX6x飞控与仿真环境的网络通信,支持TCP服务端、TCP客户端、UDP客户端、UDP服务端四种连接模式切换。
__init__()¶
功能说明:初始化TCPServer实例对象 参数列表 (Args):
无参数
返回值 (Returns):
TCPServer实例对象
异常 (Raises): 无
get_local_ip()¶
功能说明:获取本机可用的局域网IP地址,用于网络通信绑定 参数列表 (Args):
无参数
返回值 (Returns):
str: 本机局域网IP地址
异常 (Raises): 无
setup_server()¶
功能说明:根据当前配置的连接模式启动网络服务,完成套接字绑定与监听/连接初始化 参数列表 (Args):
无参数
返回值 (Returns):
- 无
异常 (Raises): 无
print_current_mode()¶
功能说明:打印当前使用的网络连接模式 参数列表 (Args):
无参数
返回值 (Returns):
- 无
异常 (Raises): 无
change_connection_mode()¶
功能说明:修改网络连接模式,允许用户交互选择所需的连接模式 参数列表 (Args):
无参数
返回值 (Returns):
- 无
异常 (Raises): 无
set_default_cleanup()¶
功能说明:释放网络资源,关闭已打开的套接字 参数列表 (Args):
无参数
返回值 (Returns):
- 无
异常 (Raises): 无
set_default_mode()¶
功能说明:设置默认网络连接方式为UDP_SERVER_MODE 参数列表 (Args):
无参数
返回值 (Returns):
- 无
异常 (Raises): 无
示例:
from RflySimSDK.swarm import TCPServer
# 创建TCPServer实例并使用默认配置
tcp_server = TCPServer()
tcp_server.set_default_mode()
tcp_server.setup_server()
# 打印当前连接模式
tcp_server.print_current_mode()
# 退出时释放资源
tcp_server.set_default_cleanup()
类变量说明¶
| 类变量名 | 类型 | 值 | 说明 |
|---|---|---|---|
TCP_SERVER_MODE |
int |
0 |
TCP服务端连接模式 |
TCP_CLIENT_MODE |
int |
1 |
TCP客户端连接模式 |
UDP_CLIENT_MODE |
int |
2 |
UDP客户端连接模式 |
UDP_SERVER_MODE |
int |
3 |
UDP服务端连接模式 |
进阶用法示例¶
展示复杂组合场景(如多类协作、异步控制、批量操作)
import RflySimSDK.swarm.RJ45_px6x as rj_sdk
import asyncio
async def batch_configure_devices(async_interval=1):
# 批量扫描发现所有在线RJ45设备
device_list = rj_sdk.RJ_Device.discover_devices(timeout=5)
if not device_list:
print("未发现任何可配置设备")
return None
# 启动TCP服务完成设备通信链路搭建
tcp_server = rj_sdk.TCPServer()
local_ip = tcp_server.get_local_ip()
tcp_server.setup_server(local_ip, 8899)
tcp_server.set_default_cleanup()
# 异步批量修改设备ID与静态IP,避免同步等待阻塞
config_tasks = []
for idx, dev in enumerate(device_list):
new_id = 100 + idx
new_ip = f"{'.'.join(local_ip.split('.')[:3])}.{200 + idx}"
# 异步封装设备配置任务
async def config_task(dev, new_id, new_ip):
rj_sdk.RJ_Device.modify_device_id(dev, new_id)
rj_sdk.RJ_Device.set_static_ip(dev, new_ip, "255.255.255.0", local_ip)
await asyncio.sleep(async_interval)
config_tasks.append(config_task(dev, new_id, new_ip))
# 并发执行所有配置任务
await asyncio.gather(*config_tasks)
# 批量启动所有配置完成的设备
rj_sdk.RJ_Device.start_all_devices()
# 切换为自动重连模式保障链路稳定
tcp_server.change_connection_mode("auto_reconnect")
tcp_server.print_current_mode()
print(f"完成{len(device_list)}台设备的批量配置启动")
return device_list
if __name__ == "__main__":
asyncio.run(batch_configure_devices())
注意事项与避坑指南¶
- 设备扫描范围限制:
discover_devices仅能发现同一局域网网段下的PX6X设备,跨网段扫描会直接返回空列表,使用前需确保所有目标设备与控制端处于同一子网。 - 静态IP配置冲突风险:调用
set_static_ip批量配置设备时,需要提前确认目标IP未被局域网内其他设备占用,IP冲突会导致设备后续无法正常通信。 - TCP服务资源清理:程序退出前需要确保
set_default_cleanup被正确调用,否则会导致端口被持续占用,下次启动服务时会出现端口绑定失败的错误。 - 设备ID修改生效条件:调用
modify_device_id修改设备ID后,需要调用reboot_device_by_id重启设备才能使新ID生效,直接使用新ID进行后续操作会触发设备找不到的错误。
更新日志¶
2024-12-10: fix:更新集群控制接口注释2024-11-13: fix:适配最新硬件接口程序2024-08-30: feat:新增出厂TCP连接模式,本机识别接口,TCP转UDP模式接口2024-08-28: (1)feat:新增延时时间函数、是否启用DHCP、增加静态ip设置、设备端口号设置、设备id设置2024-07-31: 新增加RJ45网络继电器相关接口