QuakeGod
2022-10-17 2e3d7d9602cf0f76afc4290753d3ebcceed0a57b
Inc/KMachine.h
@@ -16,7 +16,7 @@
#define STORE_PRG_PAGESIZE (0x00000400)                     //Page Size = 1K
#define STORE_PRG_PAGES 4                                       //use 4 pages
#define ALT_PRG_BASE (FLASH_BASE + 0x00009000)      //36k //and FLASH_BANK1_END
#define ALT_PRG_BASE (FLASH_BASE + 0x0000A000)      //36k //and FLASH_BANK1_END
#define ALT_PRG_PAGESIZE (0x00000400)                     //Page Size = 1K
#define ALT_PRG_PAGES 4                                       //use 4 pages
@@ -24,7 +24,7 @@
#define STORE_SYSREG_PAGESIZE (0x00000400)                     //Page Size = 1K
#define STORE_SYSREG_PAGES 1                                          //use 1 pages
#define STORE_RUNSTAT_BASE (FLASH_BASE + 0x0000B000)      //44k K //and
#define STORE_RUNSTAT_BASE (FLASH_BASE + 0x0000A800)      //44k K //and
#define STORE_RUNSTAT_PAGESIZE (0x00000400)                     //Page Size = 1K
#define STORE_RUNSTAT_PAGES 1                                          //use 1 pages
@@ -32,6 +32,7 @@
#define STORE_LOG_BASE (FLASH_BASE + 0x0000C000)      //48k and FLASH_BANK1_END
#define STORE_LOG_PAGESIZE (0x00000400)                     //Page Size = 1K
#define STORE_LOG_PAGES 4                                          //use 4 pages
typedef unsigned char uchar;
typedef unsigned char UCHAR;
@@ -42,8 +43,38 @@
typedef unsigned short WORD;
typedef unsigned char BYTE;
#define LoBofW(x) ((x)&0xff)
#define HiBofW(x) (((x)>>8)&0xff)
#define LoHofB(x) ((x)&0xf)
#define HiHofB(x) (((x)>>4)&0xf)
//  信息块
//  工厂参数配置块
//  用户/系统参数配置块
//
//
typedef struct tagInfoBlock
{
   USHORT nDeviceType;
   USHORT ProgVer;
   USHORT KLinkVer;
   USHORT nCapacity;
   UCHAR nDInput;
   UCHAR nDOutput;
   UCHAR nAInput;
   UCHAR nAOutput;
   UCHAR nHInput;
   UCHAR nHOutput;
   UCHAR nExt1;
   UCHAR nExt2;
}stKMInfoBlock;
enum enStoreCfg
{
   CFG_VER      = 0x100,
   START_SIGN = 0x55aa,
   END_SIGN   =   0x5aa5,
};
@@ -80,6 +111,21 @@
   PortType_ModbusRTU = 5, //Modbus RTU ͨѶ
};
//每个模块有 0/1/2/3/4/5/6/7/8个 通讯port
//不限于 UART, 网口,无线,单总线等,都是port
//甚至可以有虚拟的port
typedef struct tagPortStat
{
   UCHAR nWorking;         //工作中
   UCHAR nStation;         //自己站号
   UCHAR bBus;               //总线?,,全双工?
   UCHAR bMaster;         //主机
   UCHAR PortType;         //端口工作模式
   UCHAR nDevices;         //连接的设备数量//不包括自己 //device list;
}stPortStat,*pPortStat;
enum enKeventType
{
   EventTypeNone = 0,
@@ -97,6 +143,7 @@
   
   EventType
};
typedef struct tagKMFuncParam
{
   USHORT EnablePLC:1;      //使能内部PLC功能
@@ -105,73 +152,105 @@
// 输入输出地址映射
typedef struct tagComPortParam
typedef struct tagComPortParam         //4 Bytes
{
   USHORT PortType:4;            /* 0-4=None,Odd,Even,Mark,Space    */
   USHORT Station;               /* 0=From jumper */
   USHORT WorkMode;            /* 0-5=Com,Gen,KLink,KBus,KNet,RTU */
   USHORT BaudRate;       /* =*100 Baudrate at which running       */
//   USHORT PortType:4;            /* 0-5=Com,Gen,KLink,KBus,KNet,RTU */
  USHORT ByteSize:2;        /* 0-1=Number of bits/byte, 7-8    */
   USHORT Parity:4;               /* 0-4=None,Odd,Even,Mark,Space    */
  USHORT StopBits:2;        /* 0,1,2 = 1, 1.5, 2               */
  USHORT EofChar:2;         /* 0,1,2 = None, CR, CR+LF, ETX;  End of character  */
   USHORT EndType:2;               /* 0=ByChar, 1= ByTime */
  USHORT EofChar:4;         /* 0,1,2 = None, CR, CR+LF, ETX;  End of character  */
   USHORT SofChar:2;               /* 0,1,2 = None, STX */
   USHORT BaudRate;       /* =*100 Baudrate at which running       */
   USHORT EndTime;
   USHORT RecvAddr;
   USHORT RecvSize;
}stComPortParam;
typedef struct tagInputFilterParam
typedef struct tagInputFilterParam      // 1 Bytes
{
   BYTE Filter0:4;
   BYTE Filter1:4;
}stInputFilterParam;
typedef struct tagOutputHoldParam
typedef struct tagOutputHoldParam         //1 Bytes
{
   BYTE Hold1:4;
   BYTE Hold2:4;
}stOutputHoldParam;   
#pragma anon_unions
typedef struct tagMSysCfg
typedef struct tagKMSysCfg      //120 Bytes total
{
   unsigned short Sign1;
   unsigned short Seq1;
   UINT cfgvar2;
   stComPortParam Ports[2];
   stOutputHoldParam OutputParams[16];
   stInputFilterParam InputParams[16];
   USHORT Version;                              // SC0   // 2 Bytes
   USHORT workmode;                           // SC1  // 2 Bytes 0=From jumper
   USHORT SwitchFunc;                        // SC2  // 2 Bytes
   
   UINT cfgvar3;
   UINT cfgvar4;
   UINT cfgvar5;
   UINT cfgvar6;
   UINT cfgvar7;
   UINT cfgvar8;
   UINT cfgvar9;
   UINT cfgvar10;
   UINT cfgvar11;
   UINT cfgvar12;
   UINT cfgvar13;
   UINT cfgvar14;
   UINT cfgvar15;
   UINT cfgvar16;
   UINT Space1[5];
   USHORT OutMappings[6];                              //12 Bytes //输出映射
   stComPortParam PortParams[2];                     // 8 Bytes
   stOutputHoldParam OutputParams[16];            //16 Bytes
   stInputFilterParam InputParams[16];            //16 Bytes
   UINT cfgvar3;                                             // 4 Bytes
   UINT cfgvar4;                                             // 4 Bytes
   UINT cfgvar5;                                             // 4 Bytes
   UINT cfgvar6;                                             // 4 Bytes
   UINT cfgvar7;                                             // 4 Bytes
   UINT cfgvar8;                                             // 4 Bytes
   UINT cfgvar9;                                             // 4 Bytes
   UINT cfgvar10;                                          // 4 Bytes
   UINT cfgvar11;                                          // 4 Bytes
   UINT cfgvar12;                                          // 4 Bytes
   UINT cfgvar13;                                          // 4 Bytes
   UINT cfgvar14;                                          // 4 Bytes
   UINT cfgvar15;                                          // 4 Bytes
   UINT cfgvar16;                                          // 4 Bytes
   UINT Space1[5];                                          //20 Bytes
   unsigned short CRC1;
   unsigned short EndSign1;
}stKMSysCfg,* pKMSysCfg;
typedef struct tagFactoryData      //工厂量产参数,数据
typedef struct tagStoredKMSysCfg
{
   unsigned short Sign1;
   unsigned short Seq1;
   unsigned int nModelNo;
   unsigned int nModelVer;
   unsigned int SN1;
   unsigned int nProtocalVer;
    unsigned int nProductDateTime;
   unsigned int nLotNo;
   unsigned int nDefaultFunc;
   char ModelStr[16];
   char SNStr[16];
   stKMSysCfg theKMSysCfg;
   unsigned short CRC1;
   unsigned short EndSign1;
}stStoredKMSysCfg,*pStoredKMSysCfg;
/*
typedef struct tagFactData
{
   USHORT Sign;               //
   USHORT nLength;            //
   UCHAR LOT_NO[16];         //
   UINT MANDate;               //
   UINT SN;                     //
   UINT REV1[24];            //
   USHORT rev9;
   USHORT CRC;
}stFactData;
*/
typedef struct tagFactoryData      //工厂量产参数,数据
{
   USHORT Sign1;
   USHORT Seq1;
   USHORT nModelNo;
   USHORT nModelVer;
   UINT nLotNo;
    UINT nProductDateTime;
   UINT SN1;
   UINT nProtocalVer;
   UINT nDefaultFunc;
   UCHAR ModelStr[16];
   UCHAR LOT_NO[16];         //
   UCHAR SNStr[16];
   unsigned short CRC1;
   unsigned short EndSign1;
   
@@ -191,11 +270,15 @@
{
   unsigned short Sign1;
   unsigned short Seq1;
   unsigned short PowerCount;   //
   unsigned short Reserved1;
   unsigned int UpTime;      //Seconds;
   unsigned int UserData1;
   unsigned int Reserved2[3];
   volatile unsigned short PowerCount;   //
   volatile unsigned short Reserved1;
   volatile unsigned int UpTime;      //Seconds;
   volatile unsigned int UserData1;
   volatile unsigned short WorkMode;
   volatile unsigned short WorkMode2;
   volatile unsigned short nBinProgBank;
   volatile unsigned short nBinProgSize;
   unsigned int Reserved2[1];
   unsigned short CRC1;
   unsigned short EndSign1;
}stRunStat, *pRunStat;
@@ -205,25 +288,149 @@
//stStoreCfg * GetCurStoreCfgAddr(void );
//stStoreCfg * GetNextStoreCfgAddr(stStoreCfg * CurCfg );
extern stKMSysCfg KMSysCfg;
extern stStoredKMSysCfg storedKMSysCfg;
#define TYPECOIL 0x00
#define TYPEDATA 0x80
   enum enKLCoilTypes
   {
      KLCoilTypeX = 0 | TYPECOIL ,      //X Input
      KLCoilTypeY = 1 | TYPECOIL,      //Y Output
      KLCoilTypeR = 2 | TYPECOIL,      //R register
      KLCoilTypeLX = 3 | TYPECOIL,      //Link register
      KLCoilTypeLY = 4 | TYPECOIL,      //Link register
      KLCoilTypeT = 5 | TYPECOIL,      //Timer
      KLCoilTypeC = 6 | TYPECOIL,      //Counter
      KLCoilTypeLR = 7 | TYPECOIL,      //Link register
      KLCoilTypeSR = 8 | TYPECOIL,      //Link register
   };
   enum enKLDataTypes
   {
      KLDataTypeDEC = 0 | TYPEDATA,
      KLDataTypeHEX = 1 | TYPEDATA,
      KLDataTypeFloat = 2 | TYPEDATA,
      KLDataTypeWX = 3 | TYPEDATA,
      KLDataTypeWY = 4 | TYPEDATA,
      KLDataTypeWR = 5 | TYPEDATA,
      KLDataTypeWLX = 6 | TYPEDATA,
      KLDataTypeWLY = 7 | TYPEDATA,
      KLDataTypeDT = 8 | TYPEDATA,
      KLDataTypeSDT = 9 | TYPEDATA,
      KLDataTypeWSR = 10 | TYPEDATA,
      KLDataTypeSV = 11 | TYPEDATA,
      KLDataTypeEV = 12 | TYPEDATA,
      KLDataTypeLD = 13 | TYPEDATA,
      KLDataSysCfg = 25 | TYPEDATA,
      KLDataTypeFlash = 33 | TYPEDATA,
      KLDataTypeTest = 254 | TYPEDATA,
   };
enum enKLDataCounts
   {
      KLDataDTCount = 256,
      KLDataSDTCount = 256,
      KLDataWXCount = 16,
      KLDataWYCount = 16,
      KLDataWRCount = 16,
      KLDataLDCount = 64,
      KLDataWLCount = 8,
      KLCoilXCount = KLDataWXCount * 16,
      KLCoilYCount = KLDataWYCount * 16,
      KLCoilRCount = KLDataWRCount * 16,
      KLCoilTCount = 64,
      KLCoilCCount = KLCoilTCount,
      KLDataSVCount = KLCoilTCount,
      KLDataEVCount = KLCoilTCount,
      KLCoilLXCount = 128,
      KLCoilLYCount = 128,
      KLCoilLRCount = 128,
      KLCoilSRCount = 128,
   };
#define TOTAL_WDFS (16)      //Total DF Count
#define TOTAL_CurVAL (16)      //
#define TOTALTIMERS (64)
typedef struct tagTimerStat
{
   unsigned short nScale:2;//Time Scale, 0:1ms 1:10ms 2:100ms 3:1S
   unsigned short nType:1;   //0 : timer 1:counter ;
   unsigned short nDir:1;      //0 : count down. 1 count up;
   unsigned short nInited:1;
   unsigned short bSet:1;
   unsigned short bTon:1;
}stTimerStat;
typedef struct tagTimer
{
   unsigned int LastActTime;
   union {
      unsigned short StatByte;
    struct
   {
      unsigned short nScale:2;   //Time Scale, 0:1ms 1:10ms 2:100ms 3:1S
      unsigned short nType:1;      //0 : timer 1   :   counter ;
      unsigned short nDir:1;      //0 : count down. 1 count up;
      unsigned short nInited:1;
      unsigned short bSet:1;
      unsigned short bTon:1;
   };
//      stTimerStat Stat;
   };
}stTimer;
typedef struct tagKMem
{
   unsigned short WX[16];      //本机的X和Y
   unsigned short WY[16];      //本机的X和Y
   unsigned short WR[64];
   unsigned short DT[256];
   unsigned short WDFs[TOTAL_WDFS];
   unsigned char CurVALs[TOTAL_CurVAL];
   unsigned char CurVAL;
   stTimer Timers[TOTALTIMERS];
   union {
   unsigned short WX[KLDataWXCount];      //本机的X和Y
   unsigned char WXB[KLDataWXCount*2];
   };
   union {
   unsigned short WY[KLDataWYCount];      //本机的X和Y
   unsigned char WYB[KLDataWYCount*2];      //本机的X和Y
   };
   unsigned short WR[KLDataWRCount];
   unsigned short WT[16];
   unsigned short WC[16];
   unsigned short EV[KLDataEVCount];
   unsigned short SV[KLDataSVCount];
   unsigned short WLX[16];      //虚拟的X和Y,远程通讯时映射用。
   unsigned short WLY[16];
   unsigned short WLR[16];
   unsigned short WSR[16];
union {
   unsigned int DTD[KLDataDTCount];
   unsigned short DT[KLDataDTCount];
   unsigned char DTB[KLDataDTCount*2];
};
   // 配置寄存器
   // 系统状态寄存器
   // 特殊寄存器
   // 调试,监控寄存器
   union {
      unsigned int SDD[128];
      unsigned short SDT[256];
      unsigned char SDB[512];
      unsigned int SDD[KLDataSDTCount/2];
      unsigned short SDT[KLDataSDTCount];
      unsigned char SDB[KLDataSDTCount*2];
      struct {
         unsigned int EffJumperSW;
         unsigned int CurJumperSW;
@@ -252,14 +459,26 @@
extern stKMem KMem;
extern const stKMInfoBlock KMInfoBlock;
extern volatile int PowerDownEvent;
extern volatile int OldPowerDownEvent;
extern volatile int OldPowerDownEventTime;
int KMachineInit(void);
int ReadFlashMem(void * pBuf, void * pAddrFlash, int nSize);
int WriteToFlashMemNoErase(void * pBuf, void * pAddrFlash, unsigned int nSize);
int EraseAndWriteToFlashMem(void * pBuf, void * pAddrFlash, unsigned int nSize);
int ReadFlashMem(void * pBuf, void * pAddrFlash, int nByteSize);
int WriteToFlashMemNoErase(void * pBuf, void * pAddrFlash, unsigned int nByteSize);
int EraseAndWriteToFlashMem(void * pBuf, void * pAddrFlash, unsigned int nByteSize);
int WriteSysCfgToFlash(pKMSysCfg theKMSysCfg);
int ReadSysCfgFromFlash(pKMSysCfg theKMSysCfg);
int ReadFactoryData(void * pDatabuf, int nByteCount);
int WriteFactoryData(void * pDataBuf, int nByteCount);
// active Program bank
int ReadProgram(int nProgByteAddr, void *pBuf, int nByteSize, int nBank);
int WriteProgram(int nProgByteAddr, void * pBuf, int nByteSize, int nBank);
int WriteSysCfgToFlash(pStoredKMSysCfg theStoredKMSysCfg);
int ReadSysCfgFromFlash(pStoredKMSysCfg theStoredKMSysCfg);
int AddEventLog(uint32_t nTime, USHORT nEvent, USHORT nParam1, UINT nParam2);
pEventLog GetEventLogAddr(int nIndex);
@@ -267,4 +486,10 @@
int LoadRunStat(pRunStat theRunStat);
int SaveRunStat(pRunStat theRunStat);
unsigned char GetCoilValue(unsigned char nCoilType, unsigned short nCoilAddr);
int SetCoilValue(unsigned char nCoilType, unsigned short nCoilAddr, unsigned char nCoilValue);
int GetVarData(int nDataType, int nDataAddr);
int SetVarData(int nDataType, int nDataAddr, int nDataValue);
#endif   /* __KLPROTOCOL_H__ */