public IAsyncResult BeginWriteRequest(IEnumerable <KeyValuePair <ProfinetIO.IODWriteReqHeader, byte[]> > values) { //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.Request, RPC.Flags1.Idempotent, 0, encoding, 0, destination_instance, RPC.UUID_IO_DeviceInterface, m_activity, 0, m_sequence_no++, RPC.Operations.Write, 0, 0, out body_length_position); RPC.EncodeNDRDataHeader(mem, encoding, 0, 0, 0, 0, 0, out NDRDataHeader_position); //Create IO Packet ProfinetIO.EncodeWriteMultipleRequest(mem, m_aruuid, values); //re-encode rpc lengths RPC.ReEncodeHeaderLength(mem, encoding, body_length_position); RPC.ReEncodeNDRDataHeaderLength(mem, encoding, NDRDataHeader_position, true); //send Trace.TraceInformation("Sending Write message"); return(new ProfinetAsyncRPCResult(this, mem)); }