From 0fe6b074f3f3994d87af195f37e349a83e27882c Mon Sep 17 00:00:00 2001
From: QuakeGod <QuakeGod@sina.com>
Date: 星期六, 10 十二月 2022 16:55:40 +0800
Subject: [PATCH] FP0 fix utf8 char

---
 Inc/KMachine.h |  487 +++++++++++++++++++++++++++++++++++++++++------------
 1 files changed, 373 insertions(+), 114 deletions(-)

diff --git a/Inc/KMachine.h b/Inc/KMachine.h
index 72a5daf..15e119e 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,12 +43,86 @@
 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 // 20 bytes
+{
+//	USHORT nBlockLenth;
+	USHORT nDeviceTypeVer;			//device type		x.y
+//	UCHAR nDevierVer;
+	USHORT ProgVer;					//prog version	x.y
+	USHORT KLinkVer;				//x.y
+	USHORT KBusVer;					//x.y
+	
+	UCHAR nCapacity1;				//	? K
+	UCHAR nCapacity2;				//	? k
+	
+	UCHAR nDInput;
+	UCHAR nDOutput;
+	UCHAR nAInput;
+	UCHAR nAOutput;
+	UCHAR nHInput;
+	UCHAR nHOutput;
+	UCHAR nExt1;
+	UCHAR nExt2;
+	UCHAR nLogSize;
+	UCHAR nPorts;
+	UCHAR nManSize;
+	UCHAR nAbility;
+	UCHAR nSwitchBits;
+	
+}stKMInfoBlock;
+
+/*
+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;
+	
+}stFactoryData,* pFactoryData;
+
+
 enum enStoreCfg
 {
+	CFG_VER		= 0x100,
 	START_SIGN = 0x55aa,
 	END_SIGN	=	0x5aa5,
 };
-
 
 enum enInputFilter
 {
@@ -70,15 +145,119 @@
 	Output_Set_1 = 2,
 };
 
+typedef struct tagPortStatus
+{
+	USHORT porttype;		//232,485,net , wireless// KLink, KBus, KNet, KWireless
+	UCHAR StationID;
+	UCHAR MaxStations;
+	UCHAR CurStations;
+	UCHAR Running;
+	UCHAR Health;
+};
+
 enum enPortType
 {
-	PortType_Com = 0,	//计算机通讯
-	PortType_Gen = 1,	//通用通讯,自由口
-	PortType_KLink = 2, //Klink通讯
-	PortType_KBus = 3, 	//KBus通讯
-	PortType_KNet = 4, 	// KNet通讯
-	PortType_ModbusRTU = 5, //Modbus RTU 通讯
+	PortType_Default = 0, //榛樿
+	PortType_KLink = 1, //KLink閫氳
+	PortType_KBus = 2, 	//KBus閫氳
+	PortType_KNet = 3, 	// KNet閫氳
+	PortType_ModbusRTU = 4, //Modbus RTU 閫氳
+	PortType_Com = 5,	//	璁$畻鏈洪�氳
+	PortType_Gen = 6,	//閫氱敤閫氳锛岃嚜鐢卞彛
 };
+
+typedef struct tagComPortParam			//4 Bytes
+{
+	USHORT WorkMode;				/* 0-5=Default,KLink,KBus,KNet,RTU,Com,Gen */
+	USHORT Station;					/* 0=From jumper */
+	USHORT BaudRate;       /* =*100 Baudrate at which running       */
+  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 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 EndTime;						/*(*0.01mS) */
+	USHORT RecvAddr;
+	USHORT RecvSize;
+
+}stComPortParam, *pstComPortParam;
+
+//姣忎釜妯″潡鏈� 0/1/2/3/4/5/6/7/8涓� 閫氳port
+//涓嶉檺浜� UART, 缃戝彛锛屾棤绾匡紝鍗曟�荤嚎绛夛紝閮芥槸port
+//鐢氳嚦鍙互鏈夎櫄鎷熺殑port
+
+typedef struct tagPortStat
+{
+	UCHAR PortType;			//绔彛宸ヤ綔妯″紡
+	UCHAR nStation;			//鑷繁绔欏彿
+	UCHAR bWorking;			//宸ヤ綔涓�
+	UCHAR bBus;					//鎬荤嚎?,,鍏ㄥ弻宸�?
+	UCHAR bMaster;			//涓绘満
+	UCHAR nDevices;			//杩炴帴鐨勮澶囨暟閲�//涓嶅寘鎷嚜宸� //device list;
+	
+}stPortStat,*pPortStat;
+
+typedef struct tagKMFuncParam
+{
+	USHORT EnablePLC:1;		//浣胯兘鍐呴儴PLC鍔熻兘
+	USHORT RunMode;				//宸ヤ綔妯″紡
+}stKMFuncParam;
+
+// 杈撳叆杈撳嚭鍦板潃鏄犲皠
+
+typedef struct tagInputFilterParam		// 1 Bytes
+{
+	BYTE Filter0:4;
+	BYTE Filter1:4;
+
+}stInputFilterParam;
+
+typedef struct tagOutputHoldParam			//1 Bytes
+{
+	BYTE Hold1:4;
+	BYTE Hold2:4;
+}stOutputHoldParam;	
+
+#pragma anon_unions
+typedef struct tagKMSysCfg		//120 Bytes total
+{
+	USHORT Version;										// SC0	// 2 Bytes
+	USHORT workmode;									// SC1  // 2 Bytes 0=From jumper  
+	USHORT SwitchFunc;								// SC2  // 2 Bytes 
+	USHORT pad1;											// 2 Bytes
+	
+	stComPortParam PortParams[2];							// 8 Bytes
+	stInputFilterParam InputParams[16];				//16 Bytes
+	stOutputHoldParam OutputParams[16];				//16 Bytes
+	USHORT OutMappings[6];				//12 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[4];														//16 Bytes
+
+}stKMSysCfg,* pKMSysCfg;
+
+typedef struct tagStoredKMSysCfg
+{
+	unsigned short Sign1;
+	unsigned short Seq1;
+	stKMSysCfg theKMSysCfg;
+	unsigned short CRC1;
+	unsigned short EndSign1;
+}stStoredKMSysCfg,*pStoredKMSysCfg;
 
 enum enKeventType
 {
@@ -97,85 +276,6 @@
 	
 	EventType
 };
-typedef struct tagKMFuncParam
-{
-	USHORT EnablePLC:1;		//使能内部PLC功能
-	USHORT RunMode;				//工作模式
-}stKMFuncParam;
-
-// 输入输出地址映射
-
-typedef struct tagComPortParam
-{
-	USHORT PortType:4;				/* 0-4=None,Odd,Even,Mark,Space    */
-  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 SofChar:2;					/* 0,1,2 = None, STX */
-	USHORT BaudRate;       /* =*100 Baudrate at which running       */
-}stComPortParam;
-
-typedef struct tagInputFilterParam
-{
-	BYTE Filter0:4;
-	BYTE Filter1:4;
-
-}stInputFilterParam;
-
-typedef struct tagOutputHoldParam
-{
-	BYTE Hold1:4;
-	BYTE Hold2:4;
-}stOutputHoldParam;	
-
-#pragma anon_unions
-typedef struct tagMSysCfg
-{
-	unsigned short Sign1;
-	unsigned short Seq1;
-	UINT cfgvar2;
-	stComPortParam Ports[2];
-	stOutputHoldParam OutputParams[16];
-	stInputFilterParam InputParams[16];
-	
-	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];
-
-	unsigned short CRC1;
-	unsigned short EndSign1;
-}stKMSysCfg,* pKMSysCfg;
-
-typedef struct tagFactoryData		//工厂量产参数,数据
-{
-	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];
-	unsigned short CRC1;
-	unsigned short EndSign1;
-	
-}stFactoryData,* pFactoryData;
 
 typedef struct tagEventLog
 {
@@ -191,11 +291,16 @@
 {
 	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 short bLEDFlick;
+	unsigned short Reserved2[1];
 	unsigned short CRC1;
 	unsigned short EndSign1;
 }stRunStat, *pRunStat;
@@ -205,25 +310,154 @@
 //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,
+		KLDataTypeWDT = 41 | TYPEDATA,
+		KLDataTypeKBD = 51 | TYPEDATA,
+		KLDataTypeTest = 254 | TYPEDATA,
+	};
+	
+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;
+
+#define TOTAL_WDFS (32)		//Total DF Count
+#define TOTAL_CurVAL (16)		//
+#define TOTALTIMERS (64)
+
+enum enKLDataCounts
+	{
+
+		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,
+
+		KLDataDTCount = 128,
+		KLDataSDTCount = 128,
+		KLDataWDTCount = 128,
+
+	};
+
 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];		//鏈満鐨刋鍜孻
+	unsigned char WXB[KLDataWXCount*2];	
+	};
+	union {
+	unsigned short WY[KLDataWYCount];		//鏈満鐨刋鍜孻
+	unsigned char WYB[KLDataWYCount*2];		//鏈満鐨刋鍜孻
+	}; 
+	unsigned short WR[KLDataWRCount];
+	
+	unsigned short WT[16];
+
+	unsigned short WC[16];
+	unsigned short EV[KLDataEVCount];
+	unsigned short SV[KLDataSVCount];
+	
+	
+	unsigned short WLX[16];		//铏氭嫙鐨刋鍜孻锛岃繙绋嬮�氳鏃舵槧灏勭敤銆�
+	unsigned short WLY[16];
+	unsigned short WLR[16];	
+	unsigned short WSR[16];
+
+union {
+	unsigned int DTD[KLDataDTCount/2];
+	unsigned short DT[KLDataDTCount];
+	unsigned char DTB[KLDataDTCount*2];
+};
+
+	// 閰嶇疆瀵勫瓨鍣�
+	// 绯荤粺鐘舵�佸瘎瀛樺櫒
+	// 鐗规畩瀵勫瓨鍣�
+
+	union {
+		unsigned int SDD[KLDataSDTCount/2];
+		unsigned short SDT[KLDataSDTCount];
+		unsigned char SDB[KLDataSDTCount*2];
 		struct {
 			unsigned int EffJumperSW;
 			unsigned int CurJumperSW;
@@ -248,18 +482,37 @@
 			unsigned short ADCValues[20];
 		};
 	};
+	// 璋冭瘯锛岀洃鎺у瘎瀛樺櫒
+	union {
+		unsigned int WDD[KLDataWDTCount/2];
+		unsigned short WDT[KLDataWDTCount];
+		unsigned char WDB[KLDataWDTCount*2];
+	};
+	
 }stKMem;
 
 
 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 +520,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