-> Hier kostenlos registrieren
Hallo,
ich habe Probleme bei der Verbindung mit meiner C#-Software.
Die Software kommuniziert mit einer S7 CPU über ISOTCP, was grundsätzlich auch sehr gut funktioniert. Nun ist es so, dass es eine zweite, redundante CPU gibt. Bei einem Verbindungsabbruch zur CPU1 wird automatisch auf CPU2 umgeschaltet. Und wieder umgekehrt, falls CPU2 ausfällt.
Das ganze funktioniert in einer Testumgebung an einem Switch auch gut. Dort, wo die Software aber produktiv läuft, funktioniert diese Umschaltung nicht. Ich weiß nicht, wie das Netzwerk zwischen den CPUs aussieht.
Da ich aber davon ausgehen muss dass die CPUs erreichbar sind (über andere Tools nachzuvollziehen) und die Einstellungen für IP+ Rack+Slot passen, suche ich das Problem in meiner Software. Genaue Informationen zu IP Adressen und Einstellungen für Rack und Slot kann ich noch nicht nennen, aber erfahre ich die nächsten Tage.
Hat jemand Anregungen, wo ich das Problem suchen könnte?
Kann es sein, dass ich irgendwas mit libnodave falsch mache, anders/neu initialisieren müsste?
Mein Code sieht - auf's Wesentliche reduziert - so aus:
Kann ich da was besser machen?
Kann ich beim nächsten Test vor Ort irgendetwas ausprobieren oder loggen, um der Ursache näher zu kommen?
Update auf libnodave 0.8.5 habe ich vor - könnte sich da was verbessern?
Vielen Dank!
ich habe Probleme bei der Verbindung mit meiner C#-Software.
Die Software kommuniziert mit einer S7 CPU über ISOTCP, was grundsätzlich auch sehr gut funktioniert. Nun ist es so, dass es eine zweite, redundante CPU gibt. Bei einem Verbindungsabbruch zur CPU1 wird automatisch auf CPU2 umgeschaltet. Und wieder umgekehrt, falls CPU2 ausfällt.
Das ganze funktioniert in einer Testumgebung an einem Switch auch gut. Dort, wo die Software aber produktiv läuft, funktioniert diese Umschaltung nicht. Ich weiß nicht, wie das Netzwerk zwischen den CPUs aussieht.
Da ich aber davon ausgehen muss dass die CPUs erreichbar sind (über andere Tools nachzuvollziehen) und die Einstellungen für IP+ Rack+Slot passen, suche ich das Problem in meiner Software. Genaue Informationen zu IP Adressen und Einstellungen für Rack und Slot kann ich noch nicht nennen, aber erfahre ich die nächsten Tage.
Hat jemand Anregungen, wo ich das Problem suchen könnte?
Kann es sein, dass ich irgendwas mit libnodave falsch mache, anders/neu initialisieren müsste?
Mein Code sieht - auf's Wesentliche reduziert - so aus:
Code:
private int Connect()
{
int result = -1;
m_OsSerialType.rfd = libnodave.openSocket(102, m_ipAddr);
m_OsSerialType.wfd = m_OsSerialType.rfd;
if (m_OsSerialType.rfd > 0)
{
m_daveInterface = new libnodave.daveInterface(m_OsSerialType, "IF1", 0, libnodave.daveProtoISOTCP, libnodave.daveSpeed187k);
m_daveInterface.setTimeout(10000000); // µs
m_daveConnection = new libnodave.daveConnection(m_daveInterface, 0, m_rack, m_slot);
result = m_daveConnection.connectPLC();
}
return result;
}
private void Disconnect()
{
if( m_daveConnection != null )
{
m_daveConnection.disconnectPLC();
}
int result = libnodave.closeSocket( m_OsSerialType.rfd );
}
private void Process()
{
if (Connect() == 0)
{
}
else
{
Disconnect();
m_daveConnection = null;
}
if ( m_daveConnection == null )
{
SwitchCpu();
continue;
}
result = m_daveConnection.readManyBytes( libnodave.daveDB, 700, 0, 552, data.Data );
if( result != 0 )
{
// re-create connection on next loop
Disconnect();
m_daveConnection = null;
}
}
Kann ich da was besser machen?
Kann ich beim nächsten Test vor Ort irgendetwas ausprobieren oder loggen, um der Ursache näher zu kommen?
Update auf libnodave 0.8.5 habe ich vor - könnte sich da was verbessern?
Vielen Dank!
Zuletzt bearbeitet: