QuakeGod
2024-12-24 61deef5cdf96cbfdd6ad45be49e80d597c00ca65
提交 | 用户 | age
4b03ae 1 
418cb3 2 // MultiTerminal2Doc.h: CMTerm1Doc 类的接口
4b03ae 3 //
Q 4
5
6 #pragma once
418cb3 7 //#include "HvSerialPort.h"
Q 8 #include "AnsiParser.h"
9 #include "DataParser1.h"
10 #include "KDefine.h"
11 //#include "KLink.h"
12 #include "KMachine.h"
4b03ae 13
418cb3 14 #include "../KLink1/KLink.h"
Q 15
16 #pragma comment(lib,"KLink1.lib")
4b03ae 17
0ed438 18 class CMTerm1Doc : public CDocument
4b03ae 19 {
Q 20 protected: // 仅从序列化创建
0ed438 21     CMTerm1Doc() noexcept;
Q 22     DECLARE_DYNCREATE(CMTerm1Doc)
4b03ae 23
Q 24 // 特性
25 public:
418cb3 26     //通讯参数。
Q 27     CAnsiParser MyAnsiParser1;
28     CDataParser1 MyDataParser1;
29 //    KLink MyKLink1;
30     // CSerialCom MySerialCom1;
31 //    HvSerialPort myHvSerialPort1;
32     KMachine myKMachine1;
61deef 33 //    KLink1 MyKLink1;
418cb3 34
Q 35     union {
36         unsigned char KBDD[2048];
37         unsigned short KBDT[1024];
38         unsigned char KBDB[2048];
39     };
40
41     union {
42         unsigned char KWLD[2048];
43         unsigned short KWLT[1024];
44         unsigned char KWLB[2048];
45     };
46
47
48     bool m_bCommParamSet = false;
49     int nComPort;
50     int nBaud;
51     CStringA ComSettings;
52     bool m_bOnline = false;
53     bool m_bSimulate = false;
54     bool m_bPlcRunning = false;
55
56     double StartTime;
57     //系统配置文件
58
59     //数据存储区
60     int m_nNum=15;
61     CString m_Str;
62     CString m_sMachineType = _T("KL20N16D");;
63
64     //程序存储
65     CString ProgTxt;
66
67
68     struct stTypeNameDef
69     {
70         int nType;
71         CStringA TypeTxt;
72     };
73     static stTypeNameDef CoilTypeNameDef[];
74     static int nCoilTypeDefCount;
75
76     static stTypeNameDef DataTypeNameDef[];
77     static int nDataTypeDefCount;
78
79     stKMem KMem;
80
d34256 81     enum enParamTypes            //参数类型
418cb3 82     {
d34256 83         KLParamCoil,            //参数为线圈,1bit
Z 84         KLParamWord,            //参数为字类型, 16bit
85         KLParamNum,                //参数为立即数
418cb3 86     };
d34256 87     struct stOpDef                //指令定义
418cb3 88     {
d34256 89         int nOpType1;            //指令类型
Z 90         CStringA OpTxt;            //指令文本显示
91         int nParamCount;        //指令的参数个数
92         int nParamType;            //指令的参数类型
93         CStringA ShowTxt;        //指令的显示文本
418cb3 94     };
Q 95     static stOpDef OpDef[];
96
97     static int nOpDefCount;
d34256 98     struct stParam                //参数定义
418cb3 99     {
d34256 100         CStringA sParamStr;        //参数显示文本
Z 101         int nParamType;            //参数类型
102         int nParamAddr;            //参数地址.
418cb3 103     };
Q 104
d34256 105     struct stProg                //程序定义
418cb3 106     {
d34256 107         int nOpType1;            //指令类型
Z 108         int nBinStep;            //指令步
109         int nParamCount;        //参数数量
110         stParam Params[3];        //参数们
61deef 111         int PairTo=0;                //对应指令
6ff05a 112         stProg() {};
Q 113         stProg(CStringA sOpStr) {};
114         stProg(int nOpType):nOpType1(nOpType) { nParamCount = 0; }
115         stProg(int nOpType, CStringA sParamStr):nOpType1(nOpType) 
116         {
117             nParamCount = 1;
118             Params[0].sParamStr = sParamStr;
119
120             Params[0].nParamType = 0;
121             Params[0].nParamAddr = 0;
122         };
123         CStringA ToText()
124         {
125             CStringA s1, s2;
126                 OpToTxt(nOpType1, s1);
127                 if (nParamCount > 0) { s1.Append("\t" + Params[0].sParamStr); }
128                 if (nParamCount > 1) { s1.Append("\t" + Params[1].sParamStr); }
129                 if (nParamCount > 2) { s1.Append("\t" + Params[2].sParamStr); }
130                 if (nParamCount > 3) { s1.Append("\t" + Params[3].sParamStr); }
131                 s1.Append("\r\n");
132                 s2 += s1;
133             return s2;
134         }
418cb3 135     };
Q 136
137
d34256 138     struct stCoilAnno            //线圈注释定义
418cb3 139     {
d34256 140         unsigned short nType;    //类型
Z 141         unsigned short nAddr;    //地址
142         CString sCoilName;        //线圈名称
143         CString sAnno;            //注释文本
418cb3 144     };
d34256 145     stCoilAnno mCoilAnnos[10000] =
418cb3 146     {
Q 147     };
148
149     int nCoilAnnoCount = 0;
150
151
152
d34256 153     enum enSection {                //数据节类型定义
Z 154         SectionNone = 0,            //
155         SectionSysCfg = 1,            //系统配置节
156         SectionProg = 2,            //程序节
157         SectionAnno = 3,            //注释节
158         SectionCoilList = 4,        //线圈列表节
159         SectionDataList = 5,        //数据列表节
418cb3 160     };
Q 161
d34256 162     struct stSectionDef
418cb3 163     {
Q 164         int nSectionType;
165         CStringA SectionName;
166     };
d34256 167     stSectionDef SectionDef[5] =
418cb3 168     {
Q 169         {SectionSysCfg,"SYSCFG"},
170         {SectionProg,"PROG"},
171         {SectionAnno,"COMMENT"},
172         {SectionCoilList,"MONCOILLIST"},
173         {SectionDataList,"MONDATALIST"},
174     };
175
d34256 176     int nSectionDefCount = sizeof(SectionDef) / sizeof(stSectionDef);
61deef 177     int TxtToSectionType(CStringA txt);
Q 178     int GetSectionName(int nSectionType, CStringA& txt);
d34256 179     int ScanSections();
0ed438 180
d34256 181     struct stSection {
Z 182         int nSectionType;
183         int nSectionLineNo;
184         int nLines;
185     };
186     stSection Sections[100] = { 0 };
187     int nSectionCount;
188
189     int GetSectionPos(int nSectionType, int* nSectionLine, int* nSectionLines);
190
191     // 操作
4b03ae 192 public:
6ff05a 193     static int TxtToOp(CStringA optxt, int* ParamCount, int* ParamType);
Q 194     static int OpToTxt(int nOp, CStringA & OpTxt);
418cb3 195     int OpToShowTxt(int nOp, CStringA & OpShowTxt);
Q 196
197     int TxtToCoilType(CStringA Typetxt, int* nCoilType, int* CoilAddr);
198     int CoilTypeToTxt(int nType, CStringA & typeTxt);
199
200     int TxtToDataType(CStringA Typetxt, int * nDataType, int* nDataAddr);
201     int DataTypeToTxt(int nType, CStringA & typeTxt);
202
203     int TransLinesToProg(const CStringArray & txtLines, int StartLine = 0, int ProgLines = -1);
204
205     int TransFileToProg(CStringA ProgTxt);
206     int TransToTxt(CStringA &ProgTxt);
207
208     int TransTxtToProg(CStringA ProgTxtA);
209     int ReadAnnoFromTxt(CStringA AnnoTxtA);
61deef 210     int AnnoToTxt(CStringA& AnnoTxtA);
Q 211
418cb3 212
Q 213     int TransProgToBin();
214     int TransBinToProg();
215
6ff05a 216     int FindProgPair();
418cb3 217
Q 218     int LoadFromFile(CString sFilePathName);
219     int SaveToFile(CString sFilePathName);
220
221     stProg Progs[2048] = { 0 };
222     int ProgTrace[2048] = { 0 };
223     int m_nProgSteps = 0;
6ff05a 224
418cb3 225     stBinProg1 BinProgs[2000];
Q 226     int nBinProgSteps = 0;
227
228
229     int nScanCount = 0;
230     int GetAnno(unsigned short nType, unsigned short nAddr, CString & sAnno);
231     int SetAnno(CString sCoilName, CString sAnno);
232     int SetAnno(unsigned short nType, unsigned short nAddr, CString sCoilName, CString sAnno);
4b03ae 233
Q 234 // 重写
235 public:
236     virtual BOOL OnNewDocument();
237     virtual void Serialize(CArchive& ar);
238 #ifdef SHARED_HANDLERS
239     virtual void InitializeSearchContent();
240     virtual void OnDrawThumbnail(CDC& dc, LPRECT lprcBounds);
241 #endif // SHARED_HANDLERS
242
243 // 实现
244 public:
0ed438 245     virtual ~CMTerm1Doc();
4b03ae 246 #ifdef _DEBUG
Q 247     virtual void AssertValid() const;
248     virtual void Dump(CDumpContext& dc) const;
249 #endif
250
418cb3 251     enum UpdataHint {
Q 252         UpdateAll=0,
253         UpdateProg=1,
254         UpdateStat=2,
255     };
4b03ae 256 protected:
Q 257
258 // 生成的消息映射函数
259 protected:
260     DECLARE_MESSAGE_MAP()
261
262 #ifdef SHARED_HANDLERS
263     // 用于为搜索处理程序设置搜索内容的 Helper 函数
264     void SetSearchContent(const CString& value);
265 #endif // SHARED_HANDLERS
418cb3 266 public:
Q 267     int SetCommParam();
268     int Connect();
269     int DisConnect();
270     int SendPacket(void * pBuf, int Len);
271     int RecvPacket(void * pBuf, int Len);
272
273     CView * CMTerm1Doc::FindView(CRuntimeClass * pClass);
274
275     virtual BOOL OnOpenDocument(LPCTSTR lpszPathName);
276     virtual BOOL OnSaveDocument(LPCTSTR lpszPathName);
277     virtual void OnCloseDocument();
278
279     afx_msg void OnUploadFromPlc();
280     afx_msg void OnOnline();
281     afx_msg void OnUpdateOnline(CCmdUI *pCmdUI);
282     afx_msg void OnOffline();
283     afx_msg void OnUpdateOffline(CCmdUI *pCmdUI);
284     afx_msg void OnPlcRun();
285     afx_msg void OnUpdatePlcRun(CCmdUI *pCmdUI);
286     afx_msg void OnDownloadToPlc();
287     afx_msg void OnUpdateDownloadToPlc(CCmdUI *pCmdUI);
288     afx_msg void OnComunicationSet();
289     afx_msg void OnPlcSysregSet();
290
291     afx_msg void OnMenuViewLds();
292     afx_msg void OnMenuViewBld();
293     afx_msg void OnMenuViewBnl();
294     afx_msg void OnMenuShowConsole();
295
296     afx_msg void OnMenuCommTest();
297
298     int GetCoilValue(int nCoilType, int nCoilAddr);
299     int SetCoilValue(int nCoilType, int nCoilAddr, int nCoilValue);
300
301     int GetVarData(int nDataType, int nDataAddr);
302     int SetVarData(int nDataType, int nDataAddr, int nDataValue);
303
304
305     void OnTimer(UINT_PTR nIDEvent);
306
307     int StartPLC();
308     int StopPLC();
309
310
311     afx_msg void OnSimulate();
312     afx_msg void OnUpdateSimulate(CCmdUI *pCmdUI);
313     int DownloadToPLC();
314
315     int AddMonitorCoil(int nCoilType, int nCoilAddr, int nCount);
316     int AddMonitorData(int nDataType, int nDataAddr, int nDataCount);
317     int ClearMonitor();
318     int DoPLCMonitor(); 
319     afx_msg void OnMenuStatusShow();
320     afx_msg void OnMenuFactCfg();
321     afx_msg void OnMenuDatetimeSet();
322     afx_msg void OnMenuEventLog();
4b03ae 323 };