User Manual

250 Appendix D – i.LON SmartServer Software License Agreement
void CUFPTfpmTempController::Initialize()]
{]
// Determine FB index by looking at one of the NVs name, [index]
char * nv_name =
(char *)nviTemp.GetDpPropertyAsString(FPM::Dp::cfgUCPTname);
// get NV name
// Get FB index number from name
char * tmp_name;
tmp_name = strtok(nv_name,"[");
tmp_name = strtok(NULL,"]");
iFbNumber = strtol(tmp_name, NULL,10); // convert String to int
printf("UFPTfpmTempController[%i]::Initialize() \n",*iFbNumber);
//enter comment in work routine to indicate when nviTemp is changed
void CUFPTfpmTempController::work()
{
if(Changed(nviTemp))
{
printf("UFPTfpmTempController[%i]::Work()- nviTemp =
*iFbNumber, *nviTemp);
}
}
42. What is the difference between Local and Global FPM variables?
Local variables are defined and used differently then global variables.
FPM local variables are local to a FB instance.
o NVs and CPs are always local variables.
o A local integer variable named iFbNumber would be defined as:
DECLARE_FB_INSTANCE_LOCAL(int, iFbNumber); // local variable
Each FB instance will have its own iFbNumber that only it can read or write.
FPM global variables are accessible by all FB instances.
o All FB instances for a FPM can read and write to this variable.
o FPM global variables are defined as normal C/CC+ variables and are used by all FB
instances of the FPM. A global integer variable named iCount would be defined as:
int iCount; // global variable
You should use local variables whenever the data is FB instance related (e.g., FB instance index
number, state information, timer information).
Always design your FPM assuming that it will be used with multiple FBs.
If you see erratic behavior from a FB, this may mean that you are using a global variable when
you should be using a local variable.
See the Echelon Knowledge Base web site for examples.
43. Can a FPM driver have NVs and CPs?