From ee4224a0fb76e96c4dc1e3cbaba0b361673273e5 Mon Sep 17 00:00:00 2001 From: CaoYuHui <1152604503@qq.com> Date: Tue, 2 Jul 2024 09:51:02 +0800 Subject: [PATCH] =?UTF-8?q?20240702=EF=BC=8C98/985=20=E5=A4=A9=E8=BF=9B?= =?UTF-8?q?=E5=90=8A=E8=88=B1+13=E6=89=80=E5=90=8A=E8=88=B1=E6=8E=A7?= =?UTF-8?q?=E5=88=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Include/calc_api.h | 89 +++++++++++++ Include/libcalcdis/relsease/calc_api.h | 89 +++++++++++++ Include/libcalcdis/relsease/libcalcdis.dll | Bin 0 -> 43008 bytes .../CH91PayloadSoftware.rc | Bin 80782 -> 80966 bytes .../CH91PayloadSoftware.vcxproj | 11 +- .../CH91PayloadSoftware.vcxproj.filters | 47 +++++-- Src/CH91PayloadSoftware/CalcDestination.cpp | 84 ++++++++++++ Src/CH91PayloadSoftware/CalcDestination.h | 34 +++++ .../CalcDestinationDlg.cpp | 120 ++++++++++++++++++ Src/CH91PayloadSoftware/CalcDestinationDlg.h | 42 ++++++ Src/CH91PayloadSoftware/DlgWHTJDCNew.cpp | 99 ++++++++++----- Src/CH91PayloadSoftware/DlgWHTJDCNew.h | 19 +-- Src/CH91PayloadSoftware/resource.h | Bin 76972 -> 76972 bytes 13 files changed, 575 insertions(+), 59 deletions(-) create mode 100644 Include/calc_api.h create mode 100644 Include/libcalcdis/relsease/calc_api.h create mode 100644 Include/libcalcdis/relsease/libcalcdis.dll create mode 100644 Src/CH91PayloadSoftware/CalcDestination.cpp create mode 100644 Src/CH91PayloadSoftware/CalcDestination.h create mode 100644 Src/CH91PayloadSoftware/CalcDestinationDlg.cpp create mode 100644 Src/CH91PayloadSoftware/CalcDestinationDlg.h diff --git a/Include/calc_api.h b/Include/calc_api.h new file mode 100644 index 0000000..c2ab965 --- /dev/null +++ b/Include/calc_api.h @@ -0,0 +1,89 @@ +#pragma once +#include + +#define CALC_EXPORT 0 + +#if CALC_EXPORT +#define CALC_API __declspec(dllexport) +#else +#define CALC_API __declspec(dllimport) +#endif + +#ifdef __cplusplus +extern "C" { +#endif + /*---------------------计算目标点经纬度需求数据------------------------*/ + typedef struct calcData + { + float LaserDistance; //激光测距距离(无激光测距值为0) + float PodPitchAngle; //吊舱俯仰角(向上为正 归中为0° -115~+90°) + float PodDirectionAngle; //吊舱方位角(-180~+180°) + float PodRollAngle; //吊舱滚转角 + float FlyPitchAngle; //飞机俯仰角(-90~+90°) + float FlyHeadingAngle; //飞机航向角(0~360°) + float FlyRollAngle; //飞机滚转角(-90~+90°) + double FlyCurrentLongitude; //飞机当前经度 + double FlyCurrentLatitude; //飞机当前纬度 + float FlyCurrentHeight; //飞机当前高度 + bool isUseRoll; //是否使用滚转 默认不使用(三轴光电吊舱) + }CALC_DES_DATA, FLY_DATA; + + /*------------------------目标点位置信息数据--------------------------*/ + + typedef struct locationData + { + double DisLongitude; //目标点经度 + double Dislatitude; //目标点纬度 + float DisHeight; //目标点高度 + + /*locationData& operator=(const locationData& other) + { + this->DisHeight = other.DisHeight; + this->Dislatitude = other.Dislatitude; + this->DisLongitude = other.DisLongitude; + + return *this; + }*/ + }DES_LOCATION; + + /*----------------根据空投点目标吊舱需要转动的角度-------------------*/ + typedef struct podNeedAngle + { + float directionAngle; //吊舱方位角(-180~+180°) + float PitchAngle; //飞机俯仰角(-90~+90°) + }POD_NEED_ANGLE; + + /********************************************** + * @func calcDisLocation + * @brief 计算目标点的位置 + * @param CALC_DES_DATA 计算目标点经纬度需求数据 + * @return DES_LOCATION 目标点位置信息数据 + **********************************************/ + CALC_API DES_LOCATION __stdcall calcDisLocation(CALC_DES_DATA calcData); + + /********************************************** + * @func calcDisLocation + * @brief 计算目标点的位置(向量) + * @param CALC_DES_DATA 计算目标点经纬度需求数据 + * @return DES_LOCATION 目标点位置信息数据 + **********************************************/ + CALC_API DES_LOCATION __stdcall calcDisLocation2(CALC_DES_DATA calcData); + + /********************************************** + * @func calcPodNeedAngle + * @brief 计算空投目标点转向与俯仰应变化的角度 + * @param CALC_DES_DATA 计算目标点经纬度需求数据 + * @return POD_NEED_ANGLE 目标点位置信息数据 + **********************************************/ + CALC_API POD_NEED_ANGLE __stdcall calcPodNeedAngle(CALC_DES_DATA calcData, DES_LOCATION desLocation); + + /********************************************** + * @func calcPodNeedAngle2 + * @brief 计算空投目标点转向与俯仰应变化的角度(向量) + * @param CALC_DES_DATA 计算目标点经纬度需求数据 + * @return POD_NEED_ANGLE 目标点位置信息数据 + **********************************************/ + CALC_API POD_NEED_ANGLE __stdcall calcPodNeedAngle2(CALC_DES_DATA calcData, DES_LOCATION desLocation); +#ifdef __cplusplus +} +#endif \ No newline at end of file diff --git a/Include/libcalcdis/relsease/calc_api.h b/Include/libcalcdis/relsease/calc_api.h new file mode 100644 index 0000000..553ad3a --- /dev/null +++ b/Include/libcalcdis/relsease/calc_api.h @@ -0,0 +1,89 @@ +#pragma once +#include + +#define CALC_EXPORT 1 + +#ifdef CALC_EXPORT +#define CALC_API __declspec(dllexport) +#else +#define CALC_API __declspec(dllimport) +#endif + +#ifdef __cplusplus +extern "C" { +#endif + /*---------------------计算目标点经纬度需求数据------------------------*/ + typedef struct calcData + { + float LaserDistance; //激光测距距离(无激光测距值为0) + float PodPitchAngle; //吊舱俯仰角(向上为正 归中为0° -115~+90°) + float PodDirectionAngle; //吊舱方位角(-180~+180°) + float PodRollAngle; //吊舱滚转角 + float FlyPitchAngle; //飞机俯仰角(-90~+90°) + float FlyHeadingAngle; //飞机航向角(0~360°) + float FlyRollAngle; //飞机滚转角(-90~+90°) + double FlyCurrentLongitude; //飞机当前经度 + double FlyCurrentLatitude; //飞机当前纬度 + float FlyCurrentHeight; //飞机当前高度 + bool isUseRoll; //是否使用滚转 默认不使用(三轴光电吊舱) + }CALC_DES_DATA, FLY_DATA; + + /*------------------------目标点位置信息数据--------------------------*/ + + typedef struct locationData + { + double DisLongitude; //目标点经度 + double Dislatitude; //目标点纬度 + float DisHeight; //目标点高度 + + /*locationData& operator=(const locationData& other) + { + this->DisHeight = other.DisHeight; + this->Dislatitude = other.Dislatitude; + this->DisLongitude = other.DisLongitude; + + return *this; + }*/ + }DES_LOCATION; + + /*----------------根据空投点目标吊舱需要转动的角度-------------------*/ + typedef struct podNeedAngle + { + float directionAngle; //吊舱方位角(-180~+180°) + float PitchAngle; //飞机俯仰角(-90~+90°) + }POD_NEED_ANGLE; + + /********************************************** + * @func calcDisLocation + * @brief 计算目标点的位置 + * @param CALC_DES_DATA 计算目标点经纬度需求数据 + * @return DES_LOCATION 目标点位置信息数据 + **********************************************/ + CALC_API DES_LOCATION __stdcall calcDisLocation(CALC_DES_DATA calcData); + + /********************************************** + * @func calcDisLocation + * @brief 计算目标点的位置(向量) + * @param CALC_DES_DATA 计算目标点经纬度需求数据 + * @return DES_LOCATION 目标点位置信息数据 + **********************************************/ + CALC_API DES_LOCATION __stdcall calcDisLocation2(CALC_DES_DATA calcData); + + /********************************************** + * @func calcPodNeedAngle + * @brief 计算空投目标点转向与俯仰应变化的角度 + * @param CALC_DES_DATA 计算目标点经纬度需求数据 + * @return POD_NEED_ANGLE 目标点位置信息数据 + **********************************************/ + CALC_API POD_NEED_ANGLE __stdcall calcPodNeedAngle(CALC_DES_DATA calcData, DES_LOCATION desLocation); + + /********************************************** + * @func calcPodNeedAngle2 + * @brief 计算空投目标点转向与俯仰应变化的角度(向量) + * @param CALC_DES_DATA 计算目标点经纬度需求数据 + * @return POD_NEED_ANGLE 目标点位置信息数据 + **********************************************/ + CALC_API POD_NEED_ANGLE __stdcall calcPodNeedAngle2(CALC_DES_DATA calcData, DES_LOCATION desLocation); +#ifdef __cplusplus +} +#endif \ No newline at end of file diff --git a/Include/libcalcdis/relsease/libcalcdis.dll b/Include/libcalcdis/relsease/libcalcdis.dll new file mode 100644 index 0000000000000000000000000000000000000000..ecbf4ba6eaf5619ae0415346c39166b261d39446 GIT binary patch literal 43008 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 literal 0 HcmV?d00001 diff --git a/Src/CH91PayloadSoftware/CH91PayloadSoftware.rc b/Src/CH91PayloadSoftware/CH91PayloadSoftware.rc index 37da237cc4fbda9addd5acbd770e8728c072a719..8e86fc138ffca9537efc4b915a04c82bc6e5e3ff 100644 GIT binary patch delta 419 zcmeDC&T{Mr%Z3U5%%%(`lX->KPd?!$v^gYzM}XCc!H~gVa%w^&kY&tZG&w)fbh1LC z7n}zXH<o*QNm&SZg`c8n%KHQtlob#qL9az<+Mo|{i5Ke}x*`OYl^5WU&s zc83_F(d4_oE7^^JMp^)U75k@p^O;W;%##;Xu`tO`m~5~@hTj}0V*!@e0s7o{v*EW^ zCbswfAN(Nl!Z3MIxPVnK=uE!YUB2KO}t zO~Bp&c?aZCP;gIts5sfIMq>IMBSwMED*xVbu^NKHe0m}q&_{Kt65A6v8TE_+65f*i delta 374 zcmX^1gQf2~%Z3U5%mxg`lX->KPd?!$v^gYzM}XCk!IZ&ba%w^&kY&MOFgZWbbh1LC z7n}zYHwUWto3wT6IYy1i0v~xM-%FB$h;IIyB+Ce9nopKbSqf*FZ%Un1IQiOXvB?u2 zicL1S?lL*z42UhlZo;6$V8&oRx$vsvD^yYQy>-iLGgtzh zvi6(w Windows true - QB_SimpleImgShowD.lib;QB_GoogleMapOperateD.lib;MapPrj.lib;QB_ImgShowBaseD.lib;QB_ImgProcessFunD.lib;QB_AutoMapD.lib;OIS_static_d.lib;Decoder_H264_ALLD.lib;%(AdditionalDependencies) + QB_SimpleImgShowD.lib;QB_GoogleMapOperateD.lib;MapPrj.lib;QB_ImgShowBaseD.lib;QB_ImgProcessFunD.lib;QB_AutoMapD.lib;OIS_static_d.lib;Decoder_H264_ALLD.lib;libcalcdis.lib;%(AdditionalDependencies) $(OutDir)$(TargetName)$(TargetExt) - C:\1銆丠tsdfp\2銆丟CS\3銆丗H-98鏈鸿浇鐩告満鐩戞帶杞欢2023\ProgramFiles\opencv245\lib\x86;C:\1銆丠tsdfp\2銆丟CS\3銆丗H-98鏈鸿浇鐩告満鐩戞帶杞欢2023\ProgramFiles\gdal\lib;%(AdditionalLibraryDirectories) + C:\1銆丠tsdfp\2銆丟CS\3銆丗H-98鏈鸿浇鐩告満鐩戞帶杞欢2023\ProgramFiles\opencv245\lib\x86;C:\1銆丠tsdfp\2銆丟CS\3銆丗H-98鏈鸿浇鐩告満鐩戞帶杞欢2023\ProgramFiles\gdal\lib;C:\1銆丠tsdfp\2銆丟CS\3銆丗H-98鏈鸿浇鐩告満鐩戞帶杞欢2023\client-video\Include\libcalcdis\debug;%(AdditionalLibraryDirectories) false @@ -104,7 +104,7 @@ true true QB_SimpleImgShow.lib;QB_GoogleMapOperate.lib;MapPrj.lib;QB_ImgShowBase.lib;QB_AutoMap.lib;QB_ImgProcessFun.lib;OIS_static.lib;Decoder_H264_ALLR.lib;%(AdditionalDependencies) - C:\1銆丠tsdfp\2銆丟CS\3銆丗H-98鏈鸿浇鐩告満鐩戞帶杞欢2023\ProgramFiles\gdal\lib;C:\1銆丠tsdfp\2銆丟CS\3銆丗H-98鏈鸿浇鐩告満鐩戞帶杞欢2023\ProgramFiles\opencv245\lib\x86;%(AdditionalLibraryDirectories) + C:\1銆丠tsdfp\2銆丟CS\3銆丗H-98鏈鸿浇鐩告満鐩戞帶杞欢2023\ProgramFiles\gdal\lib;C:\1銆丠tsdfp\2銆丟CS\3銆丗H-98鏈鸿浇鐩告満鐩戞帶杞欢2023\ProgramFiles\opencv245\lib\x86;C:\1銆丠tsdfp\2銆丟CS\3銆丗H-98鏈鸿浇鐩告満鐩戞帶杞欢2023\client-video\Include\libcalcdis\relsease;%(AdditionalLibraryDirectories) false @@ -162,6 +162,7 @@ + @@ -169,6 +170,8 @@ + + @@ -228,6 +231,8 @@ + + diff --git a/Src/CH91PayloadSoftware/CH91PayloadSoftware.vcxproj.filters b/Src/CH91PayloadSoftware/CH91PayloadSoftware.vcxproj.filters index 3a99993..947ff04 100644 --- a/Src/CH91PayloadSoftware/CH91PayloadSoftware.vcxproj.filters +++ b/Src/CH91PayloadSoftware/CH91PayloadSoftware.vcxproj.filters @@ -97,6 +97,12 @@ {be9a2dce-ba4c-44fd-9db6-fefe7b53caa0} + + {cb87282a-274d-4638-a083-106c128d494c} + + + {2a097b77-7c88-49b8-a119-d4c206be658a} + @@ -387,20 +393,29 @@ IMP\鍗忚 - + CYH鏂板 - CYH鏂板 + CYH鏂板\鍚婅埍鎺у埗 - - CYH鏂板 + + CYH鏂板\鍚婅埍鎺у埗 + + + CYH鏂板\鍚婅埍鎺у埗 - CYH鏂板 + CYH鏂板\鍚婅埍鎺у埗 - - CYH鏂板 + + CYH鏂板\闈跺悜鐩爣 + + + CYH鏂板\闈跺悜鐩爣 + + + CYH鏂板\闈跺悜鐩爣 @@ -527,17 +542,23 @@ IMP\鍗忚 - - CYH鏂板 - CYH鏂板 + + CYH鏂板\鍚婅埍鎺у埗 + + + CYH鏂板\鍚婅埍鎺у埗 + - CYH鏂板 + CYH鏂板\鍚婅埍鎺у埗 - - CYH鏂板 + + CYH鏂板\闈跺悜鐩爣 + + + CYH鏂板\闈跺悜鐩爣 diff --git a/Src/CH91PayloadSoftware/CalcDestination.cpp b/Src/CH91PayloadSoftware/CalcDestination.cpp new file mode 100644 index 0000000..9330b41 --- /dev/null +++ b/Src/CH91PayloadSoftware/CalcDestination.cpp @@ -0,0 +1,84 @@ +#include "stdAfx.h" +#include "CalcDestination.h" +// +// +//CalcDestination::CalcDestination() +//{ +// memset(&_calcData, 0 , sizeof(CALC_DES_DATA)); +// memset(&_airDropLocation, 0 , sizeof(DES_LOCATION)); +//} +// +//CalcDestination::~CalcDestination() +//{ +//} +// +///********************************************** +//* @func setFlyParameter +//* @brief 设置飞机定位数据参数 +//* @param DataFKD 飞机遥测 +//**********************************************/ +//void CalcDestination::setFlyLocationParameter(const DataFKD& data) +//{ +// _calcData.FlyCurrentLongitude = data.DataA2.GPSLongitude;//data.DataA8.OEM718DLon; +// _calcData.FlyCurrentLatitude = data.DataA2.GPSLatitude;//data.DataA8.OEM718DLat; +// _calcData.FlyCurrentHeight = data.DataA2.HBHeight;//data.DataA8.OEM718DAlt; +//} +// +///********************************************** +//* @func setFlyAttitudeParmeter +//* @brief 设置飞机姿态数据参数 +//* @param DataFKD 飞机遥测 +//**********************************************/ +//void CalcDestination::setFlyAttitudeParmeter(const DataFKD& data) +//{ +// _calcData.FlyHeadingAngle = data.DataA7.Heading; +// _calcData.FlyPitchAngle = data.DataA7.Pitch; +// _calcData.FlyRollAngle = data.DataA7.Roll; +//} +// +///********************************************** +//* @func setPodAttitudeParmerter +//* @brief 设置吊舱姿态数据参数 +//* @param DataFKD 飞机遥测 +//**********************************************/ +//void CalcDestination::setPodAttitudeParmerter(const DataFKD& data) +//{ +// _calcData.PodDirectionAngle = data.DataAC.sub1.PodYaw; +// _calcData.PodPitchAngle = data.DataAC.sub1.PodPitch; +// _calcData.PodRollAngle = data.DataAC.sub1.PodRoll; +// _calcData.LaserDistance = data.DataAC.sub2.TargetDistance;//100;//data.DataAC.sub1. 激光测距距离参数 +//} +// +///********************************************** +//* @func setDesLocation +//* @brief 设置空投靶向目标点定位数据 +//* @param DataFKD 飞机遥测 +//**********************************************/ +//void CalcDestination::setDesLocation(double lat, double lon, float height) +//{ +// _airDropLocation.Dislatitude = lat; +// _airDropLocation.DisLongitude = lon; +// _airDropLocation.DisHeight = height; +//} +// +///********************************************** +//* @func calcDesLocation +//* @brief 根据飞机与吊舱姿态数据计算目标点的定位信息 +//* @param DataFKD 飞机遥测 +//**********************************************/ +//void CalcDestination::calcDesLocation(DES_LOCATION& desLoaction) +//{ +// desLoaction = calcDisLocation2(_calcData); +//} +// +///********************************************** +//* @func calcDesLocation +//* @brief 根据飞机与吊舱姿态数据计算目标点的定位信息 +//* @param DataFKD 飞机遥测 +//**********************************************/ +//void CalcDestination::calcPodNeedAngle(POD_NEED_ANGLE& needAngle) +//{ +// auto angle = calcPodNeedAngle2(_calcData, _airDropLocation); +// needAngle.directionAngle = angle.directionAngle; +// needAngle.PitchAngle = angle.PitchAngle; +//} diff --git a/Src/CH91PayloadSoftware/CalcDestination.h b/Src/CH91PayloadSoftware/CalcDestination.h new file mode 100644 index 0000000..af05ca4 --- /dev/null +++ b/Src/CH91PayloadSoftware/CalcDestination.h @@ -0,0 +1,34 @@ +#pragma once +#include "calc_api.h" +//#include "framelib/FrameFKD_JE.h" +// +//class CalcDestination : public CBCGPPropertyPage +//{ +//public: +// CalcDestination(); +// virtual ~CalcDestination(); +// +// //设置飞机位置信息参数 +// void setFlyLocationParameter(const DataFKD& data); +// +// //设置飞机姿态信息参数 +// void setFlyAttitudeParmeter(const DataFKD& data); +// +// //设置吊舱姿态信息参数 +// void setPodAttitudeParmerter(const DataFKD& data); +// +// //设置空投靶向目标点定位数据 +// void setDesLocation(double lat, double lon, float height); +// +// //计算目标点位置 +// void calcDesLocation(DES_LOCATION& desLoaction); +// +// //计算空投目标点转向与俯仰应变化的角度 +// void calcPodNeedAngle(POD_NEED_ANGLE& needAngle); +// +//private: +// CALC_DES_DATA _calcData; //空投靶向目标需求飞机、吊舱相关数据 +// DES_LOCATION _desLocation;//目标点位置信息 +// DES_LOCATION _airDropLocation;//空投点位置信息 +//}; +// diff --git a/Src/CH91PayloadSoftware/CalcDestinationDlg.cpp b/Src/CH91PayloadSoftware/CalcDestinationDlg.cpp new file mode 100644 index 0000000..1f84ae2 --- /dev/null +++ b/Src/CH91PayloadSoftware/CalcDestinationDlg.cpp @@ -0,0 +1,120 @@ +#include "StdAfx.h" +#include "CalcDestinationDLG.h" +// +//IMPLEMENT_DYNAMIC(CalcDestinationDLG, CBCGPPropertyPage) +// +//CalcDestinationDLG::CalcDestinationDLG(CWnd* pParent) +//: CBCGPPropertyPage(CalcDestinationDLG::IDD) +//, _airDropLon(0.0) +//, _airDropLat(0.0) +//, _airDropHeight(0.0) +//, _podPitch(0.0) +//, _podYaw(0.0) +//, _desLon(0.0) +//, _desLat(0.0) +//, _desHeight(0.0) +//{ +// memset(&_podNeedAngle, 0,sizeof(POD_NEED_ANGLE)); +// memset(&_desLocation, 0 ,sizeof(DES_LOCATION)); +//} +// +//CalcDestinationDLG::~CalcDestinationDLG() +//{ +//} +// +//void CalcDestinationDLG::DoDataExchange(CDataExchange* pDX) +//{ +// CBCGPPropertyPage::DoDataExchange(pDX); +// +// DDX_Text(pDX, IDC_EDIT_AIR_LON, _airDropLon); +// DDX_Text(pDX, IDC_EDIT_AIR_LAT, _airDropLat); +// DDX_Text(pDX, IDC_EDIT_AIR_HEIGHT, _airDropHeight); +// DDX_Text(pDX, IDC_EDIT_RAW, _podYaw); +// DDX_Text(pDX, IDC_EDIT_PITCH, _podPitch); +// DDX_Text(pDX, IDC_EDIT_DES_LON, _desLon); +// DDX_Text(pDX, IDC_EDIT_DES_LAT, _desLat); +// DDX_Text(pDX, IDC_EDIT_DES_HEIGHT, _desHeight); +// +//} +// +//BEGIN_MESSAGE_MAP(CalcDestinationDLG, CBCGPPropertyPage) +// ON_BN_CLICKED(IDC_BUTTON_SETLOCATION, &CalcDestinationDLG::onBtnClickedSetFlyLocation) +// ON_BN_CLICKED(IDC_BUTTON_SETLOCATION2, &CalcDestinationDLG::onBtnClickedSetAirLocation) +// ON_BN_CLICKED(IDC_BUTTON_CALCANGLE, &CalcDestinationDLG::onBtnClickedCalcAngle) +// ON_BN_CLICKED(IDC_BUTTON_CALC, &CalcDestinationDLG::onBtnClickedCalc) +// +// ON_BN_CLICKED(IDC_BUTTON_TURN, &CalcDestinationDLG::OnBnClickedButtonTurn) +//END_MESSAGE_MAP() +// +//void CalcDestinationDLG::onBtnClickedSetFlyLocation() +//{ +// CString str; +// if(g_CurFrameFKD != NULL) +// { +// str.Format("%.7f",g_CurFrameFKD->Data.DataA2.GPSLongitude); //经度 +// GetDlgItem(IDC_EDIT_AIR_LON)->SetWindowText(str); +// str.Format("%.7f",g_CurFrameFKD->Data.DataA2.GPSLatitude); //纬度 +// GetDlgItem(IDC_EDIT_AIR_LAT)->SetWindowText(str); +// str.Format("%.2f",g_CurFrameFKD->Data.DataA2.HBHeight); //海拔高度 +// GetDlgItem(IDC_EDIT_AIR_HEIGHT)->SetWindowText(str); +// +// _airDropLon = g_CurFrameFKD->/*Data.DataA8.OEM718DLon;*/Data.DataA2.GPSLongitude; //经度 +// _airDropLat = g_CurFrameFKD->/*Data.DataA8.OEM718DLat;*/Data.DataA2.GPSLatitude; //纬度 +// _airDropHeight = g_CurFrameFKD->/*Data.DataA8.OEM718DAlt;*/Data.DataA2.HBHeight; //海拔高度 +// } +//} +// +//void CalcDestinationDLG::onBtnClickedSetAirLocation() +//{ +// UpdateData(TRUE); +// g_calcDestination.setDesLocation(_airDropLat, _airDropLon, _airDropHeight); +//} +// +//void CalcDestinationDLG::onBtnClickedCalcAngle() +//{ +// +// g_calcDestination.calcPodNeedAngle(_podNeedAngle); +// +// _podPitch = _podNeedAngle.PitchAngle; +// _podYaw = _podNeedAngle.directionAngle; +// +// /** 对于晶品吊舱************ +// *方位轴:360°×n(连续,机头方向向右为正); +// *俯仰轴:360°×n(视轴垂直下视为0°,向上为正); +// **************************/ +// +// _podPitch = _podPitch + 90.0; +// if (_podYaw < 0) +// _podYaw = _podYaw + 360.0; +// CString str; +// str.Format("%.2f", _podPitch); //俯仰角 +// GetDlgItem(IDC_EDIT_PITCH)->SetWindowText(str); +// str.Format("%.2f", _podYaw); //转向角 +// GetDlgItem(IDC_EDIT_RAW)->SetWindowText(str); +// +// +//} +// +//void CalcDestinationDLG::onBtnClickedCalc() +//{ +// g_calcDestination.calcDesLocation(_desLocation); +// _desLon = _desLocation.DisLongitude; +// _desLat = _desLocation.Dislatitude; +// _desHeight = _desLocation.DisHeight; +// +// CString str; +// str.Format("%.7f",_desLon); //经度 +// GetDlgItem(IDC_EDIT_DES_LON)->SetWindowText(str); +// str.Format("%.7f",_desLat); //纬度 +// GetDlgItem(IDC_EDIT_DES_LAT)->SetWindowText(str); +// str.Format("%.2f",_desHeight); //海拔高度 +// GetDlgItem(IDC_EDIT_DES_HEIGHT)->SetWindowText(str); +//} +// +// +// +//void CalcDestinationDLG::OnBnClickedButtonTurn() +//{ +// UpdateData(TRUE); +// ::SendMessageA(g_dlgVideoShowHandle, WM_CALCDES_PODRURN, (WPARAM)&_podPitch, (LPARAM)&_podYaw); +//} diff --git a/Src/CH91PayloadSoftware/CalcDestinationDlg.h b/Src/CH91PayloadSoftware/CalcDestinationDlg.h new file mode 100644 index 0000000..f28ffa4 --- /dev/null +++ b/Src/CH91PayloadSoftware/CalcDestinationDlg.h @@ -0,0 +1,42 @@ +#pragma once +#include "resource.h" +#include "global.h" +//#include "framelib/FrameFKD_JE.h" +// +// +//class CalcDestinationDLG : +// public CBCGPPropertyPage +//{ +// DECLARE_DYNAMIC(CalcDestinationDLG) +// +//public: +// CalcDestinationDLG(CWnd* pParent = NULL); +// virtual ~CalcDestinationDLG(); +// +// enum { IDD = IDD_DLG_AIR_DROP}; +// +//protected: +// virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV 支持 +// //virtual BOOL OnInitDialog(); +// DECLARE_MESSAGE_MAP() +// +//private: +// double _airDropLon; +// double _airDropLat; +// float _airDropHeight; +// POD_NEED_ANGLE _podNeedAngle; +// float _podYaw; +// float _podPitch; +// DES_LOCATION _desLocation; +// +// double _desLon; +// double _desLat; +// float _desHeight; +//public: +// afx_msg void onBtnClickedSetFlyLocation(); +// afx_msg void onBtnClickedSetAirLocation(); +// afx_msg void onBtnClickedCalcAngle(); +// afx_msg void onBtnClickedCalc(); +// afx_msg void OnBnClickedButtonTurn(); +//}; +// diff --git a/Src/CH91PayloadSoftware/DlgWHTJDCNew.cpp b/Src/CH91PayloadSoftware/DlgWHTJDCNew.cpp index 59d01d2..b0a989e 100644 --- a/Src/CH91PayloadSoftware/DlgWHTJDCNew.cpp +++ b/Src/CH91PayloadSoftware/DlgWHTJDCNew.cpp @@ -42,8 +42,8 @@ DlgWHTJDCNew::DlgWHTJDCNew(CWnd* pParent /*=NULL*/) , m_FocalDistanceSet(_T("")) , m_DigitalGuidanceDir(_T("")) , m_DigitalGuidancePitch(_T("")) - , m_SCanModelAngle(_T("")) - , m_SCanModelSpeed(_T("")) + , m_SCanModelDirSpeed(_T("")) + , m_SCanModelPitchSpeed(_T("")) , m_DirSCanSetCentre(_T("")) , m_DirSCanSetRange(_T("")) , m_PitchSCanSetCentre(_T("")) @@ -107,6 +107,7 @@ void DlgWHTJDCNew::DoDataExchange(CDataExchange* pDX) DDX_Control(pDX, IDC_BTN_WHTJDC_NEW42, DC13InsBtn[41]); DDX_Control(pDX, IDC_BTN_WHTJDC_NEW43, DC13InsBtn[42]); DDX_Control(pDX, IDC_BTN_WHTJDC_NEW44, DC13InsBtn[43]); + DDX_Control(pDX, IDC_BTN_WHTJDC_NEW45, DC13InsBtn[44]); //DDX_Text(pDX, IDC_EDIT_Pitch_Param, Param1); //DDX_Text(pDX, IDC_EDIT_Dir_Param, Param2); @@ -130,8 +131,8 @@ void DlgWHTJDCNew::DoDataExchange(CDataExchange* pDX) DDX_Text(pDX, IDC_EDIT_WHTD_5, m_FocalDistanceSet); DDX_Text(pDX, IDC_EDIT_WHTD_3, m_DigitalGuidanceDir); DDX_Text(pDX, IDC_EDIT_WHTD_4, m_DigitalGuidancePitch); - DDX_Text(pDX, IDC_EDIT_WHTD_1, m_SCanModelAngle); - DDX_Text(pDX, IDC_EDIT_WHTD_2, m_SCanModelSpeed); + DDX_Text(pDX, IDC_EDIT_WHTD_1, m_SCanModelDirSpeed); + DDX_Text(pDX, IDC_EDIT_WHTD_2, m_SCanModelPitchSpeed); DDX_Text(pDX, IDC_EDIT_WHTD_8, m_DirSCanSetCentre); DDX_Text(pDX, IDC_EDIT_WHTD_9, m_DirSCanSetRange); DDX_Text(pDX, IDC_EDIT_WHTD_10, m_PitchSCanSetCentre); @@ -147,7 +148,7 @@ BOOL DlgWHTJDCNew::OnInitDialog() CFont m_oFont;//字体 m_oFont.CreatePointFont(80, _T("Times New Roman"),NULL); - for(int i = 0;i<44;++i) + for(int i = 0;i<45;++i) { //DC13InsBtn[i].SetTextColor(RGB(255,255,255)); //DC13InsBtn[i].SetFont(&m_oFont); @@ -176,31 +177,31 @@ BOOL DlgWHTJDCNew::OnInitDialog() CWnd* pWnd2 = GetDlgItem(IDC_EDIT_WHTD_1); pWnd2->SetFont(&m_font2); - GetDlgItem(IDC_EDIT_WHTD_1)->SetWindowText("100"); + GetDlgItem(IDC_EDIT_WHTD_1)->SetWindowText("1"); CWnd* pWnd3 = GetDlgItem(IDC_EDIT_WHTD_2); pWnd3->SetFont(&m_font2); - GetDlgItem(IDC_EDIT_WHTD_2)->SetWindowText("5"); + GetDlgItem(IDC_EDIT_WHTD_2)->SetWindowText("1"); CWnd* pWnd4 = GetDlgItem(IDC_EDIT_WHTD_3); pWnd4->SetFont(&m_font2); - GetDlgItem(IDC_EDIT_WHTD_3)->SetWindowText("0.00"); + GetDlgItem(IDC_EDIT_WHTD_3)->SetWindowText("10.00"); CWnd* pWnd5 = GetDlgItem(IDC_EDIT_WHTD_4); pWnd5->SetFont(&m_font2); - GetDlgItem(IDC_EDIT_WHTD_4)->SetWindowText("0.00"); + GetDlgItem(IDC_EDIT_WHTD_4)->SetWindowText("10.00"); CWnd* pWnd6 = GetDlgItem(IDC_EDIT_WHTD_5); pWnd6->SetFont(&m_font2); - GetDlgItem(IDC_EDIT_WHTD_5)->SetWindowText("0.0"); + GetDlgItem(IDC_EDIT_WHTD_5)->SetWindowText("4.3"); CWnd* pWnd7 = GetDlgItem(IDC_EDIT_WHTD_6); pWnd7->SetFont(&m_font2); - GetDlgItem(IDC_EDIT_WHTD_6)->SetWindowText("0"); + GetDlgItem(IDC_EDIT_WHTD_6)->SetWindowText("20"); CWnd* pWnd8 = GetDlgItem(IDC_EDIT_WHTD_7); pWnd8->SetFont(&m_font2); - GetDlgItem(IDC_EDIT_WHTD_7)->SetWindowText("0"); + GetDlgItem(IDC_EDIT_WHTD_7)->SetWindowText("20"); CWnd* pWnd9 = GetDlgItem(IDC_EDIT_WHTD_8); pWnd9->SetFont(&m_font2); @@ -393,6 +394,9 @@ afx_msg LRESULT DlgWHTJDCNew::OnUpdateWHTJDCFrame(WPARAM wParam, LPARAM lParam) case 44: UpdateFrame44((int&)lParam); break; + case 45: + UpdateFrame45((int&)lParam); + break; case 100: UpdateFrame100((int&)lParam); break; @@ -679,6 +683,12 @@ void DlgWHTJDCNew::UpdateWHTJDCCmdBuffer(HWND hwnd) hCheckThread = CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE)ThreadWHTJDCNew, NULL, 0, &ThreadCheckIDRegion);//开启线程 CloseHandle(hCheckThread); } + if(hwnd ==GetDlgItem(IDC_BTN_WHTJDC_NEW45)->m_hWnd) + { + g_WHTJDCCmdNum = 45; + hCheckThread = CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE)ThreadWHTJDCNew, NULL, 0, &ThreadCheckIDRegion);//开启线程 + CloseHandle(hCheckThread); + } } void DlgWHTJDCNew::UpdateDataZ70_TJDC() { @@ -836,7 +846,7 @@ void DlgWHTJDCNew::UpdateFrame11(int &sendEnd) if(sendEnd==0) { TJDCCmdBuffer[0]=0x02; - TJDCCmdBuffer[1]=0x33; + TJDCCmdBuffer[1]=0x34; UpdateDataZ70_TJDC(); g_bBindData = true; } @@ -1409,30 +1419,33 @@ void DlgWHTJDCNew::UpdateFrame40(int &sendEnd) MessageBox(_T("请输入正确数据!!!")); return; } - if(!IsPositiveInteger(m_SCanModelSpeed)||!IsPositiveInteger(m_SCanModelAngle)) + if(!IsPositiveNumber(m_SCanModelPitchSpeed)||!IsPositiveNumber(m_SCanModelDirSpeed)) { - MessageBox(_T("请输入正整数!")); + MessageBox(_T("请输入正数!")); return; } - INT16 SCanModelSpeed,SCanModelAngle; - SCanModelSpeed = _ttoi(m_SCanModelSpeed); - SCanModelAngle = _ttoi(m_SCanModelAngle); - if(SCanModelAngle<0||SCanModelAngle>180) + float SCanModelPitchSpeed,SCanModelDirSpeed; + SCanModelPitchSpeed = _ttof(m_SCanModelPitchSpeed); + SCanModelDirSpeed = _ttof(m_SCanModelDirSpeed); + if(SCanModelDirSpeed<0||SCanModelDirSpeed>100) { - MessageBox(_T("扫描角度设置范围0-180!")); + MessageBox(_T("方位扫描速度设置范围[0,180]!")); return; } - if(SCanModelSpeed<0||SCanModelSpeed>100) + if(SCanModelPitchSpeed<0||SCanModelPitchSpeed>180) { - MessageBox(_T("扫描速度设置范围0-100!")); + MessageBox(_T("俯仰扫描速度设置范围[0,180]!")); return; } + UINT16 UINT16SCanModelDirSpeed,UINT16SCanModelPitchSpeed; + UINT16SCanModelDirSpeed = (UINT16)(SCanModelDirSpeed*10); + UINT16SCanModelPitchSpeed = (UINT16)(SCanModelPitchSpeed*10); TJDCCmdBuffer[0]=0x02; TJDCCmdBuffer[1]=0x79; - TJDCCmdBuffer[2]=SCanModelAngle; - TJDCCmdBuffer[3]=SCanModelAngle>>8; - TJDCCmdBuffer[4]=SCanModelSpeed; - TJDCCmdBuffer[5]=SCanModelSpeed>>8; + TJDCCmdBuffer[2]=UINT16SCanModelDirSpeed; + TJDCCmdBuffer[3]=UINT16SCanModelDirSpeed>>8; + TJDCCmdBuffer[4]=UINT16SCanModelPitchSpeed; + TJDCCmdBuffer[5]=UINT16SCanModelPitchSpeed>>8; UpdateDataZ70_TJDC(); g_bBindData = true; } @@ -1574,7 +1587,25 @@ void DlgWHTJDCNew::UpdateFrame44(int &sendEnd) g_bBindData = false; } } - +void DlgWHTJDCNew::UpdateFrame45(int &sendEnd) +{ + if(sendEnd==0) + { + TJDCCmdBuffer[0]=0x02; + TJDCCmdBuffer[1]=0x45; + TJDCCmdBuffer[2]=0x05; + TJDCCmdBuffer[3]=0x00; + TJDCCmdBuffer[4]=0x00; + TJDCCmdBuffer[5]=0x00; + TJDCCmdBuffer[6]=0x00; + UpdateDataZ70_TJDC(); + g_bBindData = true; + } + else + { + g_bBindData = false; + } +} void DlgWHTJDCNew::UpdateFrame100(int &sendEnd) { @@ -1675,25 +1706,25 @@ void DlgWHTJDCNew::OnCbnSelchangeComboTjdc2() DirAndPitchCrlSize = 4; break; case 3: - DirAndPitchCrlSize = 6; + DirAndPitchCrlSize = 7; break; case 4: - DirAndPitchCrlSize = 8; + DirAndPitchCrlSize = 10; break; case 5: - DirAndPitchCrlSize = 10; + DirAndPitchCrlSize = 15; break; case 6: - DirAndPitchCrlSize = 12; + DirAndPitchCrlSize = 20; break; case 7: - DirAndPitchCrlSize = 14; + DirAndPitchCrlSize = 25; break; case 8: - DirAndPitchCrlSize = 16; + DirAndPitchCrlSize = 30; break; default: - DirAndPitchCrlSize = 8; + DirAndPitchCrlSize = 10; break; } } diff --git a/Src/CH91PayloadSoftware/DlgWHTJDCNew.h b/Src/CH91PayloadSoftware/DlgWHTJDCNew.h index 035774b..0003e6b 100644 --- a/Src/CH91PayloadSoftware/DlgWHTJDCNew.h +++ b/Src/CH91PayloadSoftware/DlgWHTJDCNew.h @@ -28,7 +28,7 @@ protected: public: CCMDBtn m_DCFlyCmd[12]; - CMFCButton DC13InsBtn[44]; + CMFCButton DC13InsBtn[45]; BYTE TJDCCmdBuffer[15]; public: UINT8 SwitchCmd; //开关指令 @@ -47,8 +47,8 @@ public: CString m_FocalDistanceSet;//焦距设置 CString m_DigitalGuidancePitch;//数引模式 俯仰 CString m_DigitalGuidanceDir;//数引模式 方位 - CString m_SCanModelAngle;//扫描设置 角度 - CString m_SCanModelSpeed;//扫描设置 速度 + CString m_SCanModelDirSpeed;//扫描设置 角度 + CString m_SCanModelPitchSpeed;//扫描设置 速度 CString m_DirSCanSetCentre;//方位扫描设置 中心 CString m_DirSCanSetRange;//方位扫描设置 范围 CString m_PitchSCanSetCentre;//俯仰扫描设置 中心 @@ -59,24 +59,24 @@ public: void DlgWHTJDCNew::UpdateDataZ70_TJDC();//更新数据注入指令Z70 void UpdateFrame(); //俯仰+ 长按 void UpdateFrame2(); //俯仰- 长按 - void UpdateFrame3(); //方位+ 长按 - void UpdateFrame4(); //方位- 长按 + void UpdateFrame3(); //方位- 长按 + void UpdateFrame4(); //方位+ 长按 void UpdateFrame5(int&); //复位 void UpdateFrame6(int&); //图像切换 void UpdateFrame7(); //焦距+ 长按 void UpdateFrame8(); //焦距- 长按 void UpdateFrame9(int&); //可见光跟踪 void UpdateFrame10(int&); //拍一张照 - void UpdateFrame11(int&); //停止照相 + void UpdateFrame11(int&); //停止照相34 void UpdateFrame12(int&); //字符叠加设置 void UpdateFrame13(int&); //选点跟踪 void UpdateFrame13_1(); //选点跟踪执行 void UpdateFrame14(int&); //设置参数保存 void UpdateFrame15(int&); //单次激光测距 - void UpdateFrame16(int&); //连续照相 - void UpdateFrame17(int&); //开始录像 - void UpdateFrame18(int&); //停止录像 + void UpdateFrame16(int&); //连续照相34 + void UpdateFrame17(int&); //开始录像33 + void UpdateFrame18(int&); //停止录像33 void UpdateFrame19(int&); //取消跟踪 void UpdateFrame20(int&); //跟踪模板大小设置 void UpdateFrame21(int&); //查询反馈 @@ -102,6 +102,7 @@ public: void UpdateFrame41(int&); //姿态指引 7C void UpdateFrame43(int&); //方位扫描设置 void UpdateFrame44(int&); //俯仰扫描设置 + void UpdateFrame45(int&); //自动调焦 void UpdateFrame100(int&); //吊舱行为1 void UpdateFrame101(int&); //吊舱行为2 diff --git a/Src/CH91PayloadSoftware/resource.h b/Src/CH91PayloadSoftware/resource.h index 99cf08bbcbe0c11eede5076d51f9fe1397f38523..39639612fa4a14fc5c32c921eb0ac1417f6cd5c9 100644 GIT binary patch delta 43 zcmV+`0M!4i*#xZF1hC4Hmk<*HB(qAA{+E-wk|390B>@(f5+DH{133USw?ircX#$kV B4?F+> delta 29 ncmV+&0OJ3w*#xZF1hC4Hmmn$u9FyR76tkX@PMEhyDgk5y&rA$)