RecordParam from C++ does not work with IOL Master

Dear community,
I have probably found a bug in Arp::Io::ProfinetStack::Controller::Services::RecordParam Class.
I use the RecordParam class to read/write different IO modules and their parameters.
This works also so far… Unfortunately not with the IOL masters (AXL F IOL8 and AXL SE IOL4).
I use with the RecordParam NOT the ID (knotenid) but only Devicename / Slot / Subslot to read or write an index. Here is an excerpt from my code:
case PnRd:
{
ProfinetStack::Controller::Services::RecordParam recordParam = ProfinetStack::Controller::Services::RecordParam();
recordParam.Id = 0;
recordParam.DeviceName = this->bcdProfinetId;
recordParam.Slot = this->ippData.Iod.Slot;
recordParam.Subslot = this->ippData.Iod.SubSlot + 1;
recordParam.Index = this->ippData.Iod.Index;
recordParam.Length = 256;
this->readData.clear();

if (recordParam.Index <= 0x77FF || this->ippData.Iod.Slot == 0) // If Index to write is lower than 0x77FF the PN BK Tunnel Objekt is not used
{
this->readRecordResult = this->profinetAcyclicService->RecordRead(recordParam, this->readData);

if (!this->readRecordResult.ServiceDone ||
this->readRecordResult.ErrorCode != 0 || this->readRecordResult.ErrorDecode != 0 ||
this->readRecordResult.ErrorCode1 != 0 || this->readRecordResult.ErrorCode2 != 0)
{
this->ippData.Length = 4;

this->ippData.Data[0] = this->readRecordResult.ErrorCode;
this->ippData.Data[1] = this->readRecordResult.ErrorDecode;
this->ippData.Data[2] = this->readRecordResult.ErrorCode1;
this->ippData.Data[3] = this->readRecordResult.ErrorCode2;

this->ippData.Error = true;
this->ippData.Busy = false;
this->ippData.Done = false;

this->state = Error;
}
else
{
this->ippData.Length = this->readData.size();
std::copy_n(std::begin(this->readData), this->ippData.Length, this->ippData.Data);

this->ippData.Error = false;
this->ippData.Busy = false;
this->ippData.Done = true;

this->state = Okay;
}
}
else
{
// PN Tunnel
recordParam.Index = 0x7800; // Tunnel Objekt
std::vector pdiTunnel{};
pdiTunnel.push_back(0x02); // 01 == Write PDI // 02 == Read PDI
pdiTunnel.push_back(this->ippData.Iod.Index >> 8); // Index to write over Tunnel
pdiTunnel.push_back(this->ippData.Iod.Index); // Index to write over Tunnel
pdiTunnel.push_back(this->ippData.Iod.SubIndex); // Subindex to write over Tunnel
recordParam.Length = 4;

this->writeRecordResult = this->profinetAcyclicService->RecordWrite(recordParam, pdiTunnel);

if (!this->writeRecordResult.ServiceDone ||
this->writeRecordResult.ErrorCode != 0 || this->writeRecordResult.ErrorDecode != 0 ||
this->writeRecordResult.ErrorCode1 != 0 || this->writeRecordResult.ErrorCode2 != 0)
{
this->ippData.Length = 4;

this->ippData.Data[0] = this->writeRecordResult.ErrorCode;
this->ippData.Data[1] = this->writeRecordResult.ErrorDecode;
this->ippData.Data[2] = this->writeRecordResult.ErrorCode1;
this->ippData.Data[3] = this->writeRecordResult.ErrorCode2;

this->ippData.Error = true;
this->ippData.Busy = false;
this->ippData.Done = false;

this->state = Error;
}
else
{
recordParam.Length = 256;
this->readRecordResult = this->profinetAcyclicService->RecordRead(recordParam, this->readData);
if (!this->readRecordResult.ServiceDone ||
this->readRecordResult.ErrorCode != 0 || this->readRecordResult.ErrorDecode != 0 ||
this->readRecordResult.ErrorCode1 != 0 || this->readRecordResult.ErrorCode2 != 0)
{
this->ippData.Length = 4;

this->ippData.Data[0] = this->readRecordResult.ErrorCode;
this->ippData.Data[1] = this->readRecordResult.ErrorDecode;
this->ippData.Data[2] = this->readRecordResult.ErrorCode1;
this->ippData.Data[3] = this->readRecordResult.ErrorCode2;

this->ippData.Error = true;
this->ippData.Busy = false;
this->ippData.Done = false;

this->state = Error;
}
else
{
this->ippData.Length = this->readData.size();
std::copy_n(std::begin(this->readData), this->ippData.Length, this->ippData.Data);

this->ippData.Error = false;
this->ippData.Busy = false;
this->ippData.Done = true;

this->state = Okay;
}
}
}
break;
}

I assume that there is something wrong with the calculation of the nodeID over slot and subslot.
If I e.g. read the object 0x0007 (Device Name) at an AXL F DO 16/3 module it arrives correctly. (Slot = 1 / Subslot=0 / Index = 0x0007)
If I try the same with an IOL Master (Slot = 2 / Subslot=0 / Index = 0x0007)
I get a negative response.
If I test the node id directly then I get a correct answer back.
I hope you can help me further…

Greeting
Thomas Schmidt