From 4ed7fc8447d202e21ef9907e2aac63ef6fcbf301 Mon Sep 17 00:00:00 2001 From: zxd <zxdvslxy@gmail.com> Date: 星期二, 17 十月 2023 12:33:23 +0800 Subject: [PATCH] 提交图码转换部分修改: 1.基本图形转换 2.ANS\ORS\PSHS\POPS命令的处理 3.重构了转换方法,命名为CMTerm1View::ScanLDSCells2();同时将翻译单独提出为方法CMTerm1View::Translate2Prog() 4.快捷键的添加绑定 5.其他相关方法修改,Insert,Delete,FocusChg…… 6.其他关联修改 --- MTerm2/MTerm2View.cpp | 199 ++++++++++++++++++++++++++++++++++++++++++------- 1 files changed, 169 insertions(+), 30 deletions(-) diff --git a/MTerm2/MTerm2View.cpp b/MTerm2/MTerm2View.cpp index 54b99ed..ac169e9 100644 --- a/MTerm2/MTerm2View.cpp +++ b/MTerm2/MTerm2View.cpp @@ -16,7 +16,7 @@ #include "DialogSetCoil.h" #include "DialogSetData.h" #include "DialogIoComment.h" - +#include "KDefine.h" #ifdef _DEBUG #define new DEBUG_NEW @@ -196,8 +196,8 @@ xform1.eM12 = 0; xform1.eM21 = 0; xform1.eM22 = 1; - xform1.eDx = -scroll1.x; - xform1.eDy = -scroll1.y; + xform1.eDx = float(-scroll1.x); + xform1.eDy = float(-scroll1.y); XFORM xform2 = { 1, 0, 0, 1, 0, 0 }; @@ -209,6 +209,34 @@ return 0; } +int CMTerm2View::ScrollToCell(int nRow, int nCol) +{ + int CellTotalHeight = m_CellHeight + (m_bShowComments ? m_CommentHeight : 0); + + CSize sizeTotal; + // TODO: 璁$畻姝よ鍥剧殑鍚堣澶у皬 + sizeTotal.cx = m_LeftMargin + m_CellWidth * m_CellPerLine + m_CellWidth * 2; + sizeTotal.cy = m_TopMargin + CellTotalHeight * (m_nTotalRow ); + CSize sizeSb; + GetScrollBarSizes(sizeSb); + POINT pt1; + pt1.x = 0; + pt1.y = nRow * CellTotalHeight; + ScrollToPosition(pt1); + return 0; +} + +int CMTerm2View::ScrollCellIntoView(int nRow, int nCol) +{ + int CellTotalHeight = m_CellHeight + (m_bShowComments ? m_CommentHeight : 0); + return 0; +} + +int CMTerm2View::isCellInView(int nRow, int nCol) +{ + int CellTotalHeight = m_CellHeight + (m_bShowComments ? m_CommentHeight : 0); + return 0; +} int CMTerm2View::DrawLDSGraph(CDC* pDC) { @@ -1164,8 +1192,8 @@ s1.Format(_T("LD db Clk %d %d %02X Scroll %d %d Total %d %d Row %d Col %d"), point.x, point.y, nFlags, scroll1.x, scroll1.y, tx, ty, nRow, nCol); m_pStatusBar->SetPaneText(6, s1); - m_pStatusBar->SetPaneBackgroundColor(6, RGB(255, 255, 0)); - m_pStatusBar->SetPaneTextColor(6, RGB(0, 0, 255)); +// m_pStatusBar->SetPaneBackgroundColor(6, RGB(255, 255, 0)); +// m_pStatusBar->SetPaneTextColor(6, RGB(0, 0, 255)); // m_pStatusBar->EnablePaneProgressBar(6); // m_pStatusBar->SetPaneProgress(6, 5); SysLog(s1); @@ -1401,13 +1429,14 @@ s1.Format(_T("Insert Blank Line")); SysLog(s1); m_FocusRow; + //褰撳墠琛屼箣鍚庣殑鎵�鏈夛紝涓嬬Щ涓�琛� for (int i = m_nTotalRow - 1; i >= m_FocusRow; i--) { for (int j = 0; j < m_CellPerLine; j++) { Cells[i + 1][j] = Cells[i][j]; } } m_nTotalRow += 1; - + // 褰撳墠琛岀伆鑹� for (int j = 0; j < m_CellPerLine; j++) { Cells[m_FocusRow][j].clear(); Cells[m_FocusRow][j].bEditing = 1; @@ -1417,11 +1446,45 @@ Cells[m_FocusRow][j].bLeftLineDn = 1; } } + + // 褰撳墠琛� 鍔犲叆 瑙︾偣 +// m_FocusCol; +// Cells[m_FocusRow][0].nType= typeNO; +// Cells[m_FocusRow][0].nDataType = KLCoilTypeX; +// Cells[m_FocusRow][0].nDataAddr = 15; +// Cells[m_FocusRow][0].sCoilName = "ABCDEFG"; + m_bModified = 1; needReDraw = 1; this->RedrawWindow(); } +int FindTypeIndex(CString str[], CString strType, int num) +{ + for (int i = 0;i < num;i++) + { + if (strType == str[i]) + { + return i; + } + } + return -1; +} +void CMTerm2View::GetIncToView(stCell cell1) //**************************************************************************************************// +{ + + + Cells[m_FocusRow][m_FocusCol] = cell1; + + m_bModified = 1; + needReDraw = 1; + m_FocusCol += 1; + if (m_FocusCol >= 16) + { m_FocusCol = 0;m_FocusRow += 1; } + + this->RedrawWindow(); + +} void CMTerm2View::OnUpdateInsertBlankLine(CCmdUI *pCmdUI) { // TODO: 鍦ㄦ娣诲姞鍛戒护鏇存柊鐢ㄦ埛鐣岄潰澶勭悊绋嬪簭浠g爜 @@ -1507,17 +1570,17 @@ if (!pDoc->m_bOnline) { s1 = _T("绂荤嚎"); m_pStatusBar->SetPaneText(idxOnline, s1); - m_pStatusBar->SetPaneBackgroundColor(idxOnline); +// m_pStatusBar->SetPaneBackgroundColor(idxOnline); } else if (pDoc->m_bOnline) { if (pDoc->m_bSimulate) { s1 = _T("鍦ㄧ嚎(浠跨湡)"); m_pStatusBar->SetPaneText(2, s1); - m_pStatusBar->SetPaneBackgroundColor(idxOnline, OnlineColor); +// m_pStatusBar->SetPaneBackgroundColor(idxOnline, OnlineColor); }else{ s1 = _T("鍦ㄧ嚎"); m_pStatusBar->SetPaneText(2, s1); - m_pStatusBar->SetPaneBackgroundColor(idxOnline, OnlineColor); +// m_pStatusBar->SetPaneBackgroundColor(idxOnline, OnlineColor); } } } @@ -1525,20 +1588,20 @@ if (!pDoc->m_bOnline) { s1 = _T(""); m_pStatusBar->SetPaneText(idxRunning, s1); - m_pStatusBar->SetPaneBackgroundColor(idxRunning); - m_pStatusBar->SetPaneWidth(idxRunning, 0); +// m_pStatusBar->SetPaneBackgroundColor(idxRunning); +// m_pStatusBar->SetPaneWidth(idxRunning, 0); m_pStatusBar->SetPaneStyle(idxRunning, SBPS_DISABLED); }else if (!pDoc->m_bPlcRunning) { s1 = _T("PROG"); m_pStatusBar->SetPaneText(idxRunning, s1); - m_pStatusBar->SetPaneWidth(idxRunning, s1.GetLength()*8); - m_pStatusBar->SetPaneBackgroundColor(idxRunning, ProgColor); +// m_pStatusBar->SetPaneWidth(idxRunning, s1.GetLength()*8); +// m_pStatusBar->SetPaneBackgroundColor(idxRunning, ProgColor); }else { s1 = _T("RUN"); m_pStatusBar->SetPaneText(idxRunning, s1); - m_pStatusBar->SetPaneWidth(idxRunning, s1.GetLength() * 8); - m_pStatusBar->SetPaneBackgroundColor(idxRunning, RunningColor); +// m_pStatusBar->SetPaneWidth(idxRunning, s1.GetLength() * 8); +// m_pStatusBar->SetPaneBackgroundColor(idxRunning, RunningColor); } } if (nIndex == idxMonitor || nIndex == -1) { // 鐩戞帶 // @@ -1546,11 +1609,11 @@ if (!m_bMonitoring) { s1 = _T("[鐩戞帶鍋滄]"); m_pStatusBar->SetPaneText(idxMonitor, s1); - m_pStatusBar->SetPaneBackgroundColor(idxMonitor); +// m_pStatusBar->SetPaneBackgroundColor(idxMonitor); }else{ s1 = _T("[姝e湪鐩戞帶]"); m_pStatusBar->SetPaneText(idxMonitor, s1); - m_pStatusBar->SetPaneBackgroundColor(idxMonitor, MonitorColor); +// m_pStatusBar->SetPaneBackgroundColor(idxMonitor, MonitorColor); } } if (nIndex == idxAddress || nIndex == -1) { // 鍦板潃锛屾湰绔� @@ -1558,11 +1621,11 @@ if (!pDoc->m_bOnline) { s1 = _T("鏈珯"); m_pStatusBar->SetPaneText(idxAddress, s1); - m_pStatusBar->SetPaneBackgroundColor(idxMonitor); +// m_pStatusBar->SetPaneBackgroundColor(idxMonitor); }else { s1 = _T("鏈珯"); m_pStatusBar->SetPaneText(idxAddress, s1); - m_pStatusBar->SetPaneBackgroundColor(idxMonitor, AddressColor); +// m_pStatusBar->SetPaneBackgroundColor(idxMonitor, AddressColor); } } @@ -1631,12 +1694,12 @@ if (pDoc->m_bPlcRunning) { s1 = _T("杩愯"); m_pStatusBar->SetPaneText(3, s1); - m_pStatusBar->SetPaneTextColor(3, RGB(0, 0, 0)); +// m_pStatusBar->SetPaneTextColor(3, RGB(0, 0, 0)); } else { s1 = _T("鍋滄"); m_pStatusBar->SetPaneText(3, s1); - m_pStatusBar->SetPaneTextColor(3, RGB(0, 0, 0)); +// m_pStatusBar->SetPaneTextColor(3, RGB(0, 0, 0)); } s1.Format(_T("PCmdUI %d %d"), pCmdUI->m_nID, pCmdUI->m_nIndex); DbgLog(s1); @@ -2265,6 +2328,7 @@ int CMTerm2View::TransLDSToProg() { // TODO: 鍦ㄦ澶勬坊鍔犲疄鐜颁唬鐮�. + CMTerm2Doc * pDoc = GetDocument(); CString s1; s1.Format(_T("Trans LDS to PRrog")); DbgLog(s1); @@ -2292,6 +2356,7 @@ nDivCount++; } } + stProgSection allprogs; //姣忔鍗曠嫭澶勭悊 for (int i = 0; i < nDivCount; i++) { int nStartLine, nEndLine; @@ -2342,25 +2407,54 @@ nCurPosX = 0; CString sProg; int nAllSteps=0; + stProgSection Progsec; for (int i = nStartLine; i <= nEndLine; i++){ - CString ProgSec; + CString sProgSec; int nSteps = 0;; nCurPosY = i; + stProgSection thisprogsec; if (Cells[i][0].nType) - ScanLDSCells(nStartLine, nEndLine, nCurPosY, nCurPosX, 0, ProgSec,nSteps); - sProg += ProgSec; + ScanLDSCells(nStartLine, nEndLine, nCurPosY, nCurPosX, 0, thisprogsec, sProgSec,nSteps); + sProg += sProgSec; nAllSteps += nSteps; + Progsec += thisprogsec; } DbgLog(_T("\r\n")+ sProg); + int n = int(Progsec.Progs.size()); + s1.Format(_T("progSec steps %d "), n); + DbgLog(s1); + for (int i = 0; i < n; i++) { + int optype = Progsec.Progs[i].nOpType1; + CStringA OpTxtA, OpShowTxtA; + CString OpTxt, OpShowTxt; + pDoc->OpToTxt(optype, OpTxtA); + pDoc->OpToShowTxt(optype, OpShowTxtA); + OpTxt = OpTxtA; + OpShowTxt = OpShowTxtA; + s1.Format(_T("%d %s %s"), optype, OpTxt, OpShowTxt); + DbgLog(s1); + } + allprogs += Progsec; } //杈撳嚭绋嬪簭 - - - + int n=(int)allprogs.Progs.size(); + s1.Format(_T("all prog steps %d "), n); + DbgLog(s1); + for (int i = 0; i < n; i++) { + int optype=allprogs.Progs[i].nOpType1; + CStringA OpTxtA,OpShowTxtA; + CString OpTxt,OpShowTxt; + pDoc->OpToTxt(optype, OpTxtA); + pDoc->OpToShowTxt(optype, OpShowTxtA); + OpTxt = OpTxtA; + OpShowTxt = OpShowTxtA; + s1.Format(_T("%d %s %s"), optype, OpTxt, OpShowTxt); +// DbgLog(s1); + } return 0; } -int CMTerm2View::ScanLDSCells(int nStartLine, int nEndLine, int nPosY, int nPosX, int nLevel, CString & sProgSec, int &nSteps) +int CMTerm2View::ScanLDSCells(int nStartLine, int nEndLine, int nPosY, int nPosX, int nLevel, stProgSection & progsec, CString & sProgSec, int &nSteps) { // TODO: 鍦ㄦ澶勬坊鍔犲疄鐜颁唬鐮�. CString s1; @@ -2374,14 +2468,20 @@ //鍏堝鐞嗗綋鍓嶅崟鍏�; int nType = Cells[nCurPosY][nCurPosX].nType; CString sCellName = Cells[nCurPosY][nCurPosX].sCoilName; + CMTerm2Doc::stProg theprog; + if (nType == typeNO) { if (j==0) { s1.Format(_T("%d %d ST %s"), nCurPosY, nCurPosX,sCellName); sProgSec.AppendFormat(_T("ST %s\r\n"),sCellName); + theprog.nOpType1 = OP_ST; + progsec.Append(theprog); } else { s1.Format(_T("%d %d AN %s"), nCurPosY, nCurPosX, sCellName); sProgSec.AppendFormat(_T("NO %s\r\n"), sCellName); + theprog.nOpType1 = OP_AN; + progsec.Append(theprog); } nSteps += 1; DbgLog(s1); @@ -2391,11 +2491,16 @@ if (j == 0) { s1.Format(_T("%d %d ST/ %s"), nCurPosY, nCurPosX, sCellName); sProgSec.AppendFormat(_T("ST/ %s\r\n"), sCellName); + theprog.nOpType1 = OP_ST_; + progsec.Append(theprog); + } else { s1.Format(_T("%d %d AN/ %s"), nCurPosY, nCurPosX, sCellName); sProgSec.AppendFormat(_T("AN/ %s\r\n"), sCellName); + theprog.nOpType1 = OP_AN_; + progsec.Append(theprog); } DbgLog(s1); nSteps += 1; @@ -2404,6 +2509,7 @@ if (nType == typePP) { s1.Format(_T("%d %d PP %s"), nCurPosY, nCurPosX, sCellName); DbgLog(s1); + //progsec.Append(theprog); sProgSec.AppendFormat(_T("PP %s\r\n"), sCellName); nSteps += 1; nNextX = 1; @@ -2411,6 +2517,7 @@ if (nType == typePN) { s1.Format(_T("%d %d PN %s"), nCurPosY, nCurPosX, sCellName); DbgLog(s1); + //progsec.Append(theprog); sProgSec.AppendFormat(_T("PN %s\r\n"), sCellName, sCellName); nSteps += 1; nNextX = 1; @@ -2419,6 +2526,8 @@ s1.Format(_T("%d %d NOT %s"), nCurPosY, nCurPosX, sCellName); DbgLog(s1); sProgSec.AppendFormat(_T("NOT %s\r\n"), sCellName); + theprog.nOpType1 = OP_NOT; + progsec.Append(theprog); nSteps += 1; nNextX = 1; }else @@ -2426,6 +2535,8 @@ s1.Format(_T("%d %d DF %s"), nCurPosY, nCurPosX, sCellName); DbgLog(s1); sProgSec.AppendFormat(_T("DF %s\r\n"), sCellName); + theprog.nOpType1 = OP_DF; + progsec.Append(theprog); nSteps += 1; nNextX = 1; }else @@ -2433,6 +2544,8 @@ s1.Format(_T("%d %d DF/ %s"), nCurPosY, nCurPosX, sCellName); DbgLog(s1); sProgSec.AppendFormat(_T("DF/ %s\r\n"), sCellName); + theprog.nOpType1 = OP_DF_; + progsec.Append(theprog); nSteps += 1; nNextX = 1; }else @@ -2440,6 +2553,8 @@ s1.Format(_T("%d %d OUT %s"), nCurPosY, nCurPosX, sCellName); DbgLog(s1); sProgSec.AppendFormat(_T("OUT %s\r\n"), sCellName); + theprog.nOpType1 = OP_OUT; + progsec.Append(theprog); nSteps += 1; nNextX = 1; }else @@ -2447,6 +2562,8 @@ s1.Format(_T("%d %d SET %s"), nCurPosY, nCurPosX, sCellName); DbgLog(s1); sProgSec.AppendFormat(_T("SET %s\r\n"), sCellName); + theprog.nOpType1 = OP_SET; + progsec.Append(theprog); nSteps += 1; nNextX = 1; }else @@ -2454,12 +2571,16 @@ s1.Format(_T("%d %d RESET %s"), nCurPosY, nCurPosX, sCellName); DbgLog(s1); sProgSec.AppendFormat(_T("RESET %s\r\n"), sCellName); + theprog.nOpType1 = OP_RESET; + progsec.Append(theprog); nSteps += 1; nNextX = 1; }else if (nType == typeCMP) { s1.Format(_T("%d %d CMP %s %s %s"), nCurPosY, nCurPosX, sCellName,Cells[nCurPosY][nCurPosX+1].sParam,Cells[nCurPosY][nCurPosX + 2].sParam); DbgLog(s1); + theprog.nOpType1 = OP_ST_GT; + progsec.Append(theprog); sProgSec.AppendFormat(_T("CMP %s %s %s \r\n"), sCellName, Cells[nCurPosY][nCurPosX + 1].sParam, Cells[nCurPosY][nCurPosX + 2].sParam); nSteps += 1; nNextX = 3; @@ -2467,6 +2588,8 @@ if (nType == typeTM) { s1.Format(_T("%d %d TM %s %d %s"), nCurPosY, nCurPosX, sCellName,Cells[nCurPosY][nCurPosX+1].sParam,Cells[nCurPosY][nCurPosX + 2].sParam); DbgLog(s1); + theprog.nOpType1 = OP_TMX; + progsec.Append(theprog); sProgSec.AppendFormat(_T("TM %s %d %s\r\n"), sCellName, Cells[nCurPosY][nCurPosX+1].sParam, Cells[nCurPosY][nCurPosX + 2].sParam); nSteps += 1; nNextX = 3; @@ -2474,6 +2597,8 @@ if (nType == typeFN1) { s1.Format(_T("%d %d FN1 %s %s"), nCurPosY, nCurPosX, sCellName,Cells[nCurPosY][nCurPosX + 1].sParam); DbgLog(s1); + theprog.nOpType1 = OP_INC; + progsec.Append(theprog); sProgSec.AppendFormat(_T("FN1 %s %s\r\n"), sCellName, Cells[nCurPosY][nCurPosX + 1].sParam); nSteps += 1; nNextX = 2; @@ -2481,6 +2606,8 @@ if (nType == typeFN2) { s1.Format(_T("%d %d FN2 %s %s %s "), nCurPosY, nCurPosX, sCellName, Cells[nCurPosY][nCurPosX + 1].sParam, Cells[nCurPosY][nCurPosX + 2].sParam); DbgLog(s1); + theprog.nOpType1 = OP_MV; + progsec.Append(theprog); sProgSec.AppendFormat(_T("FN2 %s %s %s \r\n"), sCellName, Cells[nCurPosY][nCurPosX + 1].sParam, Cells[nCurPosY][nCurPosX + 2].sParam); nSteps += 1; nNextX = 3; @@ -2488,6 +2615,8 @@ if (nType == typeFN3) { s1.Format(_T("%d %d FN3 %s %s %s %s"), nCurPosY, nCurPosX, sCellName, Cells[nCurPosY][nCurPosX + 1].sParam, Cells[nCurPosY][nCurPosX + 2].sParam, Cells[nCurPosY][nCurPosX + 3].sParam); DbgLog(s1); + theprog.nOpType1 = OP_ADD3; + progsec.Append(theprog); sProgSec.AppendFormat(_T("FN3 %s %s %s %s\r\n"), sCellName, Cells[nCurPosY][nCurPosX + 1].sParam, Cells[nCurPosY][nCurPosX + 2].sParam, Cells[nCurPosY][nCurPosX + 3].sParam); nSteps += 1; nNextX = 4; @@ -2495,12 +2624,15 @@ nNextX = 1; //continue; } + if (j + nNextX >= m_CellPerLine) continue; if (Cells[nCurPosY][j + nNextX].bLeftLineUp || Cells[nCurPosY][j + nNextX].bLeftLineDn) { // 鍙戠幇绔栫嚎 //鍏堢湅寰�涓婇潰鏈夋病鏈夎繛鎺� if (Cells[nCurPosY][j + nNextX].bLeftLineUp) { // 寰�涓婇潰鏈夎繛鎺� s1.Format(_T("%d %d ORS "), nCurPosY, nCurPosX); DbgLog(s1); + theprog.nOpType1 = OP_ORS; + progsec.Append(theprog); sProgSec.AppendFormat(_T("ORS \r\n")); nSteps += 1; nLevel -= 1; @@ -2524,6 +2656,8 @@ if ( nPosX >0 || nLevel > 0) { s1.Format(_T("%d %d ANS "), nCurPosY, nCurPosX); DbgLog(s1); + theprog.nOpType1 = OP_ANS; + progsec.Append(theprog); sProgSec.AppendFormat(_T("ANS \r\n")); nSteps += 1; nLevel -= 1; @@ -2552,9 +2686,11 @@ DbgLog(s1); CString ProgSec; int theSteps = 0; - int r = ScanLDSCells(nStartLine, nEndLine, nLineTop, j + nNextX, nLevel,ProgSec,theSteps); + stProgSection thisprogsec; + int r = ScanLDSCells(nStartLine, nEndLine, nLineTop, j + nNextX, nLevel,thisprogsec, ProgSec,theSteps); sProgSec += ProgSec; nSteps += theSteps; + progsec += thisprogsec; s1.Format(_T("<<<< Re %d : %d , Result %d "), nLineTop, j + nNextX, r); DbgLog(s1); } @@ -2576,9 +2712,11 @@ CString ProgSec; int theSteps = 0; nLevel += 1; - res[nRightCount] = ScanLDSCells(nStartLine, nEndLine, k, j + nNextX, nLevel ,ProgSecs[nRightCount],theSteps); + stProgSection thisprogsec; + res[nRightCount] = ScanLDSCells(nStartLine, nEndLine, k, j + nNextX, nLevel ,thisprogsec,ProgSecs[nRightCount],theSteps); nLastResult = res[nRightCount]; nSteps += theSteps; + progsec += thisprogsec; //if (res[nRightCount] > 0) nLevel += 1; sProgSec += ProgSec; s1.Format(_T(" <<< Re %d : %d , Result %d Steps %d Last %d"), k, j + nNextX, res[nRightCount],theSteps,nLastSteps); @@ -2619,3 +2757,4 @@ } return 0; } + -- Gitblit v1.9.1