public void SendCyclicData(PhysicalAddress destination, UInt16 frameID, UInt16 cycleCounter, byte[] userData)
        {
            Trace.WriteLine("Sending cyclic data", null);

            MemoryStream mem = new MemoryStream();

            //ethernet
            Ethernet.Encode(mem, destination, adapter.MacAddress, (Ethernet.Type) 0x8892);

            //Profinet Real Time
            RT.EncodeFrameId(mem, (RT.FrameIds)frameID);

            //user data
            if (userData == null)
            {
                userData = new byte[40];
            }
            if (userData.Length < 40)
            {
                Array.Resize <byte>(ref userData, 40);
            }
            mem.Write(userData, 0, userData.Length);

            //RT footer
            RT.EncodeRTCStatus(mem, cycleCounter, RT.DataStatus.DataItemValid |
                               RT.DataStatus.State_Primary |
                               RT.DataStatus.ProviderState_Run |
                               RT.DataStatus.StationProblemIndicator_Normal,
                               RT.TransferStatus.OK);

            //Send
            Send(mem);
        }