Hallo zusammen,
ich scheitere momentan an einer ADS Kommunikation zwischen einem Beckhoff C6915-000 und einem Linux Rechner.
Der Linux-Rechner (ECU getauft) soll Lese- und Schreibzugriff auf ein paar definierte globale Variablen der SPS haben.
Die ECU wird mit einem C++ Code und die SPS mit TwinCat2 PLC programmiert.
Das unverständliche ist, dass wenn der C++ Code für Windows kompiliert wird die Software funktioniert.
D.h. wenn ich mit dem Rechner, der im selben Netzwerk wie die SPS und die ECU ist, das für Windows kompilierte Programm starte bekomme ich keinen Fehler.
Wenn ich den selben Code auf der ECU ausführe bekomme ich den ADC Return Code 0x745 bzw. 1861. (ADSERR_CLIENT_SYNCTIMEOUT- Timeout ist aufgetreten)
Ping habe ich per SSH von der ECU zu SPS und per Remotedesktopverbindung von der SPS zur ECU getestet.
ADS Route habe ich in die SPS eingetragen.
remotezugriff ams router.PNG
Die ADS Route der ECU wird per Software erstellt und sollte funktionieren, da sie keine Fehlermeldung ausgibt.
Error in meinem Logfile der ECU ist: ADSDevice.cpp e732c51 () 317 Error Create handle for '.ActPoseMC' failed with: 0x745
ActPoseMC (ohne Punkt davor) ist eine der globalen Variablen auf die zugegriffen werden soll.Die passende Software Stelle dazu:
Ich bin leider etwas ratlos und hoffe, dass ihr mir helfen könnt und ich nur eine Kleinigkeit wie z.B. eine ADS-Route vergessen habe.
Falls ich die Frage an die falsche Stelle im Forum gesetzt habe tut es mir leid.
Gruß
ich scheitere momentan an einer ADS Kommunikation zwischen einem Beckhoff C6915-000 und einem Linux Rechner.
Der Linux-Rechner (ECU getauft) soll Lese- und Schreibzugriff auf ein paar definierte globale Variablen der SPS haben.
Die ECU wird mit einem C++ Code und die SPS mit TwinCat2 PLC programmiert.
Das unverständliche ist, dass wenn der C++ Code für Windows kompiliert wird die Software funktioniert.
D.h. wenn ich mit dem Rechner, der im selben Netzwerk wie die SPS und die ECU ist, das für Windows kompilierte Programm starte bekomme ich keinen Fehler.
Wenn ich den selben Code auf der ECU ausführe bekomme ich den ADC Return Code 0x745 bzw. 1861. (ADSERR_CLIENT_SYNCTIMEOUT- Timeout ist aufgetreten)
Ping habe ich per SSH von der ECU zu SPS und per Remotedesktopverbindung von der SPS zur ECU getestet.
ADS Route habe ich in die SPS eingetragen.
remotezugriff ams router.PNG
Die ADS Route der ECU wird per Software erstellt und sollte funktionieren, da sie keine Fehlermeldung ausgibt.
Code:
// add local route to your EtherCAT Master
if (AdsAddRoute(m_remoteNetId, m_remoteIp.c_str()))
{
traceError("") << "Adding ADS route failed, did you specify valid addresses?\n";
return false;
}
// open a new ADS port
m_portId = AdsPortOpenEx();
if (!m_portId)
{
traceError("") << "Opening ADS port failed\n";
return false;
}
ActPoseMC (ohne Punkt davor) ist eine der globalen Variablen auf die zugegriffen werden soll.Die passende Software Stelle dazu:
Code:
traceDebug("") << "Creating handle for: " << handleName << std::endl;
const long handleStatus = AdsSyncReadWriteReqEx2(m_portId,
&m_remote,
ADSIGRP_SYM_HNDBYNAME,
0,
sizeof(*handlePtr),
handlePtr,
static_cast<uint32_t>(handleName.size()),
handleName.c_str(),
NULL);
if (handleStatus)
{
traceError("") << "Create handle for '" << handleName << "' failed with: 0x" << std::hex << handleStatus << '\n';
return false;
}
Falls ich die Frage an die falsche Stelle im Forum gesetzt habe tut es mir leid.
Gruß