| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553 |
- /**************************************************************************************************
- 版本所有(C), 2020-2022, 北京普达迪泰
- ***************************************************************************************************
- 文 件 名: DynamicData.cpp
- 功能描述: Dynamic Task任务数据
- 版 本 号: 1.00初版
- 作 者: HYF
- 生成日期; 2021-12-20
- 最近修改:
- 函数列表:
- 修改历史:
- 1.日 期 :2021-12-20
- 作 者 : HYF
- 修改内容 : 创建文件
- **************************************************************************************************/
- #include "pch.h"
- #include <afx.h>
- #include <afxtempl.h>
- #include "DynamicData.h"
- #include "PostureDataAngle.h"
- #include "PostureDataPoint.h"
- #include "PostureDataAngleManager.h"
- #include "PostureDataPointManager.h"
- #include "EquipTypePlaceManager.h"
- #include "CppSQLite3.h"
- #include "DictManager.h"
- #include <math.h>
- // DynamicData
- DynamicData::DynamicData()
- {
- m_pDictManager = new DictManager();
- m_pSeamaphore = new CSemaphore(1, 1);
- }
- DynamicData::DynamicData(DWORD taskId, LPCTSTR szEquipTypeCode, LPCTSTR szEquipCode, LPCTSTR szEquipPlace)
- : m_taskId(taskId)
- , m_szEquipTypeCode(szEquipTypeCode)
- , m_szEquipCode(szEquipCode)
- , m_szEquipPlace(szEquipPlace)
- {
- m_pDictManager = new DictManager();
- m_pSeamaphore = new CSemaphore(1, 1);
- }
- DynamicData::~DynamicData()
- {
- if (NULL != m_pDictManager) {
- delete m_pDictManager;
- m_pDictManager = NULL;
- }
- delete m_pSeamaphore;
- }
- /**************************************************************************************************
- 函 数 名 :Clear
- 功能描述 :清空数据
- 输入参数 :无
- 输出参数 :无
- 返 回 值 :void
- **************************************************************************************************/
- void DynamicData::Clear()
- {
- while (!m_AngleList.IsEmpty())
- {
- delete m_AngleList.RemoveHead();
- }
- while (!m_PointList.IsEmpty())
- {
- delete m_PointList.RemoveHead();
- }
- }
- /**************************************************************************************************
- 函 数 名 :SaveToDB
- 功能描述 :批量存储到数据库
- 输入参数 :无
- 输出参数 :无
- 返 回 值 :void
- **************************************************************************************************/
- void DynamicData::SaveToDB()
- {
- m_pSeamaphore->Lock();
- SaveAngleToDB();
- SavePointToDB();
- m_pSeamaphore->Unlock();
- }
- /**************************************************************************************************
- 函 数 名 :SaveLineToDB
- 功能描述 :存储Line到数据库
- 输入参数 :无
- 输出参数 :无
- 返 回 值 :void
- **************************************************************************************************/
- void DynamicData::SaveAngleToDB()
- {
- POSITION pos;
- PostureDataAngle *pAngle = NULL;
- PostureDataAngleManager *pAngleManager = new PostureDataAngleManager();
- pAngleManager->Delete(m_taskId, m_szEquipCode, m_szEquipPlace);
- BOOL bRet = TRUE;
- if (m_AngleList.GetCount() > 0)
- {
- pos = m_AngleList.GetHeadPosition();
- while (pos != NULL)
- {
- pAngle = (PostureDataAngle *)m_AngleList.GetNext(pos);
- if (pAngle != NULL)
- {
- bRet = pAngleManager->Add(*pAngle);
- if (bRet != TRUE)
- {
- AfxMessageBox("推力线数据存储失败!");
- break;
- }
- }
- }
- }
- delete pAngleManager;
- }
- /**************************************************************************************************
- 函 数 名 :SavePointToDB
- 功能描述 :存储Line到数据库
- 输入参数 :无
- 输出参数 :无
- 返 回 值 :void
- **************************************************************************************************/
- void DynamicData::SavePointToDB()
- {
- POSITION pos;
- PostureDataPoint *pPoint = NULL;
- PostureDataPointManager *pPointManager = new PostureDataPointManager();
- pPointManager->Delete(m_taskId);
- BOOL bRet = TRUE;
- if (m_PointList.GetCount() > 0)
- {
- pos = m_PointList.GetHeadPosition();
- while (pos != NULL)
- {
- pPoint = (PostureDataPoint *)m_PointList.GetNext(pos);
- if (pPoint != NULL)
- {
- bRet = pPointManager->Add(*pPoint);
- if (bRet != TRUE)
- {
- AfxMessageBox("Point数据存储失败!");
- break;
- }
- }
- }
- }
- delete pPointManager;
- }
- /**************************************************************************************************
- 函 数 名 :AddPoint
- 功能描述 :新增推力线关联点
- 输入参数 :无
- 输出参数 :无
- 返 回 值 :void
- **************************************************************************************************/
- void DynamicData::AddPoint(PostureDataPoint *pNewPoint)
- {
- POSITION pos;
- PostureDataPoint *pPoint = NULL;
- pos = m_PointList.GetHeadPosition();
- while (pos != NULL)
- {
- pPoint = (PostureDataPoint *)m_PointList.GetNext(pos);
- if (pPoint == NULL) break;
- CString szPointCode = pPoint->GetPointCode();
- if (szPointCode.Compare(pNewPoint->GetPointCode()) == 0)
- {
- delete pPoint;
- m_PointList.RemoveAt(pos);
- }
- }
- CString szPointCode = pNewPoint->GetPointCode();
- double szPointX = pNewPoint->GetPointAX();
- double szPointY = pNewPoint->GetPointAY();
- double szPointZ = pNewPoint->GetPointAZ();
- pNewPoint->SetPointTitle(m_pDictManager->GetDictItemTitle(szPointCode, szPointCode));
- pNewPoint->SetPointAX(szPointZ);
- pNewPoint->SetPointAY(szPointY);
- pNewPoint->SetPointAZ(-szPointX);
- m_PointList.AddTail(pNewPoint);
- }
- /**************************************************************************************************
- 函 数 名 :AddAngle
- 功能描述 :新增推力线关联点
- 输入参数 :无
- 输出参数 :无
- 返 回 值 :void
- **************************************************************************************************/
- void DynamicData::AddAngle(PostureDataAngle *pNewAngle)
- {
- POSITION pos;
- PostureDataAngle *pAngle = NULL;
- pos = m_AngleList.GetHeadPosition();
- while (pos != NULL)
- {
- pAngle = (PostureDataAngle *)m_AngleList.GetNext(pos);
- if (pAngle == NULL) break;
- CString szEquipPlace = pAngle->GetEquipPlace();
- if (szEquipPlace.Compare(pNewAngle->GetEquipPlace()) == 0)
- {
- delete pAngle;
- m_AngleList.RemoveAt(pos);
- }
- }
- m_AngleList.AddTail(pNewAngle);
- }
- /**************************************************************************************************
- 函 数 名 :CalcAngle
- 功能描述 :新增推力线偏角
- 输入参数 :无
- 输出参数 :无
- 返 回 值 :void
- **************************************************************************************************/
- void DynamicData::CalcAngle()
- {
- POSITION pos;
- PostureDataPoint *pPoint = NULL;
- PostureDataPoint *pAS1 = NULL;
- PostureDataPoint *pAE1 = NULL;
- CString szPoint1;
- CString szPoint2;
- // 获取分机用于计算推力线的起点和终点代号
- EquipTypePlaceManager *pPlaceManager = new EquipTypePlaceManager();
- CppSQLite3Query q = pPlaceManager->Query(m_szEquipTypeCode, m_szEquipPlace);
- if (q.eof()) {
- LOG::E("没有配置当前分机用于计算推力线偏角的起终点!");
- q.finalize();
- return;
- }
- szPoint1.Format("%s", q.getStringField("point_start"));
- szPoint2.Format("%s", q.getStringField("point_end"));
- q.finalize();
- // 1.获取结点
- pos = m_PointList.GetHeadPosition();
- while (pos != NULL)
- {
- pPoint = (PostureDataPoint *)m_PointList.GetNext(pos);
- if (pPoint == NULL) break;
- CString szPointCode = pPoint->GetPointCode();
- if (szPointCode.Compare(szPoint1) == 0)
- {
- pAS1 = pPoint;
- }
- else if (szPointCode.Compare(szPoint2) == 0)
- {
- pAE1 = pPoint;
- }
- }
- if ((pAS1 == NULL) || (pAE1 == NULL))
- {
- LOG::E("推力线结点数据不完整!");
- return;
- }
-
- // 2.获取坐标值
- DOUBLE fX1 = pAS1->GetPointAX();
- DOUBLE fY1 = pAS1->GetPointAY();
- DOUBLE fZ1 = pAS1->GetPointAZ();
-
- DOUBLE fX2 = pAE1->GetPointAX();
- DOUBLE fY2 = pAE1->GetPointAY();
- DOUBLE fZ2 = pAE1->GetPointAZ();
-
- // 3.计算偏角数据
- DOUBLE v1 = (fX2-fX1)*(fX2-fX1);
- DOUBLE v2 = (fY2-fY1)*(fY2-fY1);
- DOUBLE v3 = (fZ2-fZ1)*(fZ2-fZ1);
- DOUBLE fLength = sqrt(v1 + v2 + v3);
- DOUBLE ax = acos((fX2-fX1)/fLength) * 180 / PI;
- DOUBLE ay = acos((fY2-fY1)/fLength) * 180 / PI;
- DOUBLE az = acos((fZ2-fZ1)/fLength) * 180 / PI;
- // 4.计算调校量
- DOUBLE ex = ax - 0;
- DOUBLE ey = ay - 90;
- DOUBLE ez = az - (11/6);
- // 5. 保存数据
- PostureDataAngle *pAngle = new PostureDataAngle();
- pAngle->SetTaskId(m_taskId);
- pAngle->SetEquipCode(m_szEquipCode);
- pAngle->SetEquipPlace(m_szEquipPlace);
- pAngle->SetLineId(1);
- pAngle->SetLineTitle("AS1AE1");
- pAngle->SetLineCode("AS1AE1");
- pAngle->SetLineStartX(fX1);
- pAngle->SetLineStartY(fY1);
- pAngle->SetLineStartZ(fZ1);
- pAngle->SetLineEndX(fX2);
- pAngle->SetLineEndY(fY2);
- pAngle->SetLineEndZ(fZ2);
- pAngle->SetAngleAX(ax);
- pAngle->SetAngleAY(ay);
- pAngle->SetAngleAZ(az);
- pAngle->SetAngleEX(ex);
- pAngle->SetAngleEY(ey);
- pAngle->SetAngleEZ(ez);
-
- this->AddAngle(pAngle);
- }
- /**************************************************************************************************
- 函 数 名 :CalcAngle
- 功能描述 :新增推力线偏角
- 输入参数 :无
- 输出参数 :无
- 返 回 值 :void
- **************************************************************************************************/
- void DynamicData::CalcTestAngle()
- {
- POSITION pos;
- PostureDataPoint *pPoint = NULL;
- PostureDataPoint *pAS1 = NULL;
- PostureDataPoint *pAE1 = NULL;
- CString szPoint1("CODE1");
- CString szPoint2("CODE2");
- // 1.获取结点
- pos = m_PointList.GetHeadPosition();
- while (pos != NULL)
- {
- pPoint = (PostureDataPoint *)m_PointList.GetNext(pos);
- if (pPoint == NULL) break;
- CString szPointCode = pPoint->GetPointCode();
- if (szPointCode.Compare(szPoint1) == 0)
- {
- pAS1 = pPoint;
- }
- else if (szPointCode.Compare(szPoint2) == 0)
- {
- pAE1 = pPoint;
- }
- }
- if ((pAS1 == NULL) || (pAE1 == NULL))
- {
- LOG::E("推力线结点数据不完整!");
- return;
- }
- // 2.获取坐标值
- DOUBLE fX1 = pAS1->GetPointAX();
- DOUBLE fY1 = pAS1->GetPointAY();
- DOUBLE fZ1 = pAS1->GetPointAZ();
- DOUBLE fX2 = pAE1->GetPointAX();
- DOUBLE fY2 = pAE1->GetPointAY();
- DOUBLE fZ2 = pAE1->GetPointAZ();
- // 3.计算偏角数据
- DOUBLE v1 = (fX1 - fX2);
- DOUBLE v2 = (fY1 - fY2);
- DOUBLE v3 = (fZ1 - fZ2);
- DOUBLE ax = atan( v2 / v3) * 180 / PI;
- DOUBLE ay = atan( v1 / v3) * 180 / PI;
- DOUBLE az = atan( v1/v2) * 180 / PI;
- // 4.计算调校量
- DOUBLE ex = ax - 0;
- DOUBLE ey = ay - 0;
- DOUBLE ez = az - (11 / 6);
- // 5. 保存数据
- PostureDataAngle *pAngle = new PostureDataAngle();
- pAngle->SetTaskId(m_taskId);
- pAngle->SetEquipCode(m_szEquipCode);
- pAngle->SetEquipPlace(m_szEquipPlace);
- pAngle->SetLineId(1);
- pAngle->SetLineTitle("AS1AE1");
- pAngle->SetLineCode("AS1AE1");
- pAngle->SetLineStartX(fX1);
- pAngle->SetLineStartY(fY1);
- pAngle->SetLineStartZ(fZ1);
- pAngle->SetLineEndX(fX2);
- pAngle->SetLineEndY(fY2);
- pAngle->SetLineEndZ(fZ2);
- pAngle->SetAngleAX(ax);
- pAngle->SetAngleAY(ay);
- pAngle->SetAngleAZ(az);
- pAngle->SetAngleEX(ex);
- pAngle->SetAngleEY(ey);
- pAngle->SetAngleEZ(ez);
- this->AddAngle(pAngle);
- }
- /**************************************************************************************************
- 函 数 名 :GetAngle
- 功能描述 :根据条件查询推力线偏角数据
- 输入参数 :无
- 输出参数 :无
- 返 回 值 :void
- **************************************************************************************************/
- PostureDataAngle* DynamicData::GetAngle(DWORD taskId, LPCTSTR szEquipPlace)
- {
- POSITION pos;
- PostureDataAngle *pAngle = NULL;
- if (m_taskId != taskId) return NULL;
- // 1.获取结点
- pos = m_AngleList.GetHeadPosition();
- while (pos != NULL)
- {
- pAngle = (PostureDataAngle *)m_PointList.GetNext(pos);
- if (pAngle == NULL) break;
- CString szEquipPlace = pAngle->GetEquipPlace();
- if (szEquipPlace.Compare(szEquipPlace) == 0)
- {
- return pAngle;
- }
- }
- return NULL;
- }
- /**************************************************************************************************
- 函 数 名 :PrintData
- 功能描述 :调试打印
- 输入参数 :无
- 输出参数 :无
- 返 回 值 :void
- **************************************************************************************************/
- void DynamicData::PrintData()
- {
- CStdioFile file;
- CString szFile("D:\\data2.txt");
- if (!file.Open(szFile, CFile::typeText|CFile::modeCreate|CFile::modeReadWrite))
- {
- LOG::E(_T("打开文件失败"));
- return ;
- }
-
- this->PrintPoint(&file);
- this->PrintAngle(&file);
- file.Close();
- }
- // 打印输出点数据
- void DynamicData::PrintPoint(CStdioFile *pFile)
- {
- POSITION pos;
- PostureDataPoint *pPoint = NULL;
- CString szLine;
- szLine.Format("------------------------------------------------------------------------------------\n");
- pFile->WriteString(szLine);
- szLine.Format("taskId equipCode equipPlace pointId pointTitle pointAX pointAY pointAZ \n");
- pFile->WriteString(szLine);
- pos = m_PointList.GetHeadPosition();
- while (pos != NULL)
- {
- pPoint = (PostureDataPoint *)m_PointList.GetNext(pos);
- if (pPoint != NULL)
- {
- szLine.Format(" %d %20s %20s %d %s %.3f %.3f %.3f\n"
- ,pPoint->GetTaskId()
- ,pPoint->GetEquipCode()
- ,pPoint->GetEquipPlace()
- ,pPoint->GetPointId()
- ,pPoint->GetPointTitle()
- ,pPoint->GetPointAX()
- ,pPoint->GetPointAY()
- ,pPoint->GetPointAZ());
- pFile->WriteString(szLine);
- }
- }
- }
- // 打印输出Angle
- void DynamicData::PrintAngle(CStdioFile *pFile)
- {
- POSITION pos;
- PostureDataAngle *pAngle = NULL;
- CString szLine;
- szLine.Format("-------------------------------------------------------------------------------------------------------------------------\n");
- pFile->WriteString(szLine);
- szLine.Format(" taskId equipCode equipPlace lineid lineTitle lineCode startx starty starty endx endy endz anglex angley anglez\n");
- pFile->WriteString(szLine);
- pos = m_AngleList.GetHeadPosition();
- while (pos != NULL)
- {
- pAngle = (PostureDataAngle *)m_AngleList.GetNext(pos);
- if (pAngle != NULL)
- {
- szLine.Format(" %10d %20s %20s %d %20s %20s [%.3f %.3f %.3f] [%.3f %.3f %.3f] [%.3f %.3f %.3f]\n"
- ,pAngle->GetTaskId()
- ,pAngle->GetEquipCode()
- ,pAngle->GetEquipPlace()
- ,pAngle->GetLineId()
- ,pAngle->GetLineTitle()
- ,pAngle->GetLineCode()
- ,pAngle->GetLineStartX()
- ,pAngle->GetLineStartY()
- ,pAngle->GetLineStartY()
- ,pAngle->GetLineEndX()
- ,pAngle->GetLineEndY()
- ,pAngle->GetLineEndY()
- ,pAngle->GetAngleAX()
- ,pAngle->GetAngleAY()
- ,pAngle->GetAngleAZ());
- pFile->WriteString(szLine);
- }
- }
- }
|