示例#1
0
        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));
        }