Files
PBSwissMX/usrServo/pp_proj.h

296 lines
8.5 KiB
C

#ifndef _PP_PROJ_H_
#define _PP_PROJ_H_
//***********************************************************************************
// C header for accessing PMAC Global, CSGlobal, Ptr vars
// _PPScriptMode_ for Pmac Script like access global & csglobal
// global Mypvar - access with "Mypvar"
// global Myparray(32) - access with "Myparray(i)"
// csglobal Myqvar - access with "Myqvar(i)" where "i" is Coord #
// csglobal Myqarray(16) - access with "Myqvar(i,j)" where "j" is index
// _EnumMode_ for Pmac enum data type checking on Set & Get global functions
// Example
// global Mypvar
// csglobal Myqvar
// "SetGlobalVar(Myqvar, data)" will give a compile error because its a csglobal var.
// "SetCSGlobalVar(Mypvar, data)" will give a compile error because its a global var.
//************************************************************************************
#ifdef _PPScriptMode_
enum globalP {_globalP_=-1};
enum globalParray {_globalParray_=-1};
enum csglobalQ {_csglobalQ_=-1};
enum csglobalQarray {_csglobalQarray_=-1};
enum ptrM {_ptrM_=-1};
enum ptrMarray {_ptrMarray_=-1};
void SetEnumGlobalVar(enum globalP var, double data)
{
pshm->P[var] = data;
}
double GetEnumGlobalVar(enum globalP var)
{
return pshm->P[var];
}
void SetEnumGlobalArrayVar(enum globalParray var, unsigned index, double data)
{
pshm->P[(var + index)%MAX_P] = data;
}
double GetEnumGlobalArrayVar(enum globalParray var, unsigned index)
{
return pshm->P[(var + index)%MAX_P];
}
void SetEnumCSGlobalVar(enum csglobalQ var, unsigned cs, double data)
{
pshm->Coord[cs % MAX_COORDS].Q[var] = data;
}
double GetEnumCSGlobalVar(enum csglobalQ var, unsigned cs)
{
return pshm->Coord[cs % MAX_COORDS].Q[var];
}
void SetEnumCSGlobalArrayVar(enum csglobalQarray var, unsigned index, unsigned cs, double data)
{
pshm->Coord[cs % MAX_COORDS].Q[(var + index)%MAX_Q] = data;
}
double GetEnumCSGlobalArrayVar(enum csglobalQarray var, unsigned index, unsigned cs)
{
return pshm->Coord[cs % MAX_COORDS].Q[(var + index)%MAX_Q];
}
void SetEnumPtrVar(enum ptrM var, double data)
{
im_write(pshm->Mdef + var, data, &pshm->Ldata);
}
double GetEnumPtrVar(enum ptrM var)
{
return im_read(pshm->Mdef + var, &pshm->Ldata);
}
void SetEnumPtrArrayVar(enum ptrMarray var, unsigned index, double data)
{
im_write(pshm->Mdef + ((var + index)%MAX_M), data, &pshm->Ldata);
}
double GetEnumPtrArrayVar(enum ptrMarray var, unsigned index)
{
return im_read(pshm->Mdef + ((var + index)%MAX_M), &pshm->Ldata);
}
#define SetGlobalVar(i, x) SetEnumGlobalVar(i, x)
#define SetGlobalArrayVar(i, j, x) SetEnumGlobalArrayVar(i, j, x)
#define GetGlobalVar(i) GetEnumGlobalVar(i)
#define GetGlobalArrayVar(i, j) GetEnumGlobalArrayVar(i, j)
#define SetCSGlobalVar(i, j, x) SetEnumCSGlobalVar(i, j, x)
#define SetCSGlobalArrayVar(i, j, k, x) SetEnumCSGlobalArrayVar(i, j, k, x)
#define GetCSGlobalVar(i, j) GetEnumCSGlobalVar(i, j)
#define GetCSGlobalArrayVar(i, j, k) GetEnumCSGlobalArrayVar(i, j, k)
#define SetPtrVar(i, x) SetEnumPtrVar(i, x)
#define SetPtrArrayVar(i, j, x) SetEnumPtrArrayVar(i, j, x)
#define GetPtrVar(i) GetEnumPtrVar(i)
#define GetPtrArrayVar(i, j) GetEnumPtrArrayVar(i, j)
// end of #ifdef _PPScriptMode_
#else
#ifdef _EnumMode_
enum globalP {_globalP_=-1};
enum globalParray {_globalParray_=-1};
enum csglobalQ {_csglobalQ_=-1};
enum csglobalQarray {_csglobalQarray_=-1};
enum ptrM {_ptrM_=-1};
enum ptrMarray {_ptrMarray_=-1};
void SetEnumGlobalVar(enum globalP var, double data)
{
pshm->P[var] = data;
}
double GetEnumGlobalVar(enum globalP var)
{
return pshm->P[var];
}
void SetEnumGlobalArrayVar(enum globalParray var, unsigned index, double data)
{
pshm->P[(var + index)%MAX_P] = data;
}
double GetEnumGlobalArrayVar(enum globalParray var, unsigned index)
{
return pshm->P[(var + index)%MAX_P];
}
void SetEnumCSGlobalVar(enum csglobalQ var, unsigned cs, double data)
{
pshm->Coord[cs % MAX_COORDS].Q[var] = data;
}
double GetEnumCSGlobalVar(enum csglobalQ var, unsigned cs)
{
return pshm->Coord[cs % MAX_COORDS].Q[var];
}
void SetEnumCSGlobalArrayVar(enum csglobalQarray var, unsigned index, unsigned cs, double data)
{
pshm->Coord[cs % MAX_COORDS].Q[(var + index)%MAX_Q] = data;
}
double GetEnumCSGlobalArrayVar(enum csglobalQarray var, unsigned index, unsigned cs)
{
return pshm->Coord[cs % MAX_COORDS].Q[(var + index)%MAX_Q];
}
void SetEnumPtrVar(enum ptrM var, double data)
{
im_write(pshm->Mdef + var, data, &pshm->Ldata);
}
double GetEnumPtrVar(enum ptrM var)
{
return im_read(pshm->Mdef + var, &pshm->Ldata);
}
void SetEnumPtrArrayVar(enum ptrMarray var, unsigned index, double data)
{
im_write(pshm->Mdef + ((var + index)%MAX_M), data, &pshm->Ldata);
}
double GetEnumPtrArrayVar(enum ptrMarray var, unsigned index)
{
return im_read(pshm->Mdef + ((var + index)%MAX_M), &pshm->Ldata);
}
#define SetGlobalVar(i, x) SetEnumGlobalVar(i, x)
#define SetGlobalArrayVar(i, j, x) SetEnumGlobalArrayVar(i, j, x)
#define GetGlobalVar(i) GetEnumGlobalVar(i)
#define GetGlobalArrayVar(i, j) GetEnumGlobalArrayVar(i, j)
#define SetCSGlobalVar(i, j, x) SetEnumCSGlobalVar(i, j, x)
#define SetCSGlobalArrayVar(i, j, k, x) SetEnumCSGlobalArrayVar(i, j, k, x)
#define GetCSGlobalVar(i, j) GetEnumCSGlobalVar(i, j)
#define GetCSGlobalArrayVar(i, j, k) GetEnumCSGlobalArrayVar(i, j, k)
#define SetPtrVar(i, x) SetEnumPtrVar(i, x)
#define SetPtrArrayVar(i, j, x) SetEnumPtrArrayVar(i, j, x)
#define GetPtrVar(i) GetEnumPtrVar(i)
#define GetPtrArrayVar(i, j) GetEnumPtrArrayVar(i, j)
// end of #ifdef _EnumMode_
#else
// ***** Standard default mode *****
#endif
#endif
//Kinematic defines for CfromScript
#define FWD_KIN 0
#define INV_KIN 1
#define RT_PLC 2
#define BG_PLC 3
#define RT_PROG 4
#define KinPosMotor L
#define KinVelMotor R
#define KinEnaAxisA 0x1
#define KinPosAxisA C[0]
#define KinVelAxisA C[32]
#define KinEnaAxisB 0x2
#define KinPosAxisB C[1]
#define KinVelAxisB C[33]
#define KinEnaAxisC 0x4
#define KinPosAxisC C[2]
#define KinVelAxisC C[34]
#define KinEnaAxisU 0x8
#define KinPosAxisU C[3]
#define KinVelAxisU C[35]
#define KinEnaAxisV 0x10
#define KinPosAxisV C[4]
#define KinVelAxisV C[36]
#define KinEnaAxisW 0x20
#define KinPosAxisW C[5]
#define KinVelAxisW C[37]
#define KinEnaAxisX 0x40
#define KinPosAxisX C[6]
#define KinVelAxisX C[38]
#define KinEnaAxisY 0x80
#define KinPosAxisY C[7]
#define KinVelAxisY C[39]
#define KinEnaAxisZ 0x100
#define KinPosAxisZ C[8]
#define KinVelAxisZ C[40]
#define KinEnaAxisAA 0x200
#define KinPosAxisAA C[9]
#define KinVelAxisAA C[41]
#define KinEnaAxisBB 0x400
#define KinPosAxisBB C[10]
#define KinVelAxisBB C[42]
#define KinEnaAxisCC 0x800
#define KinPosAxisCC C[11]
#define KinVelAxisCC C[43]
#define KinEnaAxisDD 0x1000
#define KinPosAxisDD C[12]
#define KinVelAxisDD C[44]
#define KinEnaAxisEE 0x2000
#define KinPosAxisEE C[13]
#define KinVelAxisEE C[45]
#define KinEnaAxisFF 0x4000
#define KinPosAxisFF C[14]
#define KinVelAxisFF C[46]
#define KinEnaAxisGG 0x8000
#define KinPosAxisGG C[15]
#define KinVelAxisGG C[47]
#define KinEnaAxisHH 0x10000
#define KinPosAxisHH C[16]
#define KinVelAxisHH C[48]
#define KinEnaAxisLL 0x20000
#define KinPosAxisLL C[17]
#define KinVelAxisLL C[49]
#define KinEnaAxisMM 0x40000
#define KinPosAxisMM C[18]
#define KinVelAxisMM C[50]
#define KinEnaAxisNN 0x80000
#define KinPosAxisNN C[19]
#define KinVelAxisNN C[51]
#define KinEnaAxisOO 0x100000
#define KinPosAxisOO C[20]
#define KinVelAxisOO C[52]
#define KinEnaAxisPP 0x200000
#define KinPosAxisPP C[21]
#define KinVelAxisPP C[53]
#define KinEnaAxisQQ 0x400000
#define KinPosAxisQQ C[22]
#define KinVelAxisQQ C[54]
#define KinEnaAxisRR 0x800000
#define KinPosAxisRR C[23]
#define KinVelAxisRR C[55]
#define KinEnaAxisSS 0x1000000
#define KinPosAxisSS C[24]
#define KinVelAxisSS C[56]
#define KinEnaAxisTT 0x2000000
#define KinPosAxisTT C[25]
#define KinVelAxisTT C[57]
#define KinEnaAxisUU 0x4000000
#define KinPosAxisUU C[26]
#define KinVelAxisUU C[58]
#define KinEnaAxisVV 0x8000000
#define KinPosAxisVV C[27]
#define KinVelAxisVV C[59]
#define KinEnaAxisWW 0x10000000
#define KinPosAxisWW C[28]
#define KinVelAxisWW C[60]
#define KinEnaAxisXX 0x20000000
#define KinPosAxisXX C[29]
#define KinVelAxisXX C[61]
#define KinEnaAxisYY 0x40000000
#define KinPosAxisYY C[30]
#define KinVelAxisYY C[62]
#define KinEnaAxisZZ 0x80000000
#define KinPosAxisZZ C[31]
#define KinVelAxisZZ C[63]
#define KinAxisUsed D[0]
#define KinVelEna D[0]
#endif //_PP_PROJ_H_