1
0
mirror of https://github.com/netdata-be/libnodave synced 2025-10-13 00:42:50 +08:00
libnodave/simplified/testIBH.c
2012-06-01 10:15:12 +02:00

102 lines
2.8 KiB
C

/*
Simplified test and demo program for Libnodave, a free communication libray for Siemens S7.
**********************************************************************
* WARNING: This and other test programs overwrite data in your PLC. *
* DO NOT use it on PLC's when anything is connected to their outputs.*
* This is alpha software. Use entirely on your own risk. *
**********************************************************************
(C) Thomas Hergenhahn (thomas.hergenhahn@web.de) 2005.
This is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2, or (at your option)
any later version.
This is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with Libnodave; see the file COPYING. If not, write to
the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.
*/
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include "nodavesimple.h"
#include "openSocket.h"
int main(int argc, char **argv) {
int i, a,b,c,
initSuccess,
res;
float d;
daveInterface * di;
daveConnection * dc;
_daveOSserialType fds;
if (argc<2) {
printf("Usage: testIBH IP address.\n");
exit(-1);
}
daveSetDebug(daveDebugPrintErrors);
initSuccess=0;
fds.rfd=openSocket(1099, argv[1]);
fds.wfd=fds.rfd;
if (fds.rfd>0) {
di =daveNewInterface(fds, "IF1", 0, daveProtoMPI_IBH, daveSpeed187k);
daveSetTimeout(di,5000000);
for (i=0; i<3; i++) {
if (0==daveInitAdapter(di)) {
initSuccess=1;
break;
} else daveDisconnectAdapter(di);
}
if (!initSuccess) {
printf("Couldn't connect to Adapter!.\n Please try again. You may also try the option -2 for some adapters.\n");
return -3;
}
dc =daveNewConnection(di, 2, 0, 0);
printf("ConnectPLC\n");
if (0==daveConnectPLC(dc)) {
res=daveReadBytes(dc, daveFlags, 0, 0, 16,NULL);
if (res==0) {
a=daveGetS32(dc);
b=daveGetS32(dc);
c=daveGetS32(dc);
d=daveGetFloat(dc);
printf("PLC FD0: %d\n", a);
printf("PLC FD4: %d\n", b);
printf("PLC FD8: %d\n", c);
printf("PLC FD12: %f\n", d);
} else
printf("error %d=%s\n", res, daveStrerror(res));
printf("Now disconnecting\n");
daveDisconnectPLC(dc);
daveDisconnectAdapter(di);
return 0;
} else {
printf("Couldn't connect to PLC.\n");
daveDisconnectAdapter(di);
return -2;
}
} else {
printf("Couldn't open connection to %s\n",argv[1]);
return -1;
}
}
/*
Changes:
07/15/05 created this simplified program.
*/