public void ControlResponse(Guid activity, uint sequence_no, ProfinetIO.BlockTypes block_type, ProfinetIO.ControlCommands control) { //Create RPC packet long body_length_position; long NDRDataHeader_position; MemoryStream mem = new MemoryStream(); RPC.Encodings encoding = RPC.Encodings.ASCII | RPC.Encodings.LittleEndian | RPC.Encodings.IEEE_float; Guid destination_instance = RPC.GenerateObjectInstanceUUID(1, 0, m_device_id.DeviceId, m_device_id.VendorId); RPC.EncodeHeader(mem, RPC.PacketTypes.Response, RPC.Flags1.LastFragment | RPC.Flags1.NoFragmentAckRequested, 0, encoding, 0, destination_instance, RPC.UUID_IO_DeviceInterface, activity, 0, sequence_no, RPC.Operations.Control, 0, 0, out body_length_position); RPC.EncodeNDRDataHeader(mem, encoding, 0, 0, 0, 0, 0, out NDRDataHeader_position); //Create IO Packet ProfinetIO.ControlBlockConnect ctrl = new ProfinetIO.ControlBlockConnect(); ctrl.BlockType = block_type; ctrl.ARUUID = m_aruuid; ctrl.SessionKey = 1; ctrl.ControlCommand = control; ProfinetIO.EncodeControlResponse(mem, ctrl); //re-encode rpc lengths RPC.ReEncodeHeaderLength(mem, encoding, body_length_position); RPC.ReEncodeNDRDataHeaderLength(mem, encoding, NDRDataHeader_position, false); //send Trace.TraceInformation("Sending Control response"); SendResponse(mem); }