QuakeGod
2024-07-27 842bb64195f958b050867c50db66fc0aa413dafb
ComLib/Inc/PLCfunctions.h
@@ -10,10 +10,48 @@
#include "GlobalDef.h"
#include "KMachine.h"
#if (ENABLE_PLC)
#define TICK_OF_MS (10)      //1ms
#define TICK_OF_RS (100)      //10mS
#define TICK_OF_XS (1000)         //100mS
#define TICK_OF_YS (10000)      //1S
#define TOTAL_WDFS (32)      //Total DF Count
#define TOTAL_CurVAL (16)      //
#define TOTALTIMERS (64)
#define PLC_PROGRAM_USE_BANK 1
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;
#pragma anon_unions
@@ -21,14 +59,19 @@
{
   int bPLCRunning;
   int nScanCount;
   unsigned short WDFs[TOTAL_WDFS];
   unsigned char CurVALs[TOTAL_CurVAL];
   unsigned char CurVAL;
   stTimer Timers[TOTALTIMERS];
   unsigned short WT[16];
   unsigned short WC[16];
   unsigned short EV[KLDataEVCount];
   unsigned short SV[KLDataSVCount];
   unsigned short ProgTrace[256];
   
}stPLCMem;
extern stPLCMem PLCMem;
int InitPLC(void);
int StartPLC(void);
int StopPLC(void);
enum enPLCOPs
{
@@ -91,11 +134,14 @@
      OP_PAUSE,
      OP_JP,
      OP_CALL,
      OP_RET,
      OP_TML = 0xC8,   //
      OP_TMR = 0xDC,   //
      OP_TMX = 0xDD,   //
      OP_TMY = 0xFA,   //
      OP_END = 0xFF,
   
};
/*
@@ -106,13 +152,13 @@
   unsigned short Addr;
}stPLCPROG;
*/
   typedef struct stBinProg1
   typedef struct stBinInstrcn1
   {
      unsigned char nOp;
      unsigned char nParamType;
      unsigned short nParamAddr;
   }stBinProg1;
   typedef struct stBinProg15
   }stBinInstrcn1;
   typedef struct stBinInstrcn15
   {   //???
      //
      unsigned char nOp;
@@ -121,8 +167,8 @@
      unsigned char nParamType1;
      unsigned char resvr1;
      unsigned short resvr2;
   }stBinProg15;
   typedef struct stBinProg2
   }stBinInstrcn15;
   typedef struct stBinInstrcn2
   {   //????
      //
      unsigned char nOp;
@@ -131,8 +177,8 @@
      unsigned char nParamType1;
      unsigned char nParamType2;
      unsigned short nParamAddr2;
   }stBinProg2;
   typedef struct stBinProg3
   }stBinInstrcn2;
   typedef struct stBinInstrcn3
   {   //???????
      unsigned char nOp;
      unsigned char nOpNum;
@@ -143,28 +189,49 @@
      unsigned char resvr1;
      unsigned char nParamType3;
      unsigned short nParamAddr3;
   }stBinProg3;
extern stBinProg1 const prog1[];
extern int nSizeProg1;
//extern unsigned char CurVAL;
//extern unsigned char CurVALs[TOTAL_CurVAL];
//extern unsigned short DFs[TOTAL_WDFS];
//extern unsigned short WX[13];
//extern unsigned short WY[13];
//extern unsigned short WR[64];
//extern unsigned short DT[256];
//extern unsigned short SDT[256];
//extern const unsigned short bitMasks[16];
//extern stTimer Timers[TOTALTIMERS];
///*
   }stBinInstrcn3;
//*/
typedef struct tagStoredHdr
{
   unsigned short nBlockSign;
   unsigned char nBlockType;
   unsigned char nSeq;
   unsigned short nSize;
   unsigned short nCRC2;
}stStoredHdr;
/*
typedef struct tagBinProgs
{
   unsigned short nSteps;
   unsigned short nOptions;
   stBinInstrcn1 BinInstrcns[1];
}stBinProgs, *pstBinProgs;
*/
typedef struct tagStoredBinProgs
{
   stStoredHdr StoredHdr;
   stBinInstrcn1 BinInstrcns[1];
}stStoredBinProgs, *pstStoredBinProgs;
typedef struct tagStoredAnno
{
   stStoredHdr StoredHdr;
   unsigned char Annos[1];
}stStoredAnno, *pstStoredAnno;
//extern stBinInstrcn1 const prog1[];
//extern int nSizeProg1;
extern stPLCMem PLCMem;
int InitPLC(void);
int StartPLC(void);
int StopPLC(void);
int InitTimer(int nIndex, int nType);
int RunTimer(int nIndex , int SV);
@@ -179,9 +246,9 @@
int PushInVal(void);
int PopOutVal(void);
int ProcessPLCBinProg(const stBinProg1 * pBinprog, int nSize);
//int ProcessPLCPROG(const stBinProg1 * prog,int nSize);
int ProcessPLCBinProg(const stBinInstrcn1 * pBinProg, int nSize);
//int ProcessPLCPROG(const stBinInstrcn1 * prog,int nSize);
#endif // (ENABLE_PLC)
#endif  /* __PLCFUNCTIONS_H__ */