-> Hier kostenlos registrieren
Guten Tag zusammen,
hab die Tage das erste mal mit ner SPS zu tun gehabt und mich mittels diesem Forum und libnodave (nochmals Danke Zottel :s12
reingearbeitet.
Ich hab hier jetzt aber Testcode, der zwar scheinbar funktioniert (bin mir nicht sicher, da ich die Werte in der SPS derzeit nicht überprüfen kann) - ich aber nicht weiß wieso
Es wird überprüft, ob in der SPS neue Daten anliegen (das Bit wird derzeit SPS-intern ständig verändert).
Im Baustein an Adresse 48.0 sitzt mein Boole'scher Wert, den ich auslesen will.
Hatte gedacht dass der Integer errorbyte einen normalen Integerwert haben sollte, aus diesem wollte ich mir dann per Modulo rausrechnen, ob das Bit 48.0 gesetzt ist.
Stattdessen krieg ich aber bei errorbyte entweder den Wert 1 oder 0 ...
Kann mir wer sagen wo mein Denkfehler ist?
Danke für Eure Hilfe!
mfG Andi
hab die Tage das erste mal mit ner SPS zu tun gehabt und mich mittels diesem Forum und libnodave (nochmals Danke Zottel :s12

Ich hab hier jetzt aber Testcode, der zwar scheinbar funktioniert (bin mir nicht sicher, da ich die Werte in der SPS derzeit nicht überprüfen kann) - ich aber nicht weiß wieso

Es wird überprüft, ob in der SPS neue Daten anliegen (das Bit wird derzeit SPS-intern ständig verändert).
Code:
public static bool checkNewData()
{
int port = 102;
string ipadress = ...
libnodave.daveOSserialType fds;
libnodave.daveInterface di;
libnodave.daveConnection dc;
int rack = 0;
int slot = 2;
int result = 0;
int errorbyte = 0;
bool error = false;
fds.rfd = libnodave.openSocket(port, ipadress);
fds.wfd = fds.rfd;
if (fds.rfd > 0)
{
di = new libnodave.daveInterface(fds, "IF1", 0, libnodave.daveProtoISOTCP, libnodave.daveSpeed187k);
di.setTimeout(1000000);
result = di.initAdapter();
if (result == 0)
{
dc = new libnodave.daveConnection(di, 0, rack, slot);
if (0 == dc.connectPLC())
{
result = dc.readBytes(libnodave.daveDB, 50, 48, 2, null);
if (result == 0)
{
errorbyte = dc.getS8At(0);
if (errorbyte % 2 == 0)
error = false;
else
error = true;
dc.disconnectPLC();
di.disconnectAdapter();
libnodave.closePort(fds.rfd);
return error;
}
else
Console.WriteLine("Fehler! " + result + ", weil " + libnodave.daveStrerror(result));
}
dc.disconnectPLC();
}
di.disconnectAdapter();
libnodave.closePort(fds.rfd);
}
else
{
return error;
}
return error;
}
Hatte gedacht dass der Integer errorbyte einen normalen Integerwert haben sollte, aus diesem wollte ich mir dann per Modulo rausrechnen, ob das Bit 48.0 gesetzt ist.
Stattdessen krieg ich aber bei errorbyte entweder den Wert 1 oder 0 ...
Kann mir wer sagen wo mein Denkfehler ist?

Danke für Eure Hilfe!
mfG Andi