-> Hier kostenlos registrieren
hallo zusammen,
leider habe ich zu meinem problem keine passende antwort gefunden, daher dieser thread.
ich versuche derzeit meinem PC die kommunikation mit einer S7-300 beizubringen. ich programmieren hierzu Libnodave in C und verwende das ISO over TCP protokoll.
die kommunikation funktioniert soweit einwandfrei. ich kann ohne probleme die speicher auslesen bzw. die analogeingänge direkt auslesen.
hier erstmal mein quellcode:
ich greife hier direkt auf einen analogeingang zur spannungsmessung meiner S7-300 zu. klappt auch soweit wunderbar. es ist auch nichtmal nötig dass die SPS im Run-Modus ist. man kann auch im Stop-Modus direkt auf die analogeingänge zugreifen und die spannung bzw. den digitalen wert der spannung auslesen.
mein problem ist nun folgendes:
wenn ich meinen PC und die SPS einschalte, warte bis die SPS hochgefahren ist, ich mein programm gestartet hab, bekomme ich die fehlermeldung dass Libnodave den port zur SPS nicht öffnen konnte. der port der hier geöffnet werden soll ist 102.
ich habe versucht die kommunikation über den konsolenbefehl "netstat -an" nachzuvollziehen. dabei hat sich gezeigt das Libnodave versucht den Port zu öffnen indem er die "SYN_GESENDET" anfrage an die SPS schickt. dummerweise antwortet die SPS aber nicht mit einem ACK dadrauf.
wenn ich nun aber den simatic manger starte und mein SPS-programm nochmals auf die SPS lade, dann funktioniert auch die kommunikation mit Libnodave und der SPS problemlos. es scheint also dass der simatic manger irgendwie den port öffnen kann, aber Libnodave nicht.
hat schonmal jemand diese erfahrung gemacht bzw. weiß wie man dieses problem beheben kann?
also damit ich, auch ohne mein SPS-programm erneut aufzuspielen, eine verbindung direkt nach dem einschalten des PCs und der SPS mit Libnodave herstellen kann?
vielen dank schonmal im voraus
leider habe ich zu meinem problem keine passende antwort gefunden, daher dieser thread.
ich versuche derzeit meinem PC die kommunikation mit einer S7-300 beizubringen. ich programmieren hierzu Libnodave in C und verwende das ISO over TCP protokoll.
die kommunikation funktioniert soweit einwandfrei. ich kann ohne probleme die speicher auslesen bzw. die analogeingänge direkt auslesen.
hier erstmal mein quellcode:
Code:
void plc_readout(void)
{
int a, res;
char ip[] = "192.168.0.1";
daveInterface *di;
daveConnection *dc;
_daveOSserialType fds;
daveSetDebug(daveDebugPrintErrors);
fds.rfd = openSocket(102, ip);
fds.wfd = fds.rfd;
if(fds.rfd > 0)
{
// Init new connection
di = daveNewInterface(fds, "IF1", 0, daveProtoISOTCP, daveSpeed187k);
daveSetTimeout(di, 5000000);
dc = daveNewConnection(di, 2, 0, 2); // insert your rack and slot here
if(0 == daveConnectPLC(dc))
{
printf("Connected.\n");
res = daveReadBytes(dc, daveP, 0, 272, 2, NULL); // Read 2 bytes direct form analog input channel 0 (PEW272)
if(0 == res)
{
a = daveGetU16(dc); // Read 2 bytes direct form analog input channel 0 (PEW272)
printf("Analog Input Ch 0: %d\n", a);
} else {
printf("failed! (%d)\n", res);
}
printf("Finished.\n");
} else {
printf("Couldn't connect to PLC.\n");
}
} else {
printf("Couldn't open TCP port. \nPlease make sure a CP is connected and the IP address is ok.\n");
}
closeSocket(fds.rfd); // Close connection
}
mein problem ist nun folgendes:
wenn ich meinen PC und die SPS einschalte, warte bis die SPS hochgefahren ist, ich mein programm gestartet hab, bekomme ich die fehlermeldung dass Libnodave den port zur SPS nicht öffnen konnte. der port der hier geöffnet werden soll ist 102.
ich habe versucht die kommunikation über den konsolenbefehl "netstat -an" nachzuvollziehen. dabei hat sich gezeigt das Libnodave versucht den Port zu öffnen indem er die "SYN_GESENDET" anfrage an die SPS schickt. dummerweise antwortet die SPS aber nicht mit einem ACK dadrauf.
wenn ich nun aber den simatic manger starte und mein SPS-programm nochmals auf die SPS lade, dann funktioniert auch die kommunikation mit Libnodave und der SPS problemlos. es scheint also dass der simatic manger irgendwie den port öffnen kann, aber Libnodave nicht.
hat schonmal jemand diese erfahrung gemacht bzw. weiß wie man dieses problem beheben kann?
also damit ich, auch ohne mein SPS-programm erneut aufzuspielen, eine verbindung direkt nach dem einschalten des PCs und der SPS mit Libnodave herstellen kann?
vielen dank schonmal im voraus
Zuletzt bearbeitet: