news 2026/3/8 1:34:12

利用XPlaneConnect从X-Plane内读写数据

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
利用XPlaneConnect从X-Plane内读写数据

开发步骤(C/C++)

在https://github.com/nasa/XPlaneConnect 下载XPlaneConnect插件和源代码。

将XPlaneConnect.zip插件解压并复制到X-Plane安装目录下的/Resources/plugins/目录,然后打开X-Plane。

创建一个C/C++工程,将XPlaneConnect-1.3-rc6.zip解压,将XPlaneConnect-1.3-rc6/C/src内的xplaneConnect.c和xplaneConnect.h这两个文件复制到C/C++工程目录。

利用xplaneConnect的openUDP函数新建一个udp通信。

利用xplaneConnect内的getPOSI、sendPOSI、getCTRL、sendPOSI、getDREF和sendDREF等函数与X-Plane进行数据读取或写入;利用sendCOMM可以向X-Plane发送指令(类似于快捷键)。

xpconnect下载1

图1.XPlaneConnect github仓库

xpconnect下载2

图2.XPlaneConnect 插件和源码下载

xpconnect下载3

图3.下载后的XPlaneConnect 插件和源码

xpconnect下载4

图4.XPlaneConnect 插件解压复制到xplane根目录下的/Resources/plugins/目录

xpconnect下载5

图5.XPlaneConnect.c和xplaneConnect.h这两个文件复制到C/C++工程目录

代码示例

#include <iostream>

#include "xplaneConnect.h"

int main(int argc, char* argv[])

{

//利用xplaneConnect自带的openUDP函数新建一个udp通信

XPCSocket client = openUDP("127.0.0.1");//"127.0.0.1"为XPlane所在电脑的ip

const int aircraftNum = 0;//X-Plane当前用户飞机为0,其他编号为AI飞机

while (1)

{

//利用getPOSI获取飞机位置、姿态和起落架状态,由于经纬度数据需要较高的数据精度,因此需要用double类型

//利用sendPOSI可以实现飞机位置、姿态和起落架状态的控制

//[Lat, Lon, Alt, Pitch, Roll, Yaw, Gear]

double posi[7];

int result = getPOSI(client, posi, aircraftNum);

if (result < 0) // Error in getPOSI

{

break;

}

//利用getCTRL获取飞机的升降舵、副翼、方向舵、油门杆、起落架、襟翼以及扰流板数据

//利用sendCTRL可以实现飞机升降舵、副翼、方向舵、油门杆、起落架、襟翼以及扰流板的控制

//[Elevator, Aileron, Rudder, Throttle, Gear, Flaps, Speed Brakes]

float ctrl[7];

result = getCTRL(client, ctrl, aircraftNum);

if (result < 0) // Error in getCTRL

{

break;

}

//设置X-Plane飞行仿真暂停/恢复

result = sendCOMM(client, "sim/operation/pause_toggle");

if (result < 0) // Error in sendCOMM

{

break;

}

//利用getDREF获取X-Plane飞行仿真是否暂停的状态

float simPaused[1] = { 0.0f }; //用于存放"sim/time/paused"的状态

int drefArraySizze = 1; //"sim/time/paused"接口的数组大小,该接口不是数组则为1

result = getDREF(client, "sim/time/paused", simPaused, &drefArraySizze);

if (result < 0) // Error in getDREF

{

break;

}

//设置X-Plane内的时间(祖鲁时间,协调世界时)

//sim/time/zulu_time_sec

float zuluTime = 9 * 60 * 60;//设置为早上9点(如果要设置本地时间,需要添加时差)

result = sendDREF(client, "sim/time/zulu_time_sec", &zuluTime, 1);

if (result < 0) // Error in sendDREF

{

break;

}

printf("Loc: (%4f, %4f, %4f) Aileron:%2f Elevator:%2f Rudder:%2f\n",

posi[0], posi[1], posi[2], ctrl[1], ctrl[0], ctrl[2]);

Sleep(100);

}

}

数组类型数据读写:

//设置X-Plane各风层风向

float windDir[13] = {0.0f};

result = sendDREF(client, "sim/weather/region/wind_speed_msc", windDir, 13);

if (result < 0) // Error in sendDREF

{

break;

}

xpconnect下载8

图6.数组类型数据接口示例

接口列表

X-Plane 指令列表(Command): https://siminnovations.com/xplane/command/index.php

X-Plane 数据读写接口(Datarefs): https://developer.x-plane.com/datarefs/#search-form

xpconnect下载1

图7.X-Plane 指令列表

xpconnect下载7

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/3/3 10:28:13

IEEE39节点风机风电一次调频探究

IEEE39节点风机风电一次调频10机39节点系统&#xff0c;风电为双馈风机风电场&#xff0c;带有虚拟惯量&#xff0c;下垂控制&#xff0c;综合惯量控制&#xff0c;频率时空分布&#xff0c;惯量时空分布一次调频&#xff0c;不同同步机组出力明显 simulink/Matlab 可加入风机&…

作者头像 李华
网站建设 2026/2/25 4:54:23

CRMEB商城系统极速部署指南:5分钟搞定Java电商平台的终极方案

CRMEB商城系统极速部署指南&#xff1a;5分钟搞定Java电商平台的终极方案 【免费下载链接】crmeb_java Java商城 免费 开源 CRMEB商城JAVA版&#xff0c;SpringBoot Maven Swagger Mybatis Plus Redis Uniapp VueelementUI 包含移动端、小程序、PC后台、Api接口&#xff1…

作者头像 李华
网站建设 2026/3/6 17:53:50

USBMap:彻底解决MacOS USB端口限制的专业工具

USBMap&#xff1a;彻底解决MacOS USB端口限制的专业工具 【免费下载链接】USBMap Python script for mapping USB ports in macOS and creating a custom injector kext. 项目地址: https://gitcode.com/gh_mirrors/us/USBMap 你是否曾经遇到过Mac设备上某些USB接口速度…

作者头像 李华
网站建设 2026/3/4 11:48:33

3个痛点告诉你为什么需要Dapper:从SQL繁琐到代码优雅的转变

3个痛点告诉你为什么需要Dapper&#xff1a;从SQL繁琐到代码优雅的转变 【免费下载链接】Dapper 项目地址: https://gitcode.com/gh_mirrors/dapper3/Dapper 你是否曾经在Entity Framework的复杂配置中迷失方向&#xff1f;是否因为手写ADO.NET代码的重复性而感到疲惫&…

作者头像 李华
网站建设 2026/3/2 0:36:55

PHP 组件未来:Livewire 4 正式发布,性能更快,功能更完整

为什么值得升级到 Livewire 4&#xff1f;先聊最核心的性能。Livewire 4 重写了请求调度逻辑&#xff0c;尤其是并发交互的处理方式。以表单中的 wire:model.live 为例&#xff0c;如今每一次输入都会独立并行发送请求&#xff0c;彼此互不阻塞&#xff0c;打字和响应都更顺畅。…

作者头像 李华
网站建设 2026/3/2 20:09:53

新来的外包,限流算法用的这么6

1.流行的限速器① 固定窗口限速 Fixed Window Counter跟踪固定时间间隔&#xff08;如 1 分钟&#xff09;内的请求数量&#xff0c;一旦达到上限&#xff0c;就会拒绝该窗口中的后续所有请求。1_VsdNn5KGd1A0rIfbczGy8Q.gifUserCase&#xff1a; 可预测流量、低精度需求的简单…

作者头像 李华