From ea83fa3e67ec0f8a6b8e3f70b63509f1483be25a Mon Sep 17 00:00:00 2001 From: QuakeGod <QuakeGod@sina.com> Date: 星期一, 17 十月 2022 02:28:53 +0800 Subject: [PATCH] Merge branch 'dev1' of file://hasee-k680e/GitBase/F030C8xx_KLink into dev1 --- Inc/KMachine.h | 372 ++++++++++++++++++++++++++++++++++++++++++---------- 1 files changed, 299 insertions(+), 73 deletions(-) diff --git a/Inc/KMachine.h b/Inc/KMachine.h index 72a5daf..1be757b 100644 --- a/Inc/KMachine.h +++ b/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, }; @@ -72,13 +103,28 @@ enum enPortType { - PortType_Com = 0, //计算机通讯 - PortType_Gen = 1, //通用通讯,自由口 + PortType_Com = 0, //锟斤拷锟斤拷锟酵ㄑ� + PortType_Gen = 1, //通锟斤拷通讯锟斤拷锟斤拷锟缴匡拷 PortType_KLink = 2, //Klink通讯 PortType_KBus = 3, //KBus通讯 PortType_KNet = 4, // KNet通讯 PortType_ModbusRTU = 5, //Modbus RTU 通讯 }; + +//每锟斤拷模锟斤拷锟斤拷 0/1/2/3/4/5/6/7/8锟斤拷 通讯port +//锟斤拷锟斤拷锟斤拷 UART, 锟斤拷锟节o拷锟斤拷锟竭o拷锟斤拷锟斤拷锟竭等o拷锟斤拷锟斤拷port +//锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟絧ort + +typedef struct tagPortStat +{ + UCHAR nWorking; //锟斤拷锟斤拷锟斤拷 + UCHAR nStation; //锟皆硷拷站锟斤拷 + UCHAR bBus; //锟斤拷锟斤拷?,,全双锟斤拷? + UCHAR bMaster; //锟斤拷锟斤拷 + UCHAR PortType; //锟剿口癸拷锟斤拷模式 + UCHAR nDevices; //锟斤拷锟接碉拷锟借备锟斤拷锟斤拷//锟斤拷锟斤拷锟斤拷锟皆硷拷 //device list; + +}stPortStat,*pPortStat; enum enKeventType { @@ -97,81 +143,115 @@ EventType }; + typedef struct tagKMFuncParam { - USHORT EnablePLC:1; //使能内部PLC功能 - USHORT RunMode; //工作模式 + USHORT EnablePLC:1; //使锟斤拷锟节诧拷PLC锟斤拷锟斤拷 + USHORT RunMode; //锟斤拷锟斤拷模式 }stKMFuncParam; -// 输入输出地址映射 +// 锟斤拷锟斤拷锟斤拷锟斤拷锟街酚筹拷锟� -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 +271,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 +289,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 WLX[16]; //虚拟的X和Y,远程通讯时映射用。 - unsigned short WLY[16]; - unsigned short WSR[16]; - - // 配置寄存器 - // 系统状态寄存器 - // 特殊寄存器 - // 调试,监控寄存器 + unsigned short WDFs[TOTAL_WDFS]; + unsigned char CurVALs[TOTAL_CurVAL]; + unsigned char CurVAL; + stTimer Timers[TOTALTIMERS]; + union { - unsigned int SDD[128]; - unsigned short SDT[256]; - unsigned char SDB[512]; + 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]; //锟斤拷锟斤拷锟絏锟斤拷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]; +}; + + // 锟斤拷锟矫寄达拷锟斤拷 + // 系统状态锟侥达拷锟斤拷 + // 锟斤拷锟斤拷拇锟斤拷锟� + // 锟斤拷锟皆o拷锟斤拷丶拇锟斤拷锟� + union { + unsigned int SDD[KLDataSDTCount/2]; + unsigned short SDT[KLDataSDTCount]; + unsigned char SDB[KLDataSDTCount*2]; struct { unsigned int EffJumperSW; unsigned int CurJumperSW; @@ -252,14 +460,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 +487,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__ */ -- Gitblit v1.9.1