利用VS2022和命令行两种方法进行JSBSim的最简仿真及编译生成静态库lib文件并调用使用学习笔记

近日,博主在学习JSBSim中遇到了不少问题,有一些问题有前辈在教程中写的比较详细,有的问题在网上找不到解决方案,在这里我记录一下我学习JSBSim进行最简仿真的过程。

1、下载JSBSim(我下载的是V1.1.0版本比较老的)链接:https://github.com/JSBSim-Team/jsbsim/releases?page=2

 2、打开压缩包,jsbsim-1.1.0目录下有一个JSBSim.sln的文件,利用VS2022打开。

弹出提醒,点击确定。

 3、VS2022运行最简仿真

step1:点击菜单项目(P)点击属性(P)进入项目属性页;

step2:点击右上角配置管理器,选择活动Release和活动X64

step3:配置属性-调试-命令参数:添加--script=scripts\c1723.xml --outputlogfile=c1723.csv,点击应用

step4:点开C/C++ ->代码生成->运行库,选择多线程(/MT);

step5: 点击应用、确定,点击本地Windows调试,运行界面如下:

 生成的c1723.csv文件

4、命令行运行

step1: 按Win+R,输cmd.exe,点击确定

step2:打开项目文件夹,在release文件夹下面有一个JSBSim.exe,记住所在路径,如我的路径为E:\jsbsim-1.1.0\jsbsim-1.1.0\Release\JSBSim.exe

step3:设置到项目路径

cd E:\jsbsim-1.1.0\jsbsim-1.1.0\Release

e:

 step4:输入命令,程序运行

注意:如果不设置路径,可能出现:Coule not open file:Path"scripts/c1723.xml" File:Path "scripts/c1723.xml"could not be loaded问题

 2023.4.19 更新:生成JSBSim静态库lib文件

在进行最简仿真是选择了更新平台工具集,但在生成静态库时会出现错误LNK2019无法解析的外部符号,在查阅资料和多种尝试无果后怀疑,升级了平台工具集导致的不匹配。

以下为生成lib并使用步骤:

step1:打开sln文件(最好是没有经过变动的刚解压缩的工程文件夹下),弹出提醒,两个都选择无升级。

 打开工程属性显示如下:

step2:进入工程属性页,配置选(活动)Debug ,平台选(活动)X64,配置属性->常规->配置类型,选择静态库,lib.点击应用和确定,点击编译,编译成功弹出提示不用管,工程目录Debug文件夹下会生成一个JSBSim.lib文件。

step3:新建C++空项目文件,将aircraft、engine、src、system、scripts及JSBSim.lib文件复制到新建项目工程目录下。

 

step3:新建main.cpp,在解决方案-源文件-添加-新建项

 一个实现代码如下:

#include <FGFDMExec.h>//包含头文件,该头文件在src文件夹中,已在包含目录中配置。、
#pragma comment(lib,"JSBSim.lib")//控制宏,代表链接该静态库
#pragma comment(lib,"ws2_32.lib")//这个库是网络相关的库,JSB使用了该库,如果不链接会出现error lnk2001 __impxxxx: 无法解析的外部符号错误
//如果在前文使用法1配置了链接器,则此处无需使用控制宏

int main()
{
    JSBSim::FGFDMExec FDMExec;//实例化

    FDMExec.SetEnginePath(SGPath(".\\engine"));//设置engine文件路径
    FDMExec.SetAircraftPath(SGPath(".\\aircraft"));//设置aircraft文件路径
    FDMExec.SetSystemsPath(SGPath(".\\systems"));//设置systems文件路径

    FDMExec.LoadScript(SGPath(".\\scripts\\c1723.xml"));//设置要载入的script文件路径,本文使用经典的c1723作为测试

    bool result = true;

    while (result) result = FDMExec.Run();//运行

    return 0;
}

step4:配置属性:配置和平台与step1保持一致即可,配置属性-包含目录,添加src文件夹所在路径

 配置属性-联结器-输入-附加依赖项,输入ws2_32.lib和JSBSim.lib

 点击应用-确定,运行调试,程序自动运行

参考文章:使用VS2015编译JSBSim_jsbsim编译_32768的博客-CSDN博客

JSBSim应用教程VisualStudio VS2019_kolento233的博客-CSDN博客

及《Building_JSBSim_with_Visual_Cpp》

  • 2
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 7
    评论
以下是一个简单的使用Matlab的Sources模块库进行切削振动信号仿真,并提取位移和声音两种频域信号的示例代码: ```matlab % 定义切削参数 f = 1000; % 切削频率 vc = 20; % 切削速度 ap = 0.1; % 切削深度 ae = 0.002; % 切削宽度 rake = 0; % 刀具前角 nose = 0; % 刀尖倒角半径 k = 1.5; % 切削力系数 kc = 0.8; % 切屑系数 kt = 0.6; % 刀具系数 % 定义工件材料参数 E = 2.1e11; % 弹性模量 nu = 0.3; % 泊松比 rho = 7800; % 密度 % 定义仿真参数 L = 0.05; % 仿真长度 Nx = 4096; % 空间点数 dt = 1e-7; % 时间步长 Nt = 4096; % 时间点数 % 生成切削力信号 t = linspace(0, dt*Nt, Nt); Fc = k * ae * ap * vc * cos(2*pi*f*t); % 生成工件初始状态 x = linspace(0, L, Nx); u0 = zeros(1, Nx); v0 = zeros(1, Nx); % 调用Sources模块库进行仿真 [u, v, p, fs] = sources(x, u0, v0, Fc, dt, rho, E, nu, rake, nose, ae, ap, kc, kt); % 计算位移和声音频域信号 U = fft(u); P = fft(p); % 绘制结果 figure; subplot(2, 1, 1) plot(x, u); title('位移信号'); xlabel('位置 (m)'); ylabel('位移 (m)'); subplot(2, 1, 2) plot(fs/1000, abs(P)); title('声音信号'); xlabel('频率 (kHz)'); ylabel('声音幅值'); ``` 在代码中,我们首先定义了切削参数和工件材料参数,然后定义了仿真参数,包括仿真长度、空间点数、时间步长和时间点数。接着,我们生成了切削力信号,然后调用Sources模块库进行仿真,并计算位移和声音频域信号。最后,我们绘制了位移和声音信号的时域和频域图像。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值