Ejemplo n.º 1
0
        private void m_adapter_OnProfinetArrival(ConnectionInfoEthernet sender, Stream stream)
        {
            RT.FrameIds frame_id;

            //Real Time
            RT.DecodeFrameId(stream, out frame_id);
            if (frame_id == RT.FrameIds.DCP_Identify_ResPDU || frame_id == RT.FrameIds.DCP_Identify_ReqPDU || frame_id == RT.FrameIds.DCP_Get_Set_PDU || frame_id == RT.FrameIds.DCP_Hello_ReqPDU)
            {
                DCP.ServiceIds service_id;
                uint           xid;
                ushort         response_delay_factor;
                ushort         dcp_data_length;
                DCP.DecodeHeader(stream, out service_id, out xid, out response_delay_factor, out dcp_data_length);
                Dictionary <DCP.BlockOptions, object> blocks;
                DCP.DecodeAllBlocks(stream, dcp_data_length, out blocks);
                if (OnDcpMessage != null)
                {
                    OnDcpMessage(sender, service_id, xid, response_delay_factor, blocks);
                }
            }
            else if (frame_id == RT.FrameIds.PTCP_DelayReqPDU)
            {
                //ignore this for now
            }
            else if (frame_id >= RT.FrameIds.RTC_Start && frame_id <= RT.FrameIds.RTC_End)
            {
                long data_pos = stream.Position;
                stream.Position = stream.Length - 4;
                UInt16            CycleCounter;
                RT.DataStatus     DataStatus;
                RT.TransferStatus TransferStatus;
                RT.DecodeRTCStatus(stream, out CycleCounter, out DataStatus, out TransferStatus);
                stream.Position = data_pos;
                if (OnCyclicMessage != null)
                {
                    OnCyclicMessage(sender, CycleCounter, DataStatus, TransferStatus, stream, (int)(stream.Length - data_pos - 4));
                }
            }
            else if (frame_id == RT.FrameIds.Alarm_Low || frame_id == RT.FrameIds.Alarm_High)
            {
                UInt16      AlarmDestinationEndpoint;
                UInt16      AlarmSourceEndpoint;
                RT.PDUTypes PDUType;
                RT.AddFlags AddFlags;
                UInt16      SendSeqNum;
                UInt16      AckSeqNum;
                UInt16      VarPartLen;
                RT.DecodeRTAHeader(stream, out AlarmDestinationEndpoint, out AlarmSourceEndpoint, out PDUType, out AddFlags, out SendSeqNum, out AckSeqNum, out VarPartLen);
                if (OnAcyclicMessage != null)
                {
                    OnAcyclicMessage(sender, AlarmDestinationEndpoint, AlarmSourceEndpoint, PDUType, AddFlags, SendSeqNum, AckSeqNum, VarPartLen, stream);
                }
            }
            else
            {
                Trace.TraceWarning("Unclassified RT message");
            }
        }
Ejemplo n.º 2
0
 private void conn_OnDcpMessage(ConnectionInfoEthernet sender, DCP.ServiceIds service_id, uint xid, ushort response_delay_factor, Dictionary <DCP.BlockOptions, object> blocks)
 {
     if (xid == m_xid)
     {
         Result      = blocks;
         IsCompleted = true;
         m_wait.Set();
     }
 }