PACSystems C Toolkit Input/Output Parameter Array Access Example ka26N00000001yRQAQ | Emerson Customer Center

PACSystems C Toolkit Input/Output Parameter Array Access Example

C Programming of the PACSystems Controllers includes a main function named GEFMain.  Input and Output parameters can be passed to the GEFMain function when called from Ladder, ST, ILS, or Function Block Diagram.  Parameters are passed to C Blocks by address, therefore your C code could operate using pointer manipulation.  However, this is not a recommended best practice as it is error prone and may result in crashing the PLC if a pointer value is not correct and causes overrun of the variable storage memory.  As a best practice one should define the GEFMain input/output parameters as an array of pointers inside the C program, thus allowing use of the array subscript within the C program.  One such example is seen below:

//********************  Technical Support April 2022  ********************
// This program is the source code used to create a PLC C Executable Program Block for the PACSystems products,
// when compiled using the PACSystems C Toolkit GNU compiler command:
// compileCPACRX <file name>
// Where <file name> is the C Source file name with no file extension, as documented in GFK-2259.
// This example includes the standard header files needed for input/output and the custom PLC C Functions/Macros
// and Data Types available in the PACSystems Controllers as a generally accepted starting point.
// Include necessary header files

#include <stdio.h>
#include <PACRXPlc.h>
#include <ctkPLCUtil.h>

// Define the function GEFMain as needed in all cases.  In this case GEFMain is a Funtion that will return a 
// 32 bit PLC Type Integer and requires two input parameter pointers X1, and Y1, where X1 is an Input
// parameter and Y1 is an Output parameter pointer from the PLC Calling Logic.  Note that ALL C Block
// parameters are passed in and out as pointers.
T_INT32 GefMain (X1, Y1)

// Declare GEFMain Input Parameter Data Types
T_REAL32 X1[4]; //X1 - as an array of 4 PLC Type T_REAL32
T_REAL32 Y1[4]; //Y1 - as an array of 4 PLC T_REAL32
// Note that the above could optionally be combined into a single line as below: 
// T_INT32 GefMain (T_INT32 X1[4], T_INT32 Y1[4])

//Move Input Array X1[] to Output Array Y1[], 1 element at a time
// Return the execution ok status to drive the PLC function OK output high upon execution completion

See below screen shot for details about the ladder call and matching parameter definitions.  Notice that the PLC Ladder Variable Name does not need to match the C variable names as the C variable simply inherits the PLC Ladder variable address.  Also note that the Input and Output parameter variables are defined as Real Arrays of Length 4 to match the C block definition inside GEFMain.  This is important as a mismatch may also crash the PLC due to the C reaching beyond the defined Ladder Variable Length.
Pass Array C Block Call

There are many small examples in the PACSystems C Toolkit manual, GFK-2259.

See PACSystems C Toolkit - Landing Page for Documentation, the various Compilers, informational articles, and programming examples.
PACSystems C Toolkit - Landing Page
  • Attached Files

  • passarrays.gefElf

    Posted: 7/6/2022

    PACSystems Compiled C Program for CPE400/CPL410 to be imported to your PME project.. Note that each CPU family has a different compiler. See PACSystems C Toolkit - Landing Page, Article ID:000053523, for the various compilers, other articles, documentation and examples.