This is a function to send a Real value to a Beckhoff PLC via the ADS
protocol. The functions utilised from the C API provided by Beckhoff are
AdsSyncReadWriteReq()
and AdsSyncWriteReq()
.
Errors are reported in the simulation tab.
The basic functioning is:
Step 1: Get the variable handle of the variable to be written on in the PLC;
Step 2: Write the value of sendData
to the variable in the PLC;
Step 3: Release handle of the variable in the PLC
Up to now the variable name of the input variable in the PLC is HARDCODED!
This means the variable name in the PLC
need to be exactly myInputVar
.
int funAdsSendReal(double sendData) { long nErr; // Variable for error handling ULONG lHdlVar; // Variable to save handle double *p_SendData = &sendData; // Pointer to variable which contains data to send // HARDCODED variable name in PLC char szVar []={"MAIN.myInputVar"}; // Specify variable which should be written unsigned long szVarLen = sizeof(szVar); // Step 1: Get variable handle nErr = AdsSyncReadWriteReq(pAddr, ADSIGRP_SYM_HNDBYNAME, 0x0, sizeof(lHdlVar), &lHdlVar, szVarLen, szVar); if (DEBUG_FLAG != 0) ModelicaFormatMessage("Function to fetch handle called!\n"); if (nErr != 0){ ModelicaFormatMessage("Error: Function to fetch handle failed: %i\n",nErr); return(1);} if (DEBUG_FLAG != 0) ModelicaFormatMessage("Function call to fetch handle sucessful!\n"); // Write the sendData to the PLC nErr = AdsSyncWriteReq(pAddr, ADSIGRP_SYM_VALBYHND,// IndexGroup lHdlVar,// IndexOffset sizeof(sendData),// Size of data to send p_SendData);// Data to be send if (DEBUG_FLAG != 0) ModelicaFormatMessage("Function to send data called!\n"); if (nErr != 0){ ModelicaFormatMessage("Error: Function to send data failed with code: %i\n",nErr); return(1);} if (DEBUG_FLAG != 0) ModelicaFormatMessage("Function to send data sucessful!\n"); //Release handle of PLC variable nErr = AdsSyncWriteReq(pAddr, ADSIGRP_SYM_RELEASEHND, 0, sizeof(lHdlVar), &lHdlVar); if (DEBUG_FLAG != 0) ModelicaFormatMessage("Function to release handle called!\n"); if (nErr != 0){ ModelicaFormatMessage("Error: Function to release handle failed with code: %i\n",nErr); return(1);} if (DEBUG_FLAG != 0) ModelicaFormatMessage("Function to release handle sucessful!\n"); if (DEBUG_FLAG != 0) ModelicaFormatMessage("Function to write by handle in total successful! the data send is:\n"); ModelicaFormatMessage("The send data is %f\n",sendData); return(0); }
function funAdsSendReal input Real sendData "Data to be send as a real"; input String varName "Variable Name in PLC"; output Integer ans "Error handling: 0 = OK!, 1 == Error, see simulation tab for info"; end funAdsSendReal;