QuakeGod
2022-10-17 d69aae90ede578aaebc355dafd3496993ccea126
提交 | 用户 | age
bfc108 1 /**
Q 2   ******************************************************************************
3   * @file           : KMachine.h
4   * @brief          : Header for KMachine.c file.
5   *                   This file contains the common defines of the application.
6   ******************************************************************************
7     */
8 #ifndef __KMACHINE_H__
9 #define __KMACHINE_H__
10
11 #define FACTORY_DATA_BASE (FLASH_BASE + 0x00007C00)        //31k //and 
12 #define FACTORY_DATA_PAGESIZE (0x00000400)                        //Page Size = 1K
13 #define FACOTRY_DATA_PAGES 1                                                  // use 1 page(s)
14
15 #define STORE_PRG_BASE (FLASH_BASE + 0x00008000)        //32k //and FLASH_BANK1_END
16 #define STORE_PRG_PAGESIZE (0x00000400)                            //Page Size = 1K
17 #define STORE_PRG_PAGES 4                                                    //use 4 pages
18
e1f350 19 #define ALT_PRG_BASE (FLASH_BASE + 0x0000A000)        //36k //and FLASH_BANK1_END
bfc108 20 #define ALT_PRG_PAGESIZE (0x00000400)                            //Page Size = 1K
Q 21 #define ALT_PRG_PAGES 4                                                    //use 4 pages
22
23 #define STORE_SYSREG_BASE (FLASH_BASE + 0x0000A000)        //40k //and 
24 #define STORE_SYSREG_PAGESIZE (0x00000400)                            //Page Size = 1K
25 #define STORE_SYSREG_PAGES 1                                                        //use 1 pages
26
e1f350 27 #define STORE_RUNSTAT_BASE (FLASH_BASE + 0x0000A800)        //44k K //and 
bfc108 28 #define STORE_RUNSTAT_PAGESIZE (0x00000400)                            //Page Size = 1K
Q 29 #define STORE_RUNSTAT_PAGES 1                                                        //use 1 pages
30
31
32 #define STORE_LOG_BASE (FLASH_BASE + 0x0000C000)        //48k and FLASH_BANK1_END
33 #define STORE_LOG_PAGESIZE (0x00000400)                            //Page Size = 1K
34 #define STORE_LOG_PAGES 4                                                        //use 4 pages
e1f350 35
bfc108 36
Q 37 typedef unsigned char uchar;
38 typedef unsigned char UCHAR;
39 typedef unsigned short USHORT;
40 typedef unsigned int UINT;
41 typedef unsigned int uint32_t;
42 typedef unsigned int DWORD;
43 typedef unsigned short WORD;
44 typedef unsigned char BYTE;
45
d69aae 46 #define LoBofW(x) ((x)&0xff)
Q 47 #define HiBofW(x) (((x)>>8)&0xff)
48
49 #define LoHofB(x) ((x)&0xf)
50 #define HiHofB(x) (((x)>>4)&0xf)
51
bfc108 52 enum enStoreCfg
Q 53 {
54     START_SIGN = 0x55aa,
55     END_SIGN    =    0x5aa5,
56 };
57
58
59 enum enInputFilter
60 {
61     InputFilter_None =0,
62     InputFilter_1mS =1,
63     InputFilter_2mS =2,
64     InputFilter_4mS =3,
65     InputFilter_8mS =4,
66     InputFilter_16mS =5,
67     InputFilter_32mS =6,
68     InputFilter_64mS =7,
69     InputFilter_128mS =8,
70     InputFilter_256mS =9,
71 };
72
73 enum enOutputHold
74 {
75     Output_Hold = 0,
76     Output_Set_0 = 1,
77     Output_Set_1 = 2,
78 };
79
80 enum enPortType
81 {
82     PortType_Com = 0,    //计算机通讯
83     PortType_Gen = 1,    //通用通讯,自由口
84     PortType_KLink = 2, //KlinkͨѶ
85     PortType_KBus = 3,     //KBusͨѶ
86     PortType_KNet = 4,     // KNetͨѶ
87     PortType_ModbusRTU = 5, //Modbus RTU ͨѶ
88 };
d69aae 89
Q 90 //每个模块有 0/1/2/3/4/5/6/7/8个 通讯port
91 //不限于 UART, 网口,无线,单总线等,都是port
92 //甚至可以有虚拟的port
93
94 typedef struct tagPortStat
95 {
96     UCHAR nWorking;            //工作中
97     UCHAR nStation;            //自己站号
98     UCHAR bBus;                    //总线?,,全双工?
99     UCHAR bMaster;            //主机
100     UCHAR PortType;            //端口工作模式
101     UCHAR nDevices;            //连接的设备数量//不包括自己 //device list;
102     
103 }stPortStat,*pPortStat;
bfc108 104
Q 105 enum enKeventType
106 {
107     EventTypeNone = 0,
108     EventTypePowerUp = 1,
109     EventTypePowerDown = 2,
110     EventTypePowerRecover = 3,
111     EventTypeConnected = 4,
112     EventTypeLostCon = 5,
113     EventTypeSetTime = 6,
114     EventTypeSysCfg = 7,
115     EventTypeProg = 8,
116     EventTypeForce = 9,
117     EventTypeClearEvent = 10,
118     
119     
120     EventType
121 };
e1f350 122 typedef struct tagInfoBlock
Q 123 {
124     USHORT nDeviceType;
125     USHORT ProgVer;
126     USHORT KlinkVer;
127     USHORT nCapacity;
128     UCHAR nDInput;
129     UCHAR nDOutput;
130     UCHAR nAInput;
131     UCHAR nAOutput;
132     UCHAR nHInput;
133     UCHAR nHOutput;
134     UCHAR nExt1;
135     UCHAR nEXT2;
136     
137 }stKMInfoBlock;
138
bfc108 139 typedef struct tagKMFuncParam
Q 140 {
141     USHORT EnablePLC:1;        //使能内部PLC功能
142     USHORT RunMode;                //工作模式
143 }stKMFuncParam;
144
145 // 输入输出地址映射
146
147 typedef struct tagComPortParam
148 {
e1f350 149     USHORT PortType:4;                /* 0-5=Com,Gen,KLink,KBus,KNet,RTU */
bfc108 150   USHORT ByteSize:2;        /* 0-1=Number of bits/byte, 7-8    */
Q 151     USHORT Parity:4;                    /* 0-4=None,Odd,Even,Mark,Space    */
152   USHORT StopBits:2;        /* 0,1,2 = 1, 1.5, 2               */
153   USHORT EofChar:2;         /* 0,1,2 = None, CR, CR+LF, ETX;  End of character  */
154     USHORT SofChar:2;                    /* 0,1,2 = None, STX */
155     USHORT BaudRate;       /* =*100 Baudrate at which running       */
156 }stComPortParam;
157
158 typedef struct tagInputFilterParam
159 {
160     BYTE Filter0:4;
161     BYTE Filter1:4;
162
163 }stInputFilterParam;
164
165 typedef struct tagOutputHoldParam
166 {
167     BYTE Hold1:4;
168     BYTE Hold2:4;
169 }stOutputHoldParam;    
170
171 #pragma anon_unions
172 typedef struct tagMSysCfg
173 {
174     unsigned short Sign1;
175     unsigned short Seq1;
176     UINT cfgvar2;
177     stComPortParam Ports[2];
178     stOutputHoldParam OutputParams[16];
179     stInputFilterParam InputParams[16];
180     
181     UINT cfgvar3;
182     UINT cfgvar4;
183     UINT cfgvar5;
184     UINT cfgvar6;
185     UINT cfgvar7;
186     UINT cfgvar8;
187     UINT cfgvar9;
188     UINT cfgvar10;
189     UINT cfgvar11;
190     UINT cfgvar12;
191     UINT cfgvar13;
192     UINT cfgvar14;
193     UINT cfgvar15;
194     UINT cfgvar16;
195     UINT Space1[5];
196
197     unsigned short CRC1;
198     unsigned short EndSign1;
199 }stKMSysCfg,* pKMSysCfg;
200
e1f350 201 /*
Q 202 typedef struct tagFactData
203 {
204     USHORT Sign;                    //
205     USHORT nLength;                //
206     UCHAR LOT_NO[16];            //
207     UINT MANDate;                    //
208     UINT SN;                            //
209     UINT REV1[24];                //
210     USHORT rev9;
211     USHORT CRC;
212     
213 }stFactData;
214 */
bfc108 215 typedef struct tagFactoryData        //工厂量产参数,数据
Q 216 {
e1f350 217     USHORT Sign1;
Q 218     USHORT Seq1;
219     USHORT nModelNo;
220     USHORT nModelVer;
221     UINT nLotNo;
222      UINT nProductDateTime;
223     UINT SN1;
224     UINT nProtocalVer;
225     UINT nDefaultFunc;
226     UCHAR ModelStr[16];
227     UCHAR LOT_NO[16];            //
228     UCHAR SNStr[16];
bfc108 229     unsigned short CRC1;
Q 230     unsigned short EndSign1;
231     
232 }stFactoryData,* pFactoryData;
233
234 typedef struct tagEventLog
235 {
236     unsigned short Sign1;
237     unsigned short Seq1;
238     unsigned int nTime;
239     unsigned short nType;
240     unsigned short nParam1;
241     unsigned int nParam2;
242 }stEventLog,* pEventLog;
243
244 typedef struct tagRunStat
245 {
246     unsigned short Sign1;
247     unsigned short Seq1;
e1f350 248     volatile unsigned short PowerCount;    //
Q 249     volatile unsigned short Reserved1;
250     volatile unsigned int UpTime;        //Seconds;
251     volatile unsigned int UserData1;
252     volatile unsigned short WorkMode;
253     volatile unsigned short WorkMode2;
254     volatile unsigned short nBinProgBank;
255     volatile unsigned short nBinProgSize;
256     unsigned int Reserved2[1];
bfc108 257     unsigned short CRC1;
Q 258     unsigned short EndSign1;
259 }stRunStat, *pRunStat;
260
261 extern stRunStat KMRunStat;
262
263 //stStoreCfg * GetCurStoreCfgAddr(void );
264 //stStoreCfg * GetNextStoreCfgAddr(stStoreCfg * CurCfg );
265
266 extern stKMSysCfg KMSysCfg;
e1f350 267
Q 268 #define TYPECOIL 0x00
269 #define TYPEDATA 0x80
270
271     enum enKLCoilTypes
272     {
273         KLCoilTypeX = 0 | TYPECOIL ,        //X Input
274         KLCoilTypeY = 1 | TYPECOIL,        //Y Output
275         KLCoilTypeR = 2 | TYPECOIL,        //R register
276         KLCoilTypeLX = 3 | TYPECOIL,        //Link register
277         KLCoilTypeLY = 4 | TYPECOIL,        //Link register
278         KLCoilTypeT = 5 | TYPECOIL,        //Timer
279         KLCoilTypeC = 6 | TYPECOIL,        //Counter
280         KLCoilTypeLR = 7 | TYPECOIL,        //Link register
281         KLCoilTypeSR = 8 | TYPECOIL,        //Link register
282
283     };
284     enum enKLDataTypes
285     {
286         KLDataTypeDEC = 0 | TYPEDATA,
287         KLDataTypeHEX = 1 | TYPEDATA,
288         KLDataTypeFloat = 2 | TYPEDATA,
289         KLDataTypeWX = 3 | TYPEDATA,
290         KLDataTypeWY = 4 | TYPEDATA,
291         KLDataTypeWR = 5 | TYPEDATA,
292         KLDataTypeWLX = 6 | TYPEDATA,
293         KLDataTypeWLY = 7 | TYPEDATA,
294         KLDataTypeDT = 8 | TYPEDATA,
295         KLDataTypeSDT = 9 | TYPEDATA,
296         KLDataTypeWSR = 10 | TYPEDATA,
297         KLDataTypeSV = 11 | TYPEDATA,
298         KLDataTypeEV = 12 | TYPEDATA,
299         KLDataTypeLD = 13 | TYPEDATA,
300         KLDataSysCfg = 25 | TYPEDATA,
301         KLDataTypeFlash = 33 | TYPEDATA,
302         KLDataTypeTest = 254 | TYPEDATA,
303     };
304     
305 enum enKLDataCounts
306     {
307         KLDataDTCount = 256,
308         KLDataSDTCount = 256,
309
310         KLDataWXCount = 16,
311         KLDataWYCount = 16,
312         KLDataWRCount = 16,
313         KLDataLDCount = 64,
314         KLDataWLCount = 8, 
315         
316         KLCoilXCount = KLDataWXCount * 16,
317         KLCoilYCount = KLDataWYCount * 16,
318         KLCoilRCount = KLDataWRCount * 16,
319
320         KLCoilTCount = 64,
321         KLCoilCCount = KLCoilTCount,
322
323         KLDataSVCount = KLCoilTCount,
324         KLDataEVCount = KLCoilTCount,
325
326         KLCoilLXCount = 128,
327         KLCoilLYCount = 128,
328         KLCoilLRCount = 128,
329         KLCoilSRCount = 128,
330
331     };
332 #define TOTAL_WDFS (16)        //Total DF Count
333 #define TOTAL_CurVAL (16)        //
334 #define TOTALTIMERS (64)
335
336 typedef struct tagTimerStat
337 {
338     unsigned short nScale:2;//Time Scale, 0:1ms 1:10ms 2:100ms 3:1S
339     unsigned short nType:1;    //0 : timer 1:counter ;
340     unsigned short nDir:1;        //0 : count down. 1 count up;
341     unsigned short nInited:1;
342     unsigned short bSet:1;
343     unsigned short bTon:1;
344     
345 }stTimerStat;
346
347 typedef struct tagTimer
348 {
349     unsigned int LastActTime;
350     union {
351         unsigned short StatByte;
352      struct 
353     {
354         unsigned short nScale:2;    //Time Scale, 0:1ms 1:10ms 2:100ms 3:1S
355         unsigned short nType:1;        //0 : timer 1    :    counter ;
356         unsigned short nDir:1;        //0 : count down. 1 count up;
357         unsigned short nInited:1;
358         unsigned short bSet:1;
359         unsigned short bTon:1;
360         
361     };        
362 //        stTimerStat Stat;
363     };
364 }stTimer;
365
bfc108 366 typedef struct tagKMem
Q 367 {
e1f350 368     unsigned short WDFs[TOTAL_WDFS];
Q 369     unsigned char CurVALs[TOTAL_CurVAL];
370     unsigned char CurVAL;
371     stTimer Timers[TOTALTIMERS];
d69aae 372
Q 373     union {
e1f350 374     unsigned short WX[KLDataWXCount];        //本机的X和Y
d69aae 375     unsigned char WXB[KLDataWXCount*2];    
Q 376     };
377     union {
e1f350 378     unsigned short WY[KLDataWYCount];        //本机的X和Y
d69aae 379     unsigned char WYB[KLDataWYCount*2];        //本机的X和Y
Q 380     }; 
e1f350 381     unsigned short WR[KLDataWRCount];
Q 382     
383     unsigned short WT[16];
384
385     unsigned short WC[16];
386     unsigned short EV[KLDataEVCount];
387     unsigned short SV[KLDataSVCount];
388     
389     
bfc108 390     unsigned short WLX[16];        //虚拟的X和Y,远程通讯时映射用。
Q 391     unsigned short WLY[16];
e1f350 392     unsigned short WLR[16];    
bfc108 393     unsigned short WSR[16];
e1f350 394
d69aae 395 union {
Q 396     unsigned int DTD[KLDataDTCount];
e1f350 397     unsigned short DT[KLDataDTCount];
d69aae 398     unsigned char DTB[KLDataDTCount*2];
Q 399 };    
bfc108 400     // 配置寄存器
Q 401     // 系统状态寄存器
402     // 特殊寄存器
403     // 调试,监控寄存器
404     union {
e1f350 405         unsigned int SDD[KLDataSDTCount/2];
Q 406         unsigned short SDT[KLDataSDTCount];
407         unsigned char SDB[KLDataSDTCount*2];
bfc108 408         struct {
Q 409             unsigned int EffJumperSW;
410             unsigned int CurJumperSW;
411             unsigned int haltick;
412             unsigned int nRunCount;
413             unsigned int RunStat;
414             unsigned int ErrStat;
415             unsigned int PwrOnCount;
416             unsigned int ThisRunTime;
417             unsigned int TotalRunTime;
418             unsigned int CurTimeSec;
419             unsigned int PwrFailCount;
420             unsigned int LastPwrFailTime;
421             unsigned int LastScanTime;
422             unsigned int ScanTimeuS;
423             unsigned int MinScanTimeuS;
424             unsigned int MaxScanTimeuS;
425             unsigned int nEventCount;
426             unsigned int nEventMinIndex;
427             unsigned int nEventMaxIndex;
428             unsigned int Rev2[5];
429             unsigned short ADCValues[20];
430         };
431     };
432 }stKMem;
433
434
435 extern stKMem KMem;
e1f350 436 extern const stKMInfoBlock KMInfoBlock;
bfc108 437
d69aae 438 extern volatile int PowerDownEvent;
Q 439 extern volatile int OldPowerDownEvent;
440 extern volatile int OldPowerDownEventTime;
441
bfc108 442 int KMachineInit(void);
e1f350 443 int ReadFlashMem(void * pBuf, void * pAddrFlash, int nByteSize);
Q 444 int WriteToFlashMemNoErase(void * pBuf, void * pAddrFlash, unsigned int nByteSize);
445 int EraseAndWriteToFlashMem(void * pBuf, void * pAddrFlash, unsigned int nByteSize);
446
447 int ReadFactoryData(void * pDatabuf, int nByteCount);
448 int WriteFactoryData(void * pDataBuf, int nByteCount);
449
450 // active Program bank
451 int ReadProgram(int nProgByteAddr, void *pBuf, int nByteSize, int nBank);
452 int WriteProgram(int nProgByteAddr, void * pBuf, int nByteSize, int nBank);
bfc108 453
Q 454 int WriteSysCfgToFlash(pKMSysCfg theKMSysCfg);
455 int ReadSysCfgFromFlash(pKMSysCfg theKMSysCfg);
456
457 int AddEventLog(uint32_t nTime, USHORT nEvent, USHORT nParam1, UINT nParam2);
458 pEventLog GetEventLogAddr(int nIndex);
459 int ClearEventLog(void);
460 int LoadRunStat(pRunStat theRunStat);
461 int SaveRunStat(pRunStat theRunStat);
462
e1f350 463
Q 464 unsigned char GetCoilValue(unsigned char nCoilType, unsigned short nCoilAddr);
465 int SetCoilValue(unsigned char nCoilType, unsigned short nCoilAddr, unsigned char nCoilValue);
466 int GetVarData(int nDataType, int nDataAddr);
467 int SetVarData(int nDataType, int nDataAddr, int nDataValue);
468
bfc108 469 #endif    /* __KLPROTOCOL_H__ */