diff --git a/Src/CH91PayloadSoftware/CH91PayloadSoftware.rc b/Src/CH91PayloadSoftware/CH91PayloadSoftware.rc index 8e86fc1..7333b33 100644 Binary files a/Src/CH91PayloadSoftware/CH91PayloadSoftware.rc and b/Src/CH91PayloadSoftware/CH91PayloadSoftware.rc differ diff --git a/Src/CH91PayloadSoftware/DCOverrollDlg.cpp b/Src/CH91PayloadSoftware/DCOverrollDlg.cpp index 82e2222..4d82c8b 100644 --- a/Src/CH91PayloadSoftware/DCOverrollDlg.cpp +++ b/Src/CH91PayloadSoftware/DCOverrollDlg.cpp @@ -93,7 +93,7 @@ BOOL DCOverrollDlg::OnInitDialog() ((CComboBox *)GetDlgItem(IDC_DC_CHOSET))->InsertString(0, "13所吊舱控制"); ((CComboBox *)GetDlgItem(IDC_DC_CHOSET))->InsertString(1, "天进吊舱控制"); - ((CComboBox *)GetDlgItem(IDC_DC_CHOSET))->SetCurSel(0); + ((CComboBox *)GetDlgItem(IDC_DC_CHOSET))->SetCurSel(1); ((CButton *)GetDlgItem(IDC_RADIO1))->SetCheck(true); @@ -120,22 +120,23 @@ BOOL DCOverrollDlg::CreateAllDlg() ScreenToClient(&m_crect2); - //吊舱新的控制方式 默认显示 + //吊舱新的控制方式 默认不显示 if(!m_13InstituteDCNewDlg.GetSafeHwnd()) { m_13InstituteDCNewDlg.Create(IDD_DIALOG_DC_13INSTITUTE_NEW,this); } m_13InstituteDCNewDlg.MoveWindow(m_crect2);//将IDD_DIALOG_DC_13INSTITUTE_NEW移到IDC_STATIC_DC_PUBLCI所在的位置 - m_13InstituteDCNewDlg.ShowWindow(SW_SHOW); - + m_13InstituteDCNewDlg.ShowWindow(SW_HIDE); + + //默认显示 if(!m_WHTJDCNewDlg.GetSafeHwnd()) { m_WHTJDCNewDlg.Create(IDD_DIALOG_DC_WuHanTJ_NEW,this); } m_WHTJDCNewDlg.MoveWindow(m_crect2);//将IDD_DIALOG_DC_13INSTITUTE_NEW移到IDC_STATIC_DC_PUBLCI所在的位置 - m_WHTJDCNewDlg.ShowWindow(SW_HIDE); + m_WHTJDCNewDlg.ShowWindow(SW_SHOW); CRect m_RectShow; //显示部分的面积区域 GetWindowRect(&m_RectLarge); diff --git a/Src/CH91PayloadSoftware/DlgWHTJDCNew.cpp b/Src/CH91PayloadSoftware/DlgWHTJDCNew.cpp index b0a989e..c92aeb7 100644 --- a/Src/CH91PayloadSoftware/DlgWHTJDCNew.cpp +++ b/Src/CH91PayloadSoftware/DlgWHTJDCNew.cpp @@ -714,9 +714,53 @@ void DlgWHTJDCNew::UpdateDataZ70_TJDC() g_MUDPCamera.SendToY(DCFrameCkCmdWHTJ.Addr(), 20); } + /******************模拟发送天进吊舱控制指令************************/ + BYTE DCBufferCmd[44]; + DCBufferCmd[0] = 0xFB;//帧头 + DCBufferCmd[1] = 0x2C;//帧头 + DCBufferCmd[2] = TJDCCmdBuffer[1]; + DCBufferCmd[3] = TJDCCmdBuffer[2]; + DCBufferCmd[4] = TJDCCmdBuffer[3]; + DCBufferCmd[5] = TJDCCmdBuffer[4]; + DCBufferCmd[6] = TJDCCmdBuffer[5]; + for(int i=7;i<13;++i) + { + DCBufferCmd[i] = 0x00; + } + /*精确到毫秒级*/ + SYSTEMTIME st; + GetLocalTime(&st); + DCBufferCmd[13] = st.wYear - 2000; + DCBufferCmd[14] = st.wMonth; + DCBufferCmd[15] = st.wDay; + DCBufferCmd[16] = st.wHour; + DCBufferCmd[17] = st.wMinute; + DCBufferCmd[18] = st.wSecond; + DCBufferCmd[19] = st.wMilliseconds; + for(int i=20;i<37;++i) + { + DCBufferCmd[i] = 0x00; + } + DCBufferCmd[37] = TJDCCmdBuffer[6]; + DCBufferCmd[38] = TJDCCmdBuffer[7]; + DCBufferCmd[39] = TJDCCmdBuffer[8]; + DCBufferCmd[40] = TJDCCmdBuffer[9]; + DCBufferCmd[41] = TJDCCmdBuffer[10]; + BYTE S2 = DCBufferCmd[2]; + BYTE S3 = DCBufferCmd[3]; + for(int i = 4;i<41;++i) + { + S3 = S3^S2; + S2 = DCBufferCmd[i]; + } + DCBufferCmd[42] = S3; + DCBufferCmd[43]=0xF0; + WHTJCmdGCSUDPSocket.WriteBuffer(DCBufferCmd,44); + + //TJDCCmdBuffer清空 memset(TJDCCmdBuffer,0,sizeof(TJDCCmdBuffer)); - + } void DlgWHTJDCNew::UpdateFrame() { diff --git a/Src/CH91PayloadSoftware/DlgWHTJDCNew.h b/Src/CH91PayloadSoftware/DlgWHTJDCNew.h index 0003e6b..09f1aa7 100644 --- a/Src/CH91PayloadSoftware/DlgWHTJDCNew.h +++ b/Src/CH91PayloadSoftware/DlgWHTJDCNew.h @@ -121,7 +121,6 @@ public: CDCFrameCkCmdFrame DCFrameCkCmdWHTJ;//数据注入指令从控发送数据帧---武汉天进吊舱 - afx_msg void OnCbnSelchangeComboTjdc2();//伺服控制步长选择 afx_msg void OnLButtonDown(UINT nFlags, CPoint point); }; diff --git a/Src/CH91PayloadSoftware/GlobalMember.cpp b/Src/CH91PayloadSoftware/GlobalMember.cpp index 9e5819a..aa60f7f 100644 --- a/Src/CH91PayloadSoftware/GlobalMember.cpp +++ b/Src/CH91PayloadSoftware/GlobalMember.cpp @@ -499,4 +499,10 @@ int DCTypeSelected_video = 0; // bool SelectPointTrack;//选点跟踪 HWND DlgDCOverroll_Hwnd; //DCOverrollDlg句柄 float m_wndShowEO_Position_Max_x; //图像显示区域的坐标最大值x -float m_wndShowEO_Position_Max_y; //图像显示区域的坐标最大值y \ No newline at end of file +float m_wndShowEO_Position_Max_y; //图像显示区域的坐标最大值y + +CString strSysIniName; //配置文件名 +CString strCurDir; //工作目录名 +CString g_strSoftwareWorkFolder; //软件工作目录 + +CUDPSocket WHTJCmdGCSUDPSocket; //天进吊舱控制-地面站UDP通信 diff --git a/Src/CH91PayloadSoftware/GlobalMember.h b/Src/CH91PayloadSoftware/GlobalMember.h index 4d417bd..35737fc 100644 --- a/Src/CH91PayloadSoftware/GlobalMember.h +++ b/Src/CH91PayloadSoftware/GlobalMember.h @@ -515,4 +515,10 @@ extern bool SelectPointTrack;//选 extern HWND DlgDCOverroll_Hwnd; //DCOverrollDlg句柄 extern float m_wndShowEO_Position_Max_x; //图像显示区域的坐标最大值x -extern float m_wndShowEO_Position_Max_y; //图像显示区域的坐标最大值y \ No newline at end of file +extern float m_wndShowEO_Position_Max_y; //图像显示区域的坐标最大值y + +extern CString strSysIniName; // 配置文件名 +extern CString strCurDir; // 工作目录名 +extern CString g_strSoftwareWorkFolder; //软件工作目录 + +extern CUDPSocket WHTJCmdGCSUDPSocket; //天进吊舱控制-地面站UDP通信 \ No newline at end of file diff --git a/Src/CH91PayloadSoftware/MulticastSocketReceiveDlg.cpp b/Src/CH91PayloadSoftware/MulticastSocketReceiveDlg.cpp index e651d99..7d365f2 100644 --- a/Src/CH91PayloadSoftware/MulticastSocketReceiveDlg.cpp +++ b/Src/CH91PayloadSoftware/MulticastSocketReceiveDlg.cpp @@ -58,8 +58,11 @@ CMulticastSocketReceiveDlg::CMulticastSocketReceiveDlg(CWnd* pParent /*=NULL*/) m_strSACUDPIPAddr = ""; m_nSACUDPRemotePort = 2203; m_nSACUDPLocalPort = 8009; - m_sysSetComNumber = 0;//窜口数 + //天进吊舱控制指令至地面站通信接口 + m_WHTJCmdUDPRemotePort = 9000; + m_WHTJCmdUDPRemoteIPStr = ""; + m_WHTJCmdUDPLocalPort = 9001; } CMulticastSocketReceiveDlg::~CMulticastSocketReceiveDlg() @@ -76,6 +79,11 @@ void CMulticastSocketReceiveDlg::DoDataExchange(CDataExchange* pDX) DDX_CBString(pDX, IDC_COMBO_PORT_IMP, mComPortIMP); DDX_CBString(pDX, IDC_COMBO_BAUD_IMP, mComBaudIMP); + //天进吊舱控制指令至地面站通信接口 + DDX_Control(pDX, IDC_TJCmd_RemoteIP, m_WHTJCmdUDPRemoteIP); + DDX_Text(pDX, IDC_EDIT_TJCmd_RemotePort, m_WHTJCmdUDPRemotePort); + DDX_Text(pDX, IDC_EDIT_TJCmd_LocalPort, m_WHTJCmdUDPLocalPort); + } @@ -97,6 +105,7 @@ BEGIN_MESSAGE_MAP(CMulticastSocketReceiveDlg, CDialogEx) ON_BN_CLICKED(IDC_RADIO_DC_13Ins, &CMulticastSocketReceiveDlg::OnBnClickedRadioDc13ins) ON_BN_CLICKED(IDC_RADIO_DC_WHTJ, &CMulticastSocketReceiveDlg::OnBnClickedRadioDcWhtj) ON_BN_CLICKED(IDC_RADIO_H264Data, &CMulticastSocketReceiveDlg::OnBnClickedRadioH264data) + ON_BN_CLICKED(IDC_BTN_TJCmd_Connect, &CMulticastSocketReceiveDlg::OnBnClickedBtnTjcmdConnect) END_MESSAGE_MAP() BOOL CMulticastSocketReceiveDlg::OnInitDialog() @@ -133,6 +142,24 @@ BOOL CMulticastSocketReceiveDlg::OnInitDialog() ((CButton *)GetDlgItem(IDC_RADIO_DC_WHTJ))->SetCheck(false); ((CButton *)GetDlgItem(IDC_RADIO_H264Data))->SetCheck(false); + char inBuf[100]; + g_strSoftwareWorkFolder = GetSoftwareCurrentDirectory(); //当前工作目录 + strSysIniName = g_strSoftwareWorkFolder + _T( "\\SysCfg.ini" ); + + GetPrivateProfileString( "天进吊舱控制-地面站UDP通信设置", "远端IP地址", "0.0.0.0", inBuf, 20, strSysIniName ); + m_WHTJCmdUDPRemoteIPStr.Format( "%s", inBuf ); + m_WHTJCmdUDPRemoteIP.SetWindowText(m_WHTJCmdUDPRemoteIPStr); + + GetPrivateProfileString( "天进吊舱控制-地面站UDP通信设置", "远端端口号", "", inBuf, 20, strSysIniName ); + m_WHTJCmdUDPRemotePort = atoi( inBuf ); + GetPrivateProfileString( "天进吊舱控制-地面站UDP通信设置", "本地端口号", "", inBuf, 20, strSysIniName ); + m_WHTJCmdUDPLocalPort = atoi( inBuf ); + UpdateData(false); + + + + + return TRUE; // return TRUE unless you set the focus to a control // 异常: OCX 属性页应返回 FALSE } @@ -749,3 +776,43 @@ void CMulticastSocketReceiveDlg::OnBnClickedRadioH264data() ((CButton *)GetDlgItem(IDC_RADIO_DC_WHTJ))->SetCheck(false); ((CButton *)GetDlgItem(IDC_RADIO_H264Data))->SetCheck(true); } + + + +//天进吊舱控制-发送至地面站控制指令 +void CMulticastSocketReceiveDlg::OnBnClickedBtnTjcmdConnect() +{ + // TODO: 在此添加控件通知处理程序代码 + UpdateData(true); + TCHAR inBuf[30]; + m_WHTJCmdUDPRemoteIP.GetWindowText(m_WHTJCmdUDPRemoteIPStr); + WritePrivateProfileString( "天进吊舱控制-地面站UDP通信设置", "远端IP地址", m_WHTJCmdUDPRemoteIPStr, strSysIniName ); + WritePrivateProfileString( "天进吊舱控制-地面站UDP通信设置", "本地IP地址", "0.0.0.0",strSysIniName ); + + itoa(m_WHTJCmdUDPRemotePort,inBuf,10); + WritePrivateProfileString( "天进吊舱控制-地面站UDP通信设置", "远端端口号", inBuf, strSysIniName ); + itoa(m_WHTJCmdUDPLocalPort,inBuf,10); + WritePrivateProfileString( "天进吊舱控制-地面站UDP通信设置", "本地端口号", inBuf, strSysIniName ); + + CString str; + GetDlgItemText(IDC_BTN_TJCmd_Connect, str); + if(str == _T("断开")) + { + if(WHTJCmdGCSUDPSocket.StartListening()) + { + WHTJCmdGCSUDPSocket.StopListening(); + } + + GetDlgItem(IDC_BTN_TJCmd_Connect)->SetWindowTextA("连接"); + } + else if(str == _T("连接")){ + WHTJCmdGCSUDPSocket.SetCallBack(NULL,nullptr); + WHTJCmdGCSUDPSocket.SetParams(_T("0.0.0.0"),m_WHTJCmdUDPLocalPort,m_WHTJCmdUDPRemoteIPStr,m_WHTJCmdUDPRemotePort); + if(!WHTJCmdGCSUDPSocket.StartListening()) + { + MessageBox("吊舱UDP通信端口打开失败!"); + } + GetDlgItem(IDC_BTN_TJCmd_Connect)->SetWindowTextA("断开"); + } + +} diff --git a/Src/CH91PayloadSoftware/MulticastSocketReceiveDlg.h b/Src/CH91PayloadSoftware/MulticastSocketReceiveDlg.h index 7114182..2e53d69 100644 --- a/Src/CH91PayloadSoftware/MulticastSocketReceiveDlg.h +++ b/Src/CH91PayloadSoftware/MulticastSocketReceiveDlg.h @@ -91,6 +91,12 @@ public: //const int MaxComPortNumber = 1024; //const unsigned BAUDITEMNUM = 10; //波特率数目 //const unsigned NCOUNTER = 500; //失败尝试次数 + + //天进吊舱控制指令至地面站通信接口 + CString m_WHTJCmdUDPRemoteIPStr; //远端IP 字符串 + CIPAddressCtrl m_WHTJCmdUDPRemoteIP; //远端IP + int m_WHTJCmdUDPRemotePort; //远端端口号 + int m_WHTJCmdUDPLocalPort; //本地端口号 private: //添加系统串口到组合选择框 void AddPortNumberToComboBox(); @@ -112,4 +118,5 @@ public: afx_msg void OnBnClickedRadioDcWhtj();//吊舱类型选择-武汉天进吊舱 afx_msg void OnBnClickedRadioH264data();//吊舱类型选择-h264数据 int m_DCvideoTypeSelct; + afx_msg void OnBnClickedBtnTjcmdConnect(); }; diff --git a/Src/CH91PayloadSoftware/resource.h b/Src/CH91PayloadSoftware/resource.h index 3963961..cefc0fe 100644 Binary files a/Src/CH91PayloadSoftware/resource.h and b/Src/CH91PayloadSoftware/resource.h differ diff --git a/鐗堟湰璇存槑.txt b/鐗堟湰璇存槑.txt index d460109..cbac5d5 100644 --- a/鐗堟湰璇存槑.txt +++ b/鐗堟湰璇存槑.txt @@ -12,4 +12,7 @@ 浼樺寲鎺у埗鎸囦护鍙戦侀昏緫锛堣璁㈡寚浠わ級 澧炲姞瑙嗛绠$悊璁$畻鏈烘寚浠わ紙寮鍏虫寚浠わ級鍙戦 澧炲姞13鎵鍚婅埍鍗忚銆佸ぉ杩涘悐鑸卞崗璁丠264瑁告祦瑙嗛鍗忚瑙f瀽閫夋嫨 -澧炲姞澶╄繘鍚婅埍鐐瑰嚮鈥滃崟鐐硅窡韪濇寜閽悗锛屽弻鍑诲浘鍍忓尯鍩熷彂閫佸悐鑸辫窡韪潗鏍囩偣 \ No newline at end of file +澧炲姞澶╄繘鍚婅埍鐐瑰嚮鈥滃崟鐐硅窡韪濇寜閽悗锛屽弻鍑诲浘鍍忓尯鍩熷彂閫佸悐鑸辫窡韪潗鏍囩偣 + +20240702 +981cs闇姹傞傞厤 \ No newline at end of file