Knowledge Base Nr: 00199 ioserver.cpp - http://www.swe-kaiser.de

Downloads:

sendkey erweitert um IO-Server (Schreiben Relaiskarte und Wago)
sendkey pollt ob eine datei existiert und wenn ja wird diese
ausgelesen, aus der ersten zeile maske und wert extrahiert und
die entsprechenden bits gesetzt

  
#define IOOUTFILE "/tmp/ioout.dat"

// wenn das file IOOUTFILE existiert werden 2 ascii-integer-werte
// gelesen, als maske und wert interpretiert und auf die io ausgegeben
FILE* fp = fopen(IOOUTFILE, "rt");
if (fp)
{
char szLine[100] = {0};

fgets(szLine, sizeof(szLine), fp);
fclose(fp);
unlink(IOOUTFILE);

int nMask, nValue;
int nConv = sscanf(szLine, "%d %d", &nMask, &nValue);
if (nConv == 2)
{
static int g_nOldOutVal = 0;

int nNewValue = ((nValue & nMask) | (g_nOldOutVal & ~nMask)) & 0xffff;

printf("*** IO Output via file: <0x%04x> ***\n", nNewValue);

if (bUseWago)
{
int nAddr = 1;
int nWordCount = 1;
int nErr = g_modbus.Write(nAddr, (short*)&nNewValue, nWordCount);
}
else
{
g_dio.SetPort(nNewValue);
}

g_nOldOutVal = nNewValue;
}
else
{
printf("#### ERROR: IO Output failed: <%s> falsches format. (erste zeile: mask value)!\n", IOOUTFILE);
}
}