From 843262f9d0438611258363d15a82be7f6e1bc411 Mon Sep 17 00:00:00 2001 From: QuakeGod <quakegod@sina.com> Date: 星期一, 23 十月 2023 08:53:08 +0800 Subject: [PATCH] Merge branch 'future-translate' of https://gitee.com/quakegod/mterm1 into feature-translate --- MTerm1/MTerm1View.cpp | 821 ++++++++++++++++++++++++++++++++++++++++++++-------------- 1 files changed, 623 insertions(+), 198 deletions(-) diff --git a/MTerm1/MTerm1View.cpp b/MTerm1/MTerm1View.cpp index 86b37a3..866bc7f 100644 --- a/MTerm1/MTerm1View.cpp +++ b/MTerm1/MTerm1View.cpp @@ -1155,6 +1155,7 @@ nCol = 0; } } + CellFocusChg(nRow, nCol); } if (nChar == VK_RIGHT) { nCol += 1; @@ -1167,15 +1168,17 @@ nCol = m_CellPerLine - 1; } } + CellFocusChg(nRow, nCol); } if (nChar == VK_UP) { nRow -= 1; if (nRow < 0) { nRow = 0; } + CellFocusChg(nRow, nCol); } if (nChar == VK_DOWN) { nRow += 1; if (nRow >= m_nTotalRow + nLinesinView) { nRow = m_nTotalRow + nLinesinView -1; } - + CellFocusChg(nRow, nCol); } m_FocusRow = nRow; m_FocusCol = nCol; @@ -1485,16 +1488,16 @@ void CMTerm1View::OnProgConvert() { //杞崲鍓嶅厛瀵筁DS鐨勮鍒欒繘琛屾楠岋紙妫�楠岃鍒欎笌杩斿洖鍙傛暟骞舵湭瀹屽叏纭畾 - std::pair<int,CString> result = LDSCheckRule(); - if (result.first == 111) - { - DbgLog(result.second); - return; - } + // std::pair<int,CString> result = LDSCheckRule(); + //if (result.first == 111) + //{ + // DbgLog(result.second); + // return; + //} CString s1; s1.Format(_T("Prog Convert")); - SysLog(s1); + SysLog(s1); int r = TransLDSToProg(); s1.Format(_T("LDS To Prog result %d"), r); SysLog(s1); @@ -1591,6 +1594,12 @@ /// <param name="cell1"></param> void CMTerm1View::SetCellToView(stCell cell1, int flag) //**************************************************************************************************// { + bool changeVLine = false; + if ((Cells[m_FocusRow][m_FocusCol].bLeftLineDn != cell1.bLeftLineDn) + || (Cells[m_FocusRow][m_FocusCol].bLeftLineUp != cell1.bLeftLineUp)) + { + changeVLine = true; + } Cells[m_FocusRow][m_FocusCol] = cell1; m_bModified = 1; needReDraw = 1; @@ -1614,6 +1623,7 @@ } //娣诲姞绾电嚎鏃跺悓姝ユ坊鍔犱笂涓�琛� Cells[m_FocusRow - 1][m_FocusCol].bLeftLineDn = 1; + }break; case 2: { @@ -1625,13 +1635,18 @@ } //鍒犻櫎绾电嚎鏃跺悓姝ュ垹闄や笂涓�琛� Cells[m_FocusRow - 1][m_FocusCol].bLeftLineDn = 0; + }break; default: break; } - - //鍗曞厓鏍间綅缃悗绉� - m_FocusCol += 1; + //濡傛灉鍙樺寲鐨勬槸绔栫嚎锛岀劍鐐逛笉鍚庣Щ + if (!changeVLine) + { + //鍗曞厓鏍间綅缃悗绉� + m_FocusCol += 1; + } + if (m_FocusCol >= 16) { m_FocusCol = 0; @@ -1944,13 +1959,16 @@ for (int j = 0; j < 16; j++) { Cells[i][j].clear(); - s1.Format(_T("%d:%d"), i, j); + s1.Format(_T("%d:%d"), i, j); Cells[i][j].sCoilName = s1; } } POINT StPts[100]; // StPts[0] = POINT{ 0, 0 }; POINT EndPt[100]; + + POINT StrPt[100]; + int nStrPts = 0; int nEndPts = 0; nSts = 0; int nCurLine = 0; @@ -2048,9 +2066,16 @@ } else if (nPairOp == 0) { - nCurLine = maxy + 1; //鍙﹁捣涓�琛� - maxy = nCurLine; - cx = 0; cy = nCurLine; + if (i > 0 && nOp == pDoc->Progs[i-1].nOpType1)//濡傛灉鍓嶉潰涔熸槸ST锛岄偅灏变笉鎹㈣ + { + + } + else + { + nCurLine = ++maxy; + cx = 0; + cy = nCurLine; + } } } stpos[nSts] = i; @@ -2159,26 +2184,36 @@ case OP_OR: case OP_OR_: EndPt[nEndPts] = POINT{ cx,cy }; - nEndPts++; + nEndPts++; cx = StPts[nSts - 1].x; nCurLine = cy + 1; //鍙﹁捣涓�琛� { int hasData = 1; - while (hasData) { - hasData = 0; - for (int j = cx; j < m_CellPerLine; j++) { - if (Cells[nCurLine][j].nType != 0) { - nCurLine++; hasData = 1; break; + while (hasData) + { + hasData = 0; + for (int j = cx; j < m_CellPerLine; j++) + { + if (Cells[nCurLine][j].nType != 0) + { + nCurLine++; + hasData = 1; + break; } } } } - if (nCurLine > maxy) maxy = nCurLine; - for (int j = cy; j < nCurLine; j++) { + if (nCurLine > maxy) + { + maxy = nCurLine; + } + for (int j = cy; j < nCurLine; j++) + { Cells[j][cx].bLeftLineDn = 1; Cells[j + 1][cx].bLeftLineUp = 1; } cy = nCurLine; + StPts[nSts] = POINT{ cx,cy };//+++ Cells[cy][cx].nProgStep = i; Cells[cy][cx].nType = nOp == OP_OR ? typeNO : typeNC; //typeNC Cells[cy][cx].sCoilName = pDoc->Progs[i].Params[0].sParamStr; @@ -2186,22 +2221,22 @@ Cells[cy][cx].nDataType = pDoc->Progs[i].Params[0].nParamType; Cells[cy][cx].nDataAddr = pDoc->Progs[i].Params[0].nParamAddr; cx++; - if (cx < EndPt[nEndPts - 1].x) - { //鏈琛ラ綈 - for (int j = cx; j < EndPt[nEndPts - 1].x; j++) - { - Cells[cy][j].nType = typeLine1; - } - cx = EndPt[nEndPts - 1].x; - } - else { - //鍓嶄竴琛岃ˉ榻� - for (int j = EndPt[nEndPts - 1].x; j < cx; j++) - { - Cells[EndPt[nEndPts - 1].y][j].nType = typeLine1; - } + //if (cx <= EndPt[nEndPts - 1].x) + //{ //鏈琛ラ綈 + // for (int j = cx; j < EndPt[nEndPts - 1].x; j++) + // { + // Cells[cy][j].nType = typeLine1; + // } + // cx = EndPt[nEndPts - 1].x; + //} + //else { + // //鍓嶄竴琛岃ˉ榻� + // for (int j = EndPt[nEndPts - 1].x; j < cx; j++) + // { + // Cells[EndPt[nEndPts - 1].y][j].nType = typeLine1; + // } - } + //} //杩炴帴涓婁笅绾� for (int j = EndPt[nEndPts - 1].y; j < cy; j++) { @@ -2210,6 +2245,7 @@ } //鍏夋爣浣嶇疆, 鍓嶄竴缁撴潫鐐逛綅缃� cy = EndPt[nEndPts - 1].y; + nEndPts--; break; @@ -2295,57 +2331,73 @@ cx++; break; case OP_ANS: + //ANS璇存槑鏄湁鐜矾锛屾暣琛岃繘琛岀Щ鍔紙鍚戝彸锛変粠鍚庡悜鍓嶈繘琛岀Щ鍔� + EndPt[nEndPts].y; + for (int i = EndPt[nEndPts-1].x ; i > 0; i--) + { + for (int j = EndPt[nEndPts].x; j >= 0; j--) + { + if (j > 0 + && Cells[cy + 1][j-1].nType == typeNone + || Cells[cy + 1][j - 1].nType == typeLine1 + || Cells[cy + 1][j - 1].nType == typeLine2) + { + continue; + } + + Cells[cy + 1][j] = Cells[cy + 1][j - 1]; + } + } + + Cells[EndPt[nEndPts].y][EndPt[nEndPts-1].x].bLeftLineDn = 1; + Cells[EndPt[nEndPts].y+1][EndPt[nEndPts-1].x].bLeftLineUp = 1; + nSts--; nEndPts--; break; case OP_ORS: - //褰撳墠搴忓垪涓庡墠闈㈢殑搴忓垪鍚堝苟銆� - //褰撳墠搴忓垪鐨勫紑濮嬬粨鏉熶綅缃� - //EndPt[nEndPts] = POINT{ cx,cy }; - //nEndPts++; - //StPts[nSts - 1]; EndPt[nEndPts - 1]; - //鍓嶄竴搴忓垪鐨勫紑濮嬬粨鏉熶綅缃� - StPts[nSts - 1]; - EndPt[nEndPts - 1]; + if (nEndPts <= 0) { break; } - ////鍒ゆ柇浜岃�呴暱搴� - //if (cx < EndPt[nEndPts - 1].x) - //{ - // //鏈琛ラ綈 - // for (int j = cx; j < EndPt[nEndPts - 1].x; j++) - // { - // Cells[cy][j].nType = typeLine1; - // } - // cx = EndPt[nEndPts - 1].x; - //} - //else - //{ - // //鍓嶄竴琛岃ˉ榻� - // for (int j = EndPt[nEndPts - 1].x; j < cx; j++) - // { - // Cells[EndPt[nEndPts - 1].y][j].nType = typeLine1; - // } - //} - ////杩炴帴涓婁笅绾� - //for (int j = EndPt[nEndPts - 1].y; j < cy; j++) - //{ - // Cells[j][cx].bLeftLineDn = 1; - // Cells[j + 1][cx].bLeftLineUp = 1; - //} - ////鍏夋爣浣嶇疆, 鍓嶄竴缁撴潫鐐逛綅缃� - //cy = EndPt[nEndPts - 1].y; + //鍒ゆ柇浜岃�呴暱搴� + if (cx < EndPt[nEndPts - 1].x) + { + //鏈琛ラ綈 + for (int j = cx; j < EndPt[nEndPts - 1].x; j++) + { + Cells[cy][j].nType = typeLine1; + } + cx = EndPt[nEndPts - 1].x; + } + else + { + //鍓嶄竴琛岃ˉ榻� + for (int j = EndPt[nEndPts - 1].x; j < cx; j++) + { + if (Cells[EndPt[nEndPts - 1].y][j].nType == typeNone) + { + Cells[EndPt[nEndPts - 1].y][j].nType = typeLine1; + } + } + } + //杩炴帴涓婁笅绾� + + Cells[cy][cx].bLeftLineUp = 1; + Cells[cy-1][cx].bLeftLineDn = 1; + + //鍏夋爣浣嶇疆, 鍓嶄竴缁撴潫鐐逛綅缃� nSts--; nEndPts--; - + cy = EndPt[nEndPts].y; + cx = EndPt[nEndPts].x; break; case OP_PSHS: - EndPt[nEndPts] = POINT{ cx,cy }; - nEndPts++; + StrPt[nStrPts] = POINT{ EndPt[nEndPts].x,EndPt[nEndPts].y+1 }; + nStrPts++; break; case OP_RDS: cx = EndPt[nEndPts - 1].x; @@ -2362,20 +2414,9 @@ } break; case OP_POPS: - cx = EndPt[nEndPts - 1].x; - for (int j = cx; j < m_CellPerLine; j++) { - if (Cells[cy][j].nType != 0) - { - cy++; j = cx - 1; break; - } - } - for (int j = EndPt[nEndPts - 1].y; j < cy; j++) - { - Cells[j][cx].bLeftLineDn = 1; - Cells[j + 1][cx].bLeftLineUp = 1; - } - nEndPts--; - + nStrPts--; + cy = StrPt[nStrPts].y; + cx = StrPt[nStrPts].x; break; case OP_OUT: case OP_SET: @@ -2517,7 +2558,7 @@ return 0; } bool firstCoil = true;//鏈绗竴涓崟鍏冩牸 - +bool isPops = false; /// <summary> /// 姊舰鍥捐浆Prog /// </summary> @@ -2545,7 +2586,7 @@ { int nRow = i; int bConnected = 0; - for (int j = 0; j < m_CellPerLine; j++) + for (int j = 0; j < m_CellPerLine; j++) { int nCol = j; if (Cells[nRow][nCol].bLeftLineDn) @@ -2566,7 +2607,7 @@ } } - stProgSection allprogs; + stProgSection allprogs; //姣忔鍗曠嫭澶勭悊 for (int i = 0; i < nDivCount; i++) { @@ -2575,7 +2616,7 @@ { nStartLine = 0; nEndLine = Divs[i]; - } + } else { nStartLine = Divs[i - 1]+1; @@ -2654,13 +2695,21 @@ { firstCoil = true; //寰幆閬嶅巻鍗曞厓鏍�(杞崲鐨勯�昏緫鍦ㄨ繖涓嚱鏁�) - ScanLDSCells(nStartLine, nEndLine, nCurPosY, nCurPosX, 0, thisprogsec, sProgSec, nSteps); + //ScanLDSCells(nStartLine, nEndLine, nCurPosY, nCurPosX, 0, thisprogsec, sProgSec, nSteps); + //ScanLDSCells2(nStartLine, nEndLine, nCurPosY, nCurPosX, 0, thisprogsec, sProgSec, nSteps); } - sProg += sProgSec; - nAllSteps += nSteps; - Progsec += thisprogsec; + //sProg += sProgSec; + // nAllSteps += nSteps; + //Progsec += thisprogsec; } - + CString sProgSec; + int nSteps = 0;; + nCurPosY = i; + stProgSection thisprogsec; + ScanLDSCells2(nStartLine, nEndLine, nCurPosY, nCurPosX, 16,0, thisprogsec, sProgSec, nSteps); + sProg += sProgSec; + nAllSteps += nSteps; + Progsec += thisprogsec; DbgLog(_T("\r\n")+ sProg); int n = int(Progsec.Progs.size()); s1.Format(_T("绋嬪簭娈垫鏁帮細 %d "), n); @@ -2691,7 +2740,7 @@ for (int i = 0; i < n; i++) { int optype=allprogs.Progs[i].nOpType1; - allprogs.Progs[i].PairTo = 0; + allprogs.Progs[i].PairTo = 0;//?????????? allprogs.Progs[i].nBinStep = i; CStringA OpTxtA,OpShowTxtA; CString OpTxt,OpShowTxt; @@ -2713,19 +2762,19 @@ /// </summary> /// <param name="nStartLine"></param> /// <param name="nEndLine"></param> -/// <param name="nPosY"></param> -/// <param name="nPosX"></param> -/// <param name="nLevel"></param> +/// <param name="nPosY">琛�</param> +/// <param name="nPosX">鍒�</param> +/// <param name="nLevel">灞傜骇</param> /// <param name="progsec">prog鏍煎紡鐨勬寚浠ら泦</param> /// <param name="sProgSec">鎸囦护闆�</param> /// <param name="nSteps">绋嬪簭姝ユ暟</param> /// <returns></returns> -int CMTerm1View::ScanLDSCells(int nStartLine, int nEndLine, int nPosY, int nPosX, int nLevel, stProgSection & progsec, CString & sProgSec, int &nSteps) +int CMTerm1View::ScanLDSCells(int nStartLine, int nEndLine, int nPosY, int nPosX, + int nLevel, stProgSection & progsec, CString & sProgSec, int &nSteps) { - // TODO: 鍦ㄦ澶勬坊鍔犲疄鐜颁唬鐮�. CString s1; int nCurPosX, nCurPosY; - int nNextX = 1;//姝ラ暱 + int nNextX = 1;//姝ラ暱(涓嬩釜璧峰鐐圭Щ鍔ㄧ殑璺濈) nCurPosY = nPosY; nCurPosX = nPosX; int nCoilType, CoilAddr; @@ -2733,7 +2782,7 @@ for (int j = nPosX; j < m_CellPerLine; j += nNextX) { nCurPosX = j; - //鍏堝鐞嗗綋鍓嶅崟鍏�; + //鍏堝鐞嗗綋鍓嶅崟鍏冨熀鏈俊鎭�; int nType = Cells[nCurPosY][nCurPosX].nType; CString sCellName = Cells[nCurPosY][nCurPosX].sCoilName; CMTerm1Doc::stProg theprog; @@ -2757,23 +2806,21 @@ s1.Format(_T("%d %d ORS "), nCurPosY, nCurPosX); DbgLog(s1); theprog.nOpType1 = OP_ORS; - //theprog.nOpType1 = OP_ST; - //theprog.PairTo = OP_ORS; progsec.Append(theprog); sProgSec.AppendFormat(_T("ORS \r\n")); firstCoil = false; nSteps += 1; nLevel -= 1; } - //宸︿笂鏄惁鏈夐摼鎺� + //鍙充晶涓�鏍肩殑宸︿笂鏄惁鏈夐摼鎺� int nLeftUpCon = 0; if (Cells[nCurPosY][j + nNextX].bLeftLineUp) { nLeftUpCon = 1; } - //鍚戜笅鏌ユ壘锛岀湅鐪嬬珫绾跨殑宸︿晶涓嬮潰杩樻湁娌℃湁杩炴帴鍏朵粬涓滆タ - int nLeftDnCon = 0;//鍗曞厓鏍煎乏渚у悜涓嬭繛鎺ユ暟 - for (int k = nCurPosY + 1; k <= nEndLine; k++) + //鍚戜笅鏌ユ壘锛岀湅鐪嬬珫绾跨殑鍙充晶涓�鏍肩殑宸︿晶涓嬮潰杩樻湁娌℃湁杩炴帴鍏朵粬涓滆タ + int nLeftDnCon = 0;//鍗曞厓鏍煎彸渚т竴鏍肩殑宸︿晶鍚戜笅杩炴帴鏁� + for (int k = nCurPosY; k <= nEndLine; k++) { if (Cells[k][j + nNextX].bLeftLineDn) { @@ -2791,12 +2838,12 @@ s1.Format(_T("LeftUp %d LeftDn %d"), nLeftUpCon, nLeftDnCon); DbgLog(s1); - //宸︿晶涓嬮潰鏈夎繛鎺ワ紝閭d箞鎵弿鍒拌繖涓珫绾挎椂杩斿洖锛岀户缁壂鎻忓乏渚т笅闈㈢殑鍐呭銆� + //鍙充晶涓�鏍肩殑宸︿晶涓嬮潰鏈夎繛鎺ワ紝閭d箞鎵弿鍒拌繖涓珫绾挎椂杩斿洖锛岀户缁壂鎻忓乏渚т笅闈㈢殑鍐呭銆� if (nLeftDnCon) { return 1; } - // 宸︿晶涓嬮潰娌℃湁杩炴帴锛岄偅涔堣繖涓氨鏄乏闈㈡渶鍚庣殑鍗曞厓锛屽紑濮嬪鐞嗗彸闈㈢殑鍗曞厓銆� + //鍙充晶涓�鏍肩殑宸︿晶涓嬮潰娌℃湁杩炴帴锛岄偅涔堣繖涓氨鏄乏闈㈡渶鍚庣殑鍗曞厓锛屽紑濮嬪鐞嗗彸闈㈢殑鍗曞厓銆� else { if (nLeftUpCon) @@ -2843,20 +2890,21 @@ if (nRightCon == 1) { - //s1.Format(_T(">>>> Go %d : %d , level %d "), nLineTop, j + nNextX, nLevel); - //DbgLog(s1); - //CString ProgSec; - //int theSteps = 0; - //stProgSection thisprogsec; + s1.Format(_T(">>>> Go %d : %d , level %d "), nLineTop, j + nNextX, nLevel); + DbgLog(s1); + CString ProgSec; + int theSteps = 0; + stProgSection thisprogsec; - //// - //int r = ScanLDSCells(nStartLine, nEndLine, nLineTop, j + nNextX, nLevel, thisprogsec, ProgSec, theSteps); + //杩欐湁闂锛屽簲璇ユ槸鍦ㄦ渶楂樼偣鐨勬椂鍊欙紝鍗曠嫭杩涜涓�娆¤浆鎹紵 + 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); + sProgSec += ProgSec; + nSteps += theSteps; + progsec += thisprogsec; + s1.Format(_T("<<<< Re %d : %d , Result %d "), nLineTop, j + nNextX, 0); + DbgLog(s1); + continue; } else { @@ -2888,7 +2936,7 @@ DbgLog(s1); if (nRightCount == 0) { - + //杩欓噷鏄笉鏄簲璇ュ仛鐐逛粈涔� } else if (res[nRightCount - 1] == 0) { @@ -2937,16 +2985,32 @@ } } } - + //濡傛灉娌℃湁绔栫嚎鐩存帴缈昏瘧 + else + { + Translate2Prog(nType, j + nNextX, nLevel, sCellName, progsec, sProgSec, nSteps); + } + /* #pragma region 鏍规嵁鍗曞厓鏍肩被鍨嬭浆鎹负鎸囦护鍜宲rog if (nType == typeNO) { if (firstCoil && nType != typeLine1 && nType != typeLine2) { - s1.Format(_T("%d %d ST %s"), nCurPosY, nCurPosX, sCellName); - sProgSec.AppendFormat(_T("ST %s\r\n"), sCellName); - theprog.nOpType1 = OP_ST; + //鍏堢湅寰�涓婇潰鏈夋病鏈夎繛鎺� + if (Cells[nCurPosY][j + nNextX].bLeftLineUp) + { + // 寰�涓婇潰鏈夎繛鎺ヤ笖鏈夎Е鐐硅繛鎺ワ紝鎵嶄娇鐢∣R + s1.Format(_T("%d %d OR %s"), nCurPosY, nCurPosX, sCellName); + sProgSec.AppendFormat(_T("OR %s\r\n"), sCellName); + theprog.nOpType1 = OP_OR; + } + else + { + s1.Format(_T("%d %d ST %s"), nCurPosY, nCurPosX, sCellName); + sProgSec.AppendFormat(_T("ST %s\r\n"), sCellName); + theprog.nOpType1 = OP_ST; + } theprog.nParamCount = 1; pDoc->TxtToCoilType(sCellNameA, &nCoilType, &CoilAddr); theprog.Params[0].nParamType = nCoilType; @@ -3158,10 +3222,371 @@ } #pragma endregion - + */ } return 0; + } +// 璁板綍y,x +std::pair<int, int> popsPoint[100]; int nPSHS = -1; +int CMTerm1View::ScanLDSCells2(int nStartLine, int nEndLine, int nPosY, int nPosX, int nSizeX, + int nLevel, stProgSection& progsec, CString& sProgSec, int& nSteps) +{ + CString s1; + int nCurPosX, nCurPosY; + int nNextX = 0;//姝ラ暱锛堝埌涓嬩釜绾垮湀璧峰浣嶇疆搴旂Щ鍔ㄨ窛绂� + nCurPosY = nStartLine; + nCurPosX = nPosX; + int nCoilType, CoilAddr; + CMTerm1Doc* pDoc = GetDocument(); + + for (int j = nPosX; j < nSizeX; j += nNextX) + { + nCurPosX = j; + //鍏堝鐞嗗綋鍓嶅崟鍏�; + int nType = Cells[nCurPosY][nCurPosX].nType; + CString sCellName = Cells[nCurPosY][nCurPosX].sCoilName; + CMTerm1Doc::stProg theprog; + CStringA sCellNameA; + sCellNameA = sCellName; + CString ProgSec; + int theSteps = 0; + + stProgSection thisprogsec; + + //鍒ゆ柇瓒婄晫 + if (j + nNextX > m_CellPerLine) + { + continue; + } + //if (!firstCoil && Cells[nCurPosY][j].bLeftLineUp) + //{ + // break; + //} + if (Cells[nCurPosY][nCurPosX].nType == typeNone) + { + nNextX = 1; + continue; + } + //寮�濮嬬炕璇戝崟涓崟鍏冩牸锛屽苟杩斿洖涓嬩釜鍗曞厓鏍间綅缃� + nNextX = Translate2Prog(nType, nCurPosY, nCurPosX, sCellName, progsec, sProgSec, nSteps); + //1.鍒ゆ柇姝ゅ崟鍏冩牸鍙充晶涓�鏍兼槸鍚︽湁鍚戜笅鐨勭珫绾� + if (Cells[nCurPosY][j + nNextX].bLeftLineDn) + { + //1.1:鏈夊垎鏀紝鐩存帴寮�濮嬭鍙栦笅涓�琛� + if (Cells[nCurPosY +1][j].nType == typeNone) + { + if (Cells[nCurPosY + 1][j + nNextX].nType != typeNone) + { + firstCoil = true; + } + continue; + } + + firstCoil = true; + ScanLDSCells2(nCurPosY + 1, nCurPosY + 1, nCurPosY + 1, 0, j + nNextX, ++nLevel, thisprogsec, ProgSec, theSteps); + + //鏈塐R鍏崇郴涓斾笉鍙竴涓妭鐐� + if (theSteps > 1 && nLevel > 0) + { + // 姝ユ暟澶т簬1锛屾槸澶嶅悎缁撴灉锛屾墠浣跨敤ORS + s1.Format(_T("%d %d ORS "), nCurPosY, nCurPosX); + DbgLog(s1); + theprog.nOpType1 = OP_ORS; + //progsec.Append(theprog); + //sProgSec.AppendFormat(_T("ORS \r\n")); + thisprogsec.Append(theprog); + ProgSec.AppendFormat(_T("ORS \r\n")); + firstCoil = false; + nSteps += 1; + } + + //1.2:浠庡悗鍚戝墠鏌ユ壘涓嬩竴琛屾槸鍚﹁繕鏈夊悜涓婄殑绔栫嚎锛堝舰鎴愰棴鐜級锛圤RS銆丄NS锛� + for (int k = j; k >= 0; k--) + { + if (Cells[nCurPosY + 1][k].nType == typeNone) + { + //濡傛灉閬囧埌绌烘牸锛岃繕娌℃悳鍒帮紝灏辩粨鏉熸悳绱� + break; + } + if (Cells[nCurPosY+1][k].bLeftLineUp) + { + //濡傛灉鏈変竴鏉$珫绾匡紝璇存槑鏄舰鎴愪簡鐜紝瑕佺敤ANS + if (theSteps >= 1 && nLevel > 0) + { + //姝ユ暟澶т簬1锛屾槸澶嶅悎缁撴灉锛屼娇鐢ˋNS + s1.Format(_T("%d %d ANS "), nCurPosY, nCurPosX); + DbgLog(s1); + theprog.nOpType1 = OP_ANS; + //progsec.Append(theprog); + //sProgSec.AppendFormat(_T("ANS \r\n")); + thisprogsec.Append(theprog); + ProgSec.AppendFormat(_T("ANS \r\n")); + nSteps += 1; + } + } + } + + //灏嗚浆鎹㈠畬鎴愮殑閮ㄥ垎鍔犲叆鍒版�婚泦涓� + nSteps += theSteps; + progsec += thisprogsec; + sProgSec += ProgSec; + + //1.3:鏌ヨ姝ゅ垎鏀笅涓�绾ц繛鎺ョ偣宸﹀彸鍧囧瓨鍦ㄨ妭鐐癸紝瀛樺湪灏盤SHS + if (Cells[nCurPosY + 1][j].nType != typeNone + && Cells[nCurPosY + 1][j + 1].nType != typeNone) + { + ++nPSHS; + CString push = _T("PSHS \r\n"); + theprog.nOpType1 = OP_PSHS; + progsec.Append(theprog); + sProgSec.Append(push); + popsPoint[nPSHS] = std::make_pair(nCurPosY + 1, j + 1); + } + }//end 1.鍒ゆ柇姝ゅ崟鍏冩牸鍙充晶涓�鏍兼槸鍚︽湁鍚戜笅鐨勭珫绾� + + } + nLevel--; + //宸插洖鍒拌捣濮嬪眰 + if (nLevel == 0) + { + CMTerm1Doc::stProg theprog; + for (int i = nPSHS; i >= 0; i--) + { + //+POP + CString pop = _T("POPS \r\n"); + theprog.nOpType1 = OP_POPS; + progsec.Append(theprog); + sProgSec.Append(pop); + //+fanyi + //寮�濮嬬炕璇戝崟涓崟鍏冩牸锛屽苟杩斿洖涓嬩釜鍗曞厓鏍间綅缃� + //firstCoil = true; + ScanLDSCells2(popsPoint[nPSHS].first, popsPoint[nPSHS].first, popsPoint[nPSHS].first, popsPoint[nPSHS].second, 16, nLevel, progsec, sProgSec, nSteps); + nPSHS--; + + } + if (nPSHS == -1) + { + fill(popsPoint, popsPoint + 100, std::make_pair(0, 0)); + } + } + + return 0; } + + +int CMTerm1View::Translate2Prog( + int nType, int nCurPosY, int nCurPosX, CString sCellName, + stProgSection& progsec, CString& sProgSec, int& nSteps) +{ + CString s1; + int nNextX = 1;//姝ラ暱 + int nCoilType, CoilAddr; + CMTerm1Doc::stProg theprog; + CMTerm1Doc* pDoc = GetDocument(); + CStringA sCellNameA; + sCellNameA = sCellName; + //if (nType == typeNone) + //{ + // return 0; + //} + if (nType == typeNO) + { + if (firstCoil && nType != typeLine1 && nType != typeLine2) + { + //鍏堢湅寰�涓婇潰鏈夋病鏈夎繛鎺� + if (Cells[nCurPosY][nCurPosX + nNextX].bLeftLineUp) + { + // 寰�涓婇潰鏈夎繛鎺ワ紝浣跨敤OR + sProgSec.AppendFormat(_T("OR %s\r\n"), sCellName); + theprog.nOpType1 = OP_OR; + } + else + { + sProgSec.AppendFormat(_T("ST %s\r\n"), sCellName); + theprog.nOpType1 = OP_ST; + } + theprog.nParamCount = 1; + pDoc->TxtToCoilType(sCellNameA, &nCoilType, &CoilAddr); + theprog.Params[0].nParamType = nCoilType; + theprog.Params[0].nParamAddr = CoilAddr; + theprog.Params[0].sParamStr = sCellNameA; + progsec.Append(theprog); + firstCoil = false; + } + else + { + sProgSec.AppendFormat(_T("AN %s\r\n"), sCellName); + theprog.nOpType1 = OP_AN; + theprog.nParamCount = 1; + pDoc->TxtToCoilType(sCellNameA, &nCoilType, &CoilAddr); + theprog.Params[0].nParamType = nCoilType; + theprog.Params[0].nParamAddr = CoilAddr; + theprog.Params[0].sParamStr = sCellNameA; + progsec.Append(theprog); + } + + nSteps += 1; + nNextX = 1; + } + else if (nType == typeNC) + { + if (firstCoil && nType != typeLine1 && nType != typeLine2) + { + sProgSec.AppendFormat(_T("ST/ %s\r\n"), sCellName); + theprog.nOpType1 = OP_ST_; + theprog.nParamCount = 1; + pDoc->TxtToCoilType(sCellNameA, &nCoilType, &CoilAddr); + theprog.Params[0].nParamType = nCoilType; + theprog.Params[0].nParamAddr = CoilAddr; + theprog.Params[0].sParamStr = sCellNameA; + progsec.Append(theprog); + firstCoil = false; + } + else + { + sProgSec.AppendFormat(_T("AN/ %s\r\n"), sCellName); + theprog.nOpType1 = OP_AN_; + theprog.nParamCount = 1; + pDoc->TxtToCoilType(sCellNameA, &nCoilType, &CoilAddr); + theprog.Params[0].nParamType = nCoilType; + theprog.Params[0].nParamAddr = CoilAddr; + theprog.Params[0].sParamStr = sCellNameA; + progsec.Append(theprog); + } + nSteps += 1; + nNextX = 1; + } + else if (nType == typePP) + { + //progsec.Append(theprog); + sProgSec.AppendFormat(_T("PP %s\r\n"), sCellName); + nSteps += 1; + nNextX = 1; + } + else if (nType == typePN) + { + //progsec.Append(theprog); + sProgSec.AppendFormat(_T("PN %s\r\n"), sCellName, sCellName); + nSteps += 1; + nNextX = 1; + } + else if (nType == typeNOT) + { + sProgSec.AppendFormat(_T("NOT %s\r\n"), sCellName); + theprog.nOpType1 = OP_NOT; + progsec.Append(theprog); + nSteps += 1; + nNextX = 1; + } + else if (nType == typeDF) + { + sProgSec.AppendFormat(_T("DF %s\r\n"), sCellName); + theprog.nOpType1 = OP_DF; + progsec.Append(theprog); + nSteps += 1; + nNextX = 1; + } + else if (nType == typeDF_) + { + sProgSec.AppendFormat(_T("DF/ %s\r\n"), sCellName); + theprog.nOpType1 = OP_DF_; + progsec.Append(theprog); + nSteps += 1; + nNextX = 1; + } + else if (nType == typeOUT) + { + sProgSec.AppendFormat(_T("OUT %s\r\n"), sCellName); + theprog.nOpType1 = OP_OUT; + theprog.nParamCount = 1; + pDoc->TxtToCoilType(sCellNameA, &nCoilType, &CoilAddr); + theprog.Params[0].nParamType = nCoilType; + theprog.Params[0].nParamAddr = CoilAddr; + theprog.Params[0].sParamStr = sCellNameA; + progsec.Append(theprog); + nSteps += 1; + nNextX = 1; + } + else if (nType == typeSET) + { + sProgSec.AppendFormat(_T("SET %s\r\n"), sCellName); + theprog.nOpType1 = OP_SET; + theprog.nParamCount = 1; + pDoc->TxtToCoilType(sCellNameA, &nCoilType, &CoilAddr); + theprog.Params[0].nParamType = nCoilType; + theprog.Params[0].nParamAddr = CoilAddr; + theprog.Params[0].sParamStr = sCellNameA; + progsec.Append(theprog); + nSteps += 1; + nNextX = 1; + } + else if (nType == typeRESET) + { + sProgSec.AppendFormat(_T("RESET %s\r\n"), sCellName); + theprog.nOpType1 = OP_RESET; + theprog.nParamCount = 1; + pDoc->TxtToCoilType(sCellNameA, &nCoilType, &CoilAddr); + theprog.Params[0].nParamType = nCoilType; + theprog.Params[0].nParamAddr = CoilAddr; + theprog.Params[0].sParamStr = sCellNameA; + progsec.Append(theprog); + nSteps += 1; + nNextX = 1; + } + else if (nType == typeCMP) + { + theprog.nOpType1 = OP_ST_GT; + theprog.nParamCount = 1; + 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; + } + else if (nType == typeTM) + { + theprog.nOpType1 = OP_TMX; + theprog.nParamCount = 1; + pDoc->TxtToCoilType(sCellNameA, &nCoilType, &CoilAddr); + theprog.Params[0].nParamType = nCoilType; + theprog.Params[0].nParamAddr = CoilAddr; + theprog.Params[0].sParamStr = sCellNameA; + 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; + } + else if (nType == typeFN1) + { + 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; + } + else if (nType == typeFN2) + { + 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; + } + else if (nType == typeFN3) + { + 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; + } + else + { + nNextX = 1; + //continue; + } + return nNextX; +} + /// <summary> /// 鍏ㄩ儴鍥惧舰鏍¢獙 @@ -3171,75 +3596,75 @@ /// 璁″垝鍦ㄧ涓�涓繑鍥炲�间腑浣跨敤涓嶅悓鐨勯敊璇唬鐮佷唬琛ㄤ笉鍚岀殑閿欒绫诲瀷锛� /// 骞跺湪绗簩涓繑鍥炲�间腑濉厖閿欒鎻愮ず淇℃伅 /// </remark> -std::pair<int, CString> CMTerm1View::LDSCheckRule() -{ - CString message; - int nDivCount = 0; - int Divs[100] = { 0 }; - //浠ヨ涓哄崟浣嶄粠涓婂埌涓嬮亶鍘嗭紙琛岄亶鍘嗭級 - for (int i = 0; i < m_nTotalRow; i++) - { - int nRow = i; - int bConnected = 0; - bool checkFlag = false;//0鍒楁楠岀粨鏋� + std::pair<int, CString> CMTerm1View::LDSCheckRule() + { + CString message; + int nDivCount = 0; + int Divs[100] = { 0 }; + //浠ヨ涓哄崟浣嶄粠涓婂埌涓嬮亶鍘嗭紙琛岄亶鍘嗭級 + for (int i = 0; i < m_nTotalRow; i++) + { + int nRow = i; + int bConnected = 0; + bool checkFlag = false;//0鍒楁楠岀粨鏋� - //鏈鐨�0鍒楁鏌� - if (Cells[nRow][0].nType == 0) - { - checkFlag = true; - } + //鏈鐨�0鍒楁鏌� + if (Cells[nRow][0].nType == 0) + { + checkFlag = true; + } - //閬嶅巻姝よ鐨�1-15鍒楋紙纭畾鍗曞厓鏍硷級 - for (int j = 1; j < m_CellPerLine; j++) - { - int nCol = j; - //濡傛灉0鍒椾负绌� - if (checkFlag) - { - //鏈夊乏渚т笂绔栫嚎 - if (Cells[nRow][nCol].bLeftLineUp) - { - //濡傛灉涓婂眰涓虹┖鍗曞厓鏍硷紝鏃犳晥绔栫嚎锛岀洿鎺ュ垹闄�-----鍙互鍗曠嫭鍒ゆ柇 - if (nRow - 1 >= 0 && Cells[nRow-1][nCol].nType == 0) - { - //娓呯悊鍗曞厓鏍� - Cells[nRow][nCol].clear(); - } - //濡傛灉鏄痭one锛岄敊璇細鐭矾鎴栧洖璺� - else if (Cells[nRow][nCol].nType == 0) - { - message.Format(_T("((%d,%d) 闄勮繎浣嶇疆浜х敓瑙︾偣鐭矾鎴栧洖璺紒"),nRow,nCol); - return std::make_pair(111, message); - } - //濡傛灉涓嶄负none銆傚彲浠ヨ浆鎹紝浣嗘槸鎻愮ず锛氭棤娉曠粯鍒跺浘褰紙绋嬪簭涓嶅悎鐞嗭級 - if (Cells[nRow][nCol].nType != 1) - { - message.Format(_T("((%d,%d) 鏃犳硶缁樺埗鍥惧舰锛堢▼搴忎笉鍚堢悊锛�"), nRow, nCol); - return std::make_pair(111, message); - } + //閬嶅巻姝よ鐨�1-15鍒楋紙纭畾鍗曞厓鏍硷級 + for (int j = 1; j < m_CellPerLine; j++) + { + int nCol = j; + //濡傛灉0鍒椾负绌� + if (checkFlag) + { + //鏈夊乏渚т笂绔栫嚎 + if (Cells[nRow][nCol].bLeftLineUp) + { + //濡傛灉涓婂眰涓虹┖鍗曞厓鏍硷紝鏃犳晥绔栫嚎锛岀洿鎺ュ垹闄�-----鍙互鍗曠嫭鍒ゆ柇 + if (nRow - 1 >= 0 && Cells[nRow - 1][nCol].nType == 0) + { + //娓呯悊鍗曞厓鏍� + Cells[nRow][nCol].clear(); + } + //濡傛灉鏄痭one锛岄敊璇細鐭矾鎴栧洖璺� + else if (Cells[nRow][nCol].nType == 0) + { + message.Format(_T("((%d,%d) 闄勮繎浣嶇疆浜х敓瑙︾偣鐭矾鎴栧洖璺紒"), nRow, nCol); + return std::make_pair(111, message); + } + //濡傛灉涓嶄负none銆傚彲浠ヨ浆鎹紝浣嗘槸鎻愮ず锛氭棤娉曠粯鍒跺浘褰紙绋嬪簭涓嶅悎鐞嗭級 + if (Cells[nRow][nCol].nType != 1) + { + message.Format(_T("((%d,%d) 鏃犳硶缁樺埗鍥惧舰锛堢▼搴忎笉鍚堢悊锛�"), nRow, nCol); + return std::make_pair(111, message); + } - } - //娌℃湁宸︿晶涓婄珫绾匡紝涓旀鍗曞厓鏍肩被鍨� 涓嶄负绌烘垨绾� - else if (Cells[nRow][nCol].nType > 2) - { - //姝ゅ崟鍏冩牸涓哄崟鐙殑绾垮湀鎴栨寚浠ゅ崟鍏冿紝闇�瑕佽Е鐐硅緭鍏� - message.Format(_T("((%d,%d) 闇�瑕佽Е鐐硅緭鍏�"), nRow, nCol); - return std::make_pair(111, message); - } - //鏈夊乏渚т笅绔栫嚎锛屼笖姝ゅ崟鍏冩牸绫诲瀷涓虹┖ - if (Cells[nRow][nCol].bLeftLineDn) - { - //涓嶆敮鎸佸洖璺� - } - } - //濡�0鍒楅潪绌� - else - { + } + //娌℃湁宸︿晶涓婄珫绾匡紝涓旀鍗曞厓鏍肩被鍨� 涓嶄负绌烘垨绾� + else if (Cells[nRow][nCol].nType > 2) + { + //姝ゅ崟鍏冩牸涓哄崟鐙殑绾垮湀鎴栨寚浠ゅ崟鍏冿紝闇�瑕佽Е鐐硅緭鍏� + message.Format(_T("((%d,%d) 闇�瑕佽Е鐐硅緭鍏�"), nRow, nCol); + return std::make_pair(111, message); + } + //鏈夊乏渚т笅绔栫嚎锛屼笖姝ゅ崟鍏冩牸绫诲瀷涓虹┖ + if (Cells[nRow][nCol].bLeftLineDn) + { + //涓嶆敮鎸佸洖璺� + } + } + //濡�0鍒楅潪绌� + else + { - } - } + } + } - } - return std::make_pair(0,message); -} + } + return std::make_pair(0, message); + } -- Gitblit v1.9.1