Я использую библиотеку из CodeSys для записи переменных в ПЛК с программой на C ++.
Вот как я пишу число в ПЛК:
void PLCconnection::WriteVariable(int a_value, int a_listPosition)
{
unsigned long ulStart;
PlcSymbolDesc *pSymbols;
unsigned long ulNumOfSymbols = 0;
int iNumOfVars = 28;
int i;
char **ppszVars = new char*[iNumOfVars];
for (i = 0; i < iNumOfVars; i++)
ppszVars[i] = new char[255];
long lResult = RESULT_FAILED;
lResult = pPLCHandler->GetAllItems(&pSymbols, &ulNumOfSymbols);
if (lResult == RESULT_OK)
{
strcpy(ppszVars[0], pSymbols[a_listPosition].pszName); //getting the variable name
//ppszVar;
/* Write variables value to check, if variables can be written */
unsigned char **ppbyValues = new unsigned char*[2];
ppbyValues[0] = (unsigned char *)new unsigned long;
*(unsigned long *)ppbyValues[0] = a_value;
ulStart = CAL_SysTimeGetMs();
if (pPLCHandler->SyncWriteVarsToPlc(ppszVars, 1, ppbyValues) == RESULT_OK)
{
//writing succeeded
}
else
{
//writing failed
}
delete ppbyValues[0];
delete[] ppbyValues;
}
else
{
// Couldn't retrieve symbols
}
for (i = 0; i < iNumOfVars; i++)
delete[] ppszVars[i];
delete[] ppszVars;
}
Теперь вместо того, чтобы давать int a_value
Я хочу отправить string
вместо.
Как я могу заставить этот код работать с string
?
Ниже вы можете найти некоторую информацию о методе SyncWriteVarsToPLC
:
Этот метод может использоваться для передачи списка значений переменных в ПЛК. Значения записываются непосредственно в ПЛК.
ppszSymbols: список указателей на имена переменных. Эти переменные будут записаны в ПЛК один раз.
ulNumOfSymbols: количество переменных в списке
ppbyValues: список указателей на значения переменных, которые должны быть записаны в ПЛК. Внимание: должно соответствовать списку указанных переменных!
Задача ещё не решена.
Других решений пока нет …