QuakeGod
2022-12-10 0fe6b074f3f3994d87af195f37e349a83e27882c
Inc/KMachine.h
@@ -49,18 +49,24 @@
#define LoHofB(x) ((x)&0xf)
#define HiHofB(x) (((x)>>4)&0xf)
//  信息块
//  工厂参数配置块
//  用户/系统参数配置块
//  信息块
//  工厂参数配置块
//  用户/系统参数配置块
//  
//
typedef struct tagInfoBlock
typedef struct tagInfoBlock // 20 bytes
{
   USHORT nDeviceType;
   USHORT ProgVer;
   USHORT KLinkVer;
   USHORT nCapacity;
//   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;
@@ -69,8 +75,47 @@
   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
{
@@ -78,7 +123,6 @@
   START_SIGN = 0x55aa,
   END_SIGN   =   0x5aa5,
};
enum enInputFilter
{
@@ -101,74 +145,66 @@
   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,   //通用通讯,自由口
};
//每个模块有 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,
   EventTypePowerUp = 1,
   EventTypePowerDown = 2,
   EventTypePowerRecover = 3,
   EventTypeConnected = 4,
   EventTypeLostCon = 5,
   EventTypeSetTime = 6,
   EventTypeSysCfg = 7,
   EventTypeProg = 8,
   EventTypeForce = 9,
   EventTypeClearEvent = 10,
   EventType
};
typedef struct tagKMFuncParam
{
   USHORT EnablePLC:1;      //使能内部PLC功能
   USHORT RunMode;            //工作模式
}stKMFuncParam;
// 输入输出地址映射
typedef struct tagComPortParam         //4 Bytes
{
   USHORT WorkMode;            /* 0-5=Default,KLink,KBus,KNet,RTU,Com,Gen */
   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 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;
   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;
   
}stComPortParam;
}stPortStat,*pPortStat;
typedef struct tagKMFuncParam
{
   USHORT EnablePLC:1;      //使能内部PLC功能
   USHORT RunMode;            //工作模式
}stKMFuncParam;
// 输入输出地址映射
typedef struct tagInputFilterParam      // 1 Bytes
{
@@ -189,12 +225,12 @@
   USHORT Version;                              // SC0   // 2 Bytes
   USHORT workmode;                           // SC1  // 2 Bytes 0=From jumper  
   USHORT SwitchFunc;                        // SC2  // 2 Bytes 
   USHORT OutMappings[6];                              //12 Bytes //输出映射
   USHORT pad1;                                 // 2 Bytes
   
   stComPortParam PortParams[2];                     // 8 Bytes
   stOutputHoldParam OutputParams[16];            //16 Bytes
   stInputFilterParam InputParams[16];            //16 Bytes
   stOutputHoldParam OutputParams[16];            //16 Bytes
   USHORT OutMappings[6];            //12 Bytes //输出映射
   
   UINT cfgvar3;                                             // 4 Bytes
   UINT cfgvar4;                                             // 4 Bytes
@@ -206,11 +242,11 @@
   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
//   UINT cfgvar13;                                          // 4 Bytes
//   UINT cfgvar14;                                          // 4 Bytes
//   UINT cfgvar15;                                          // 4 Bytes
//   UINT cfgvar16;                                          // 4 Bytes
//   UINT Space1[4];                                          //16 Bytes
}stKMSysCfg,* pKMSysCfg;
@@ -223,38 +259,23 @@
   unsigned short EndSign1;
}stStoredKMSysCfg,*pStoredKMSysCfg;
/*
typedef struct tagFactData
enum enKeventType
{
   USHORT Sign;               //
   USHORT nLength;            //
   UCHAR LOT_NO[16];         //
   UINT MANDate;               //
   UINT SN;                     //
   UINT REV1[24];            //
   USHORT rev9;
   USHORT CRC;
   EventTypeNone = 0,
   EventTypePowerUp = 1,
   EventTypePowerDown = 2,
   EventTypePowerRecover = 3,
   EventTypeConnected = 4,
   EventTypeLostCon = 5,
   EventTypeSetTime = 6,
   EventTypeSysCfg = 7,
   EventTypeProg = 8,
   EventTypeForce = 9,
   EventTypeClearEvent = 10,
   
}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;
   EventType
};
typedef struct tagEventLog
{
@@ -278,7 +299,8 @@
   volatile unsigned short WorkMode2;
   volatile unsigned short nBinProgBank;
   volatile unsigned short nBinProgSize;
   unsigned int Reserved2[1];
   unsigned short bLEDFlick;
   unsigned short Reserved2[1];
   unsigned short CRC1;
   unsigned short EndSign1;
}stRunStat, *pRunStat;
@@ -324,40 +346,11 @@
      KLDataTypeLD = 13 | TYPEDATA,
      KLDataSysCfg = 25 | TYPEDATA,
      KLDataTypeFlash = 33 | TYPEDATA,
      KLDataTypeWDT = 41 | TYPEDATA,
      KLDataTypeKBD = 51 | 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
@@ -388,6 +381,40 @@
   };
}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 WDFs[TOTAL_WDFS];
@@ -396,12 +423,12 @@
   stTimer Timers[TOTALTIMERS];
   union {
   unsigned short WX[KLDataWXCount];      //本机的X和Y
   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 WY[KLDataWYCount];      //本机的X和Y
   unsigned char WYB[KLDataWYCount*2];      //本机的X和Y
   }; 
   unsigned short WR[KLDataWRCount];
   
@@ -412,21 +439,21 @@
   unsigned short SV[KLDataSVCount];
   
   
   unsigned short WLX[16];      //虚拟的X和Y,远程通讯时映射用。
   unsigned short WLX[16];      //虚拟的X和Y,远程通讯时映射用。
   unsigned short WLY[16];
   unsigned short WLR[16];   
   unsigned short WSR[16];
union {
   unsigned int DTD[KLDataDTCount];
   unsigned int DTD[KLDataDTCount/2];
   unsigned short DT[KLDataDTCount];
   unsigned char DTB[KLDataDTCount*2];
};
   // 配置寄存器
   // 系统状态寄存器
   // 特殊寄存器
   // 调试,监控寄存器
   // 配置寄存器
   // 系统状态寄存器
   // 特殊寄存器
   union {
      unsigned int SDD[KLDataSDTCount/2];
      unsigned short SDT[KLDataSDTCount];
@@ -455,6 +482,13 @@
         unsigned short ADCValues[20];
      };
   };
   // 调试,监控寄存器
   union {
      unsigned int WDD[KLDataWDTCount/2];
      unsigned short WDT[KLDataWDTCount];
      unsigned char WDB[KLDataWDTCount*2];
   };
}stKMem;