QuakeGod
2022-10-17 eb4ffba9f16634e6f8144b9e85a0291e1cb8dfba
Inc/PLCfunctions.h
@@ -10,15 +10,6 @@
#include "GlobalDef.h"
#include "KMachine.h"
#define TOTAL_WDFS (16)      //Total DF Count
#define TOTAL_CurVAL (8)      //
//extern unsigned short X[256];
//extern unsigned short Y[256];
//extern unsigned short R[256];
#define TOTALTIMERS (64)
#define TICK_OF_MS (10)      //1ms
#define TICK_OF_RS (100)      //10mS
#define TICK_OF_XS (1000)         //100mS
@@ -26,49 +17,138 @@
#pragma anon_unions
typedef struct tagTimerStat
typedef struct tagPLCMem
{
   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;
   int bPLCRunning;
   int nScanCount;
   char ProgTrace[512];
   
}stTimerStat;
}stPLCMem;
extern stPLCMem PLCMem;
typedef struct tagTimer
int InitPLC(void);
int StartPLC(void);
int StopPLC(void);
enum enPLCOPs
{
   unsigned short SV;
   unsigned short EV;
   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;
      OP_NONE = 0,
      OP_NOP = 0,
      OP_ST = 1,      //
      OP_ST_ = 2,      //
      OP_AN = 3,      //
      OP_AN_ = 4,      //
      OP_OR = 5,      //
      OP_OR_ = 6,      //
      OP_NOT = 7,      //
      OP_ANS = 8,   //
      OP_ORS = 9,   //
      OP_PSHS = 10,   //
      OP_RDS = 11,      //
      OP_POPS = 12,   //
      OP_OUT = 16,      //
      OP_SET = 17,   //
      OP_RESET = 18,   //
      OP_DF = 19,      //
      OP_DF_ = 20,   //
      OP_ST_EQ,   //
      OP_ST_LT,   //
      OP_ST_GT,   //
      OP_ST_LE,   //
      OP_ST_GE,      //
      OP_ST_NE,      //
      OP_AN_EQ,      //
      OP_AN_LT,      //
      OP_AN_GT,
      OP_AN_LE,
      OP_AN_GE,
      OP_AN_NE,
      OP_OR_EQ,
      OP_OR_LT,
      OP_OR_GT,
      OP_OR_LE,
      OP_OR_GE,
      OP_OR_NE,
      OP_MV = 51,
      OP_INC = 52,
      OP_ADD2 = 53,
      OP_ADD3 = 54,
      OP_DEC = 55,
      OP_SUB2 = 56,
      OP_SUB3 = 57,
      OP_MUL = 58,
      OP_DIV = 59,
      OP_BKMV = 60,
      OP_COPY = 61,
      OP_CLR = 62,
      OP_BRK,
      OP_PAUSE,
      OP_JP,
      OP_CALL,
      OP_TML = 0xC8,   //
      OP_TMR = 0xDC,   //
      OP_TMX = 0xDD,   //
      OP_TMY = 0xFA,   //
};
/*
typedef struct tagPLCPROG
{
   unsigned char OP;
   unsigned char AddrType;
   unsigned short Addr;
}stPLCPROG;
*/
   typedef struct stBinProg1
   {
      unsigned char nOp;
      unsigned char nParamType;
      unsigned short nParamAddr;
   }stBinProg1;
   typedef struct stBinProg15
   {   //???
      //
      unsigned char nOp;
      unsigned char nOpNum;
      unsigned short nParamAddr1;
      unsigned char nParamType1;
      unsigned char resvr1;
      unsigned short resvr2;
   }stBinProg15;
   typedef struct stBinProg2
   {   //????
      //
      unsigned char nOp;
      unsigned char nOpNum;
      unsigned short nParamAddr1;
      unsigned char nParamType1;
      unsigned char nParamType2;
      unsigned short nParamAddr2;
   }stBinProg2;
   typedef struct stBinProg3
   {   //???????
      unsigned char nOp;
      unsigned char nOpNum;
      unsigned short nParamAddr1;
      unsigned char nParamType1;
      unsigned char nParamType2;
      unsigned short nParamAddr2;
      unsigned char resvr1;
      unsigned char nParamType3;
      unsigned short nParamAddr3;
   }stBinProg3;
extern stPLCPROG const prog1[];
extern stBinProg1 const prog1[];
extern int nSizeProg1;
//extern unsigned char CurVAL;
//extern unsigned char CurVALs[TOTAL_CurVAL];
//extern unsigned short DFs[TOTAL_WDFS];
@@ -78,23 +158,16 @@
//extern unsigned short WR[64];
//extern unsigned short DT[256];
//extern unsigned short SDT[256];
extern const unsigned short bitMasks[16];
//extern const unsigned short bitMasks[16];
//extern stTimer Timers[TOTALTIMERS];
///*
typedef struct tagPLCMem
{
   unsigned short WDFs[TOTAL_WDFS];
   unsigned char CurVALs[TOTAL_CurVAL];
   unsigned char CurVAL;
   stTimer Timers[TOTALTIMERS];
}stPLCMem;
extern stPLCMem PLCMem;
//*/
int InitTimer(int nIndex, int nType);
int StartTimer(int nIndex , int SV);
int RunTimer(int nIndex , int SV);
int StopTimer(int nIndex);
int ResetTimer(int nIndex);
int SetTimerValue(int nIndex, int bSet, int SV);
@@ -106,51 +179,8 @@
int PushInVal(void);
int PopOutVal(void);
enum enPLCOPs
{
   OP_None =0,
   OP_ST=1,
   OP_ST_=2,
   OP_AN=3,
   OP_AN_=4,
   OP_OR=5,
   OP_OR_=6,
   OP_NOT=7,
   OP_PSHS =8,
   OP_RDS = 9,
   OP_POPS =10,
   OP_ANS=11,
   OP_ORS=12,
   OP_OUT=16,
   OP_SET=17,
   OP_RESET=18,
   OP_DF=19,
   OP_DF_=20,
   OP_TML=0xC8,
   OP_TMR=0xDC,
   OP_TMX=0xDD,
   OP_TMY=0xFA,
};
enum enAddrTypes
{
   Addr_None =0,
   Addr_X =1,
   Addr_Y =2,
   Addr_R =3,
   Addr_T =4,
   Addr_L =5,
   Addr_ =6,
};
int ProcessPLCPROG(const stPLCPROG * prog,int nSize);
int ProcessPLCBinProg(const stBinProg1 * pBinprog, int nSize);
//int ProcessPLCPROG(const stBinProg1 * prog,int nSize);