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