/*
|
File: cmplclib.h
|
|
PMAC Compiled PLC Command strings, Max parameters,
|
Axis masks, & Error codes
|
|
Author(s): Ed Lay
|
|
08/03/93 EBL Created
|
|
Change log:
|
|
Date Rev Who Description
|
--------- ----- ----- -----------------------------------------
|
01/11/4 EBL Changes for windows DLL
|
01/21/4 EBL Add "dlllib.h" & "struct.h" for WINDOWS
|
01/27/4 EBL New lvardef structure
|
03/03/4 EBL New Function Blocks(TON,TOF,TP,CTU,CTD,CTUD)
|
03/03/4 EBL Change CmdSingle VALUE
|
03/13/5 EBL Add FBnn.ET &= logic
|
08/24/99 EBL Change Token structure to be "integer"
|
10/13/00 EBL Add Lnn-> definition using Mnn-> format
|
10/19/00 EBL Add LOCK, UNLOCK, SETPHSE strings
|
|
*/
|
// #define _DEBUG 1
|
|
#ifndef _CMPLCLIB_H
|
#define _CMPLCLIB_H
|
#include <stdlib.h>
|
#include <stdio.h>
|
#include <ctype.h>
|
#include <share.h>
|
#ifdef _MSC_VER
|
#include <malloc.h>
|
#endif
|
|
//***************** Strings ***********************************
|
|
#define SABS "ABS"
|
#define SACOS "ACOS"
|
#define SADD "ADD"
|
#define SADDR "\x41\x44\xC4\x52\xC5\xD3\xD3" // ADDRESS
|
#define SAND "AND"
|
#define SASIN "ASIN"
|
#define SATAN "ATAN"
|
#define SATAN2 "ATAN2"
|
#define SCLEAR "\x43\x4C\xC5\xC1\x52"
|
#define SCLOSE "\x43\x4C\xCF\x53\xC5"
|
#define SCMD "\x43\xCF\x4D\xCD\xC1\xCE\x44" // COMMAND
|
#define SCHN "CHN" // MACPlcc CHN
|
#define SCOS "COS"
|
#define SCOPYR "COP\xD9\x52\xC5\xC7" // COPyReg
|
#define SCOPYR2 "COP\xD9\x52\xC5\xC7\x32" // COPyReg2
|
#define SCTD "CTD"
|
#define SCTR_R "CTR_R"
|
#define SCTU "CTU"
|
#define SCTUD "CTUD"
|
#define SDISPLC "DIS\xC1\xC2\xCC\xC5\xA0\x50\x4C\x43" // 'DISABLE PLC'
|
#define SDISP "DIS\x50\xCC\xC1\xD9" // 'DISPLAY'
|
#define SDIV "DIV"
|
#define SENAPLC "ENA\xC2\xCC\xC5\xA0\x50\x4C\x43" // 'ENABLE PLC'
|
#define SENDI "END\xA0\x49\xC6" // 'END IF'
|
#define SENDW "END\xA0\x57\xC8\xC9\xCC\xC5" // 'END WHILE'
|
#define SELSE "ELSE"
|
#define SEQ "EQ"
|
#define SEXP "EXP"
|
#define SFTOI "FTOI"
|
#define SFLIMIT "FLIMIT"
|
#define SGT "GT"
|
#define SGTE "GTE"
|
#define SIF "IF"
|
#define SINT "INT"
|
#define SITOF "ITOF"
|
#define SLOCK "LOCK"
|
#define SLN "LN"
|
#define SLT "LT"
|
#define SLTE "LTE"
|
#define SMACPLCC "MACPLCC\xA0" // 'MACPLCC '
|
#define SLMOVRLY "LMOV\xC5\x52\x4C\xC1\x59" // 'LMOVeRLaY'
|
#define SMOD "MOD"
|
#define SMTRNum "MTRN\xD5\xCD"
|
#define SMULT "MULT"
|
#define SNAND "NAND"
|
#define SNEQ "NE"
|
#define SNOR "NOR"
|
#define SOPEN "\x4F\x50\xC5\x4E" // OPEN - OPN
|
#define SOPTI "OPTI\xCD\xC9\xDA\xC5\xA0\x4F\x46\xC6" // OPTImize OFf
|
#define SOR "OR"
|
#define SPLCC "PLCC\xA0" // 'PLCC '
|
#define SRET "RET\xD5\xD2\xCE" // 'RETurn'
|
#define SSCAN "SCAN"
|
#define SSEND "SEND"
|
#define SSETPH "SETPHASE"
|
#define SSERVO "SERVO" // 'SERVO'
|
#define SSIN "SIN"
|
#define SSQRT "SQRT"
|
#define SSUB "SUB"
|
#define STAN "TAN"
|
#define STON "TON"
|
#define STOF "TOF"
|
#define STP "TP"
|
#define STMR_R "TMR_R"
|
#define SUNLOCK "UNLOCK"
|
#define SWHILE "WHILE"
|
#define SXOR "XOR"
|
|
//
|
// TIMER STRUCTURE ELEMENTs
|
//
|
#define STMR_IN ".IN" // Strings
|
#define STMR_TT ".TT"
|
#define STMR_Q ".Q"
|
#define STMR_PT ".PT"
|
#define STMR_ET ".ET"
|
#define TMR_IN 0x160A // Format Code
|
#define TMR_TT 0x150A
|
#define TMR_Q 0x140A
|
#define TMR_PT 0x00A2
|
#define TMR_ET 0x0000
|
#define FBXREAD 0x800000L // READS DATA INTO "X1" REGISTER
|
|
//
|
// COUNTER STRUCTURE ELEMENTs
|
//
|
#define SCTR_RS ".R" // Strings
|
#define SCTR_CU ".CU"
|
#define SCTR_Q ".Q"
|
#define SCTR_PV ".PV"
|
#define SCTR_LD ".LD"
|
#define SCTR_CD ".CD"
|
#define SCTR_CV ".CV"
|
#define CTR_RS 0x170A // Format Code
|
#define CTR_CU 0x160A
|
#define CTR_QU 0x140A
|
#define CTR_PV 0x00A2
|
#define CTR_LD 0x1708
|
#define CTR_CD 0x1608
|
#define CTR_QD 0x1408
|
#define CTR_CV 0x00A0
|
|
//
|
// MATH STRUCTURE ELEMENTs
|
//
|
#define SMATH_A ".A"
|
#define SMATH_B ".B"
|
#define SMATH_C ".C"
|
#define SMATH_Q ".Q"
|
#define SMATH_EN ".EN"
|
#define SMATH_ENO ".ENO"
|
#define SSCAN_TIME ".TIME"
|
#define SSCAN_MAX ".MAX"
|
#define SSCAN_MIN ".MIN"
|
#define SSCAN_CLR ".CLR"
|
// FB READ/WRITE FORMAT CODE
|
#define MATH_A 0x0002
|
#define MATH_B 0x0000
|
#define MATH_C 0x0002
|
#define MATH_Q 0x1708
|
#define MATH_ENO 0x1708
|
#define MATH_EN 0x1608
|
#define SCAN_TIME 0x0000
|
#define SCAN_MAX 0x0002
|
#define SCAN_MIN 0x0080
|
#define SCAN_CLR 0x1508
|
|
//****************************************************************************
|
//
|
// Function Return codes for PLCstrcnvt, PLCstrtod, PLCmtrnum,
|
// PLCplcnum, PLCaxisnum
|
//
|
//****************************************************************************
|
// #ifdef _DEBUG
|
// #define PLCTOKENMAX 655 // For DEBUG?? limited to 64k at the present struct size = 10
|
// #define PLC56KMAX 1536 // For DEBUG maximum number of PLC 56k memory = 15K
|
// #define LVARSIZE 1024 // Max size of L-var variables
|
// #else
|
// #define PLCTOKENMAX 6553 // limited to 64k at the present struct size = 10
|
#define PLC56KMAX 15360 // maximum number of PLC 56k memory = 15K
|
#define LVARSIZE 8192 // Max size of L-var variables
|
// #endif
|
|
#define STACKMAX 128 // maximum number of temporary 56k stack
|
#define PLCSTRMAX 8192*2 // max number of buffered characters allowed for string cmds.
|
#define PLCSTRLINEMAX 256 // max number of characters allowed in one string + 1
|
#define PLCOk 0
|
#define PLCClose 1 // Close command encoutered - not an error
|
|
//enum PLCCompileErrors { Is now in "pmacresc.h"
|
// PLCOk = 0,
|
// PLCClose = 1, // Close command encoutered - not an error
|
// PLCFltErr = -33, // Unable to pack; floating point number too large
|
// PLCStrToDErr = -34, // Unable to convert string to double float number
|
// PLCCmdErr = -35, // Illegal Command or Format in string
|
// PLCIntErr = -36, // Integer number out of range
|
// PLCParenErr = -37, // Unmatching parenthesis
|
// PLCElseErr = -38, // Illegal Else
|
// PLCEndIfErr = -39, // Illegal EndIf
|
// PLCEndWhErr = -40, // Illegal EndWhile
|
// PLCOutFileErr = -41, // PLCC Output File Error
|
// PLCInpFileErr = -42, // PLCC Input File Error
|
// PLCCmdClsErr = -43, // Unclosed If or While
|
// PLC56kMemMaxErr = -44, // Max number of PLC 56k memory exceeded
|
// PLC56kstackMaxErr = -45, // Max number of PLC 56k conversion stack exceeded
|
// PLCTokenMaxErr = -46, // Max number of Tokens exceeded for allowed memory
|
// PLCfarheapErr = -47, // Far heap allocate error
|
// PLCStrErr = -48, // String error Must be in "" & less than 255 characters
|
// PLCLvarNotDef = -49, // L-var address not defined
|
// PLCLvarMpyDef = -50 // Two L-vars have the same address definition
|
// or has already been defined
|
//};
|
|
|
struct plccnvt { // PLC ASCII to Binary Token convert structure
|
|
int token;
|
double data;
|
};
|
|
|
#define XYBITMASK 0x5F // see below
|
#define XYMASK 0x40 // see below
|
#define BITMASK 0x1F // see below
|
#define FORMATMASK 0x80
|
|
struct lvardef_struct { // PLC ASCII to Binary Token convert structure
|
|
DWORD addr;
|
unsigned char xybit; // Bit use 7 6 5 43210
|
// --- -------- -- ----------
|
// U/S= 0/1 x/y= 0/1 0 offset # 0-23
|
|
unsigned char width; // width 1,4,8,12,16,24
|
int l_def; // Lnn-> using X/Y: Mnn-> definition format
|
};
|
|
|
|
///////////////////////////////////////////////////////////////////////////
|
// Functions
|
|
#ifdef __cplusplus
|
extern "C" {
|
#endif
|
// Converts from a .PMA to .56K
|
int CALLBACK PmacPlccCompilerA( DWORD dwDevice, int *datainfo, PCHAR inName, PCHAR outName );
|
int CALLBACK PmacPlccCompilerW( DWORD dwDevice, int *datainfo, PWCHAR inName, PWCHAR outName );
|
#ifdef __cplusplus
|
}
|
#endif
|
|
#ifdef UNICODE
|
#define PlccCompiler PlccCompilerW
|
#else
|
#define PlccCompiler PlccCompilerA
|
#endif // !UNICODE
|
|
#endif
|