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