QuakeGod
2023-10-20 6fa60de2b0d0237054aa7571191df0f291838031
提交 | 用户 | 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;
33     KLink1 MyKLink1;
34
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];        //参数们
111         int PairTo;                //对应指令
418cb3 112     };
Q 113
114
d34256 115     struct stCoilAnno            //线圈注释定义
418cb3 116     {
d34256 117         unsigned short nType;    //类型
Z 118         unsigned short nAddr;    //地址
119         CString sCoilName;        //线圈名称
120         CString sAnno;            //注释文本
418cb3 121     };
d34256 122     stCoilAnno mCoilAnnos[10000] =
418cb3 123     {
Q 124     };
125
126     int nCoilAnnoCount = 0;
127
128
129
d34256 130     enum enSection {                //数据节类型定义
Z 131         SectionNone = 0,            //
132         SectionSysCfg = 1,            //系统配置节
133         SectionProg = 2,            //程序节
134         SectionAnno = 3,            //注释节
135         SectionCoilList = 4,        //线圈列表节
136         SectionDataList = 5,        //数据列表节
418cb3 137     };
Q 138
d34256 139     struct stSectionDef
418cb3 140     {
Q 141         int nSectionType;
142         CStringA SectionName;
143     };
d34256 144     stSectionDef SectionDef[5] =
418cb3 145     {
Q 146         {SectionSysCfg,"SYSCFG"},
147         {SectionProg,"PROG"},
148         {SectionAnno,"COMMENT"},
149         {SectionCoilList,"MONCOILLIST"},
150         {SectionDataList,"MONDATALIST"},
151     };
152
d34256 153     int nSectionDefCount = sizeof(SectionDef) / sizeof(stSectionDef);
Z 154     int TxtToSection(CStringA txt);
155     int GetSectionTxt(int nSectionType, CStringA& txt);
156     int ScanSections();
0ed438 157
d34256 158     struct stSection {
Z 159         int nSectionType;
160         int nSectionLineNo;
161         int nLines;
162     };
163     stSection Sections[100] = { 0 };
164     int nSectionCount;
165
166     int GetSectionPos(int nSectionType, int* nSectionLine, int* nSectionLines);
167
168     // 操作
4b03ae 169 public:
418cb3 170     int TxtToOp(CStringA optxt, int* ParamCount, int* ParamType);
Q 171     int OpToTxt(int nOp, CStringA & OpTxt);
172     int OpToShowTxt(int nOp, CStringA & OpShowTxt);
173
174     int TxtToCoilType(CStringA Typetxt, int* nCoilType, int* CoilAddr);
175     int CoilTypeToTxt(int nType, CStringA & typeTxt);
176
177     int TxtToDataType(CStringA Typetxt, int * nDataType, int* nDataAddr);
178     int DataTypeToTxt(int nType, CStringA & typeTxt);
179
180     int TransLinesToProg(const CStringArray & txtLines, int StartLine = 0, int ProgLines = -1);
181
182     int TransFileToProg(CStringA ProgTxt);
183     int TransToTxt(CStringA &ProgTxt);
184
185     int TransTxtToProg(CStringA ProgTxtA);
186     int ReadAnnoFromTxt(CStringA AnnoTxtA);
187
188     int TransProgToBin();
189     int TransBinToProg();
190
191
192     int LoadFromFile(CString sFilePathName);
193     int SaveToFile(CString sFilePathName);
194
195     stProg Progs[2048] = { 0 };
196     int ProgTrace[2048] = { 0 };
197     int m_nProgSteps = 0;
198     stBinProg1 BinProgs[2000];
199     int nBinProgSteps = 0;
200
201
202     int nScanCount = 0;
203     int GetAnno(unsigned short nType, unsigned short nAddr, CString & sAnno);
204     int SetAnno(CString sCoilName, CString sAnno);
205     int SetAnno(unsigned short nType, unsigned short nAddr, CString sCoilName, CString sAnno);
4b03ae 206
Q 207 // 重写
208 public:
209     virtual BOOL OnNewDocument();
210     virtual void Serialize(CArchive& ar);
211 #ifdef SHARED_HANDLERS
212     virtual void InitializeSearchContent();
213     virtual void OnDrawThumbnail(CDC& dc, LPRECT lprcBounds);
214 #endif // SHARED_HANDLERS
215
216 // 实现
217 public:
0ed438 218     virtual ~CMTerm1Doc();
4b03ae 219 #ifdef _DEBUG
Q 220     virtual void AssertValid() const;
221     virtual void Dump(CDumpContext& dc) const;
222 #endif
223
418cb3 224     enum UpdataHint {
Q 225         UpdateAll=0,
226         UpdateProg=1,
227         UpdateStat=2,
228     };
4b03ae 229 protected:
Q 230
231 // 生成的消息映射函数
232 protected:
233     DECLARE_MESSAGE_MAP()
234
235 #ifdef SHARED_HANDLERS
236     // 用于为搜索处理程序设置搜索内容的 Helper 函数
237     void SetSearchContent(const CString& value);
238 #endif // SHARED_HANDLERS
418cb3 239 public:
Q 240     int SetCommParam();
241     int Connect();
242     int DisConnect();
243     int SendPacket(void * pBuf, int Len);
244     int RecvPacket(void * pBuf, int Len);
245
246     CView * CMTerm1Doc::FindView(CRuntimeClass * pClass);
247
248     virtual BOOL OnOpenDocument(LPCTSTR lpszPathName);
249     virtual BOOL OnSaveDocument(LPCTSTR lpszPathName);
250     virtual void OnCloseDocument();
251
252     afx_msg void OnUploadFromPlc();
253     afx_msg void OnOnline();
254     afx_msg void OnUpdateOnline(CCmdUI *pCmdUI);
255     afx_msg void OnOffline();
256     afx_msg void OnUpdateOffline(CCmdUI *pCmdUI);
257     afx_msg void OnPlcRun();
258     afx_msg void OnUpdatePlcRun(CCmdUI *pCmdUI);
259     afx_msg void OnDownloadToPlc();
260     afx_msg void OnUpdateDownloadToPlc(CCmdUI *pCmdUI);
261     afx_msg void OnComunicationSet();
262     afx_msg void OnPlcSysregSet();
263
264     afx_msg void OnMenuViewLds();
265     afx_msg void OnMenuViewBld();
266     afx_msg void OnMenuViewBnl();
267     afx_msg void OnMenuShowConsole();
268
269     afx_msg void OnMenuCommTest();
270
271     int GetCoilValue(int nCoilType, int nCoilAddr);
272     int SetCoilValue(int nCoilType, int nCoilAddr, int nCoilValue);
273
274     int GetVarData(int nDataType, int nDataAddr);
275     int SetVarData(int nDataType, int nDataAddr, int nDataValue);
276
277
278     void OnTimer(UINT_PTR nIDEvent);
279
280     int StartPLC();
281     int StopPLC();
282
283
284     afx_msg void OnSimulate();
285     afx_msg void OnUpdateSimulate(CCmdUI *pCmdUI);
286     int DownloadToPLC();
287
288     int AddMonitorCoil(int nCoilType, int nCoilAddr, int nCount);
289     int AddMonitorData(int nDataType, int nDataAddr, int nDataCount);
290     int ClearMonitor();
291     int DoPLCMonitor(); 
292     afx_msg void OnMenuStatusShow();
293     afx_msg void OnMenuFactCfg();
294     afx_msg void OnMenuDatetimeSet();
295     afx_msg void OnMenuEventLog();
4b03ae 296 };