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); }
public void SendSetResponse(PhysicalAddress destination, uint xid, DCP.BlockOptions option, DCP.BlockErrors status) { Trace.WriteLine("Sending Set " + option.ToString() + " response", null); MemoryStream mem = new MemoryStream(); //ethernet Ethernet.Encode(mem, destination, adapter.MacAddress, Ethernet.Type.VLanTaggedFrame); //VLAN VLAN.Encode(mem, VLAN.Priorities.Priority0, VLAN.Type.PN); //Profinet Real Time RT.EncodeFrameId(mem, RT.FrameIds.DCP_Get_Set_PDU); //Profinet DCP DCP.EncodeSetResponse(mem, xid, option, status); //Send Send(mem); }
public void SendIdentifyResponse(PhysicalAddress destination, uint xid, Dictionary <DCP.BlockOptions, object> blocks) { Trace.WriteLine("Sending identify response", null); MemoryStream mem = new MemoryStream(); //ethernet Ethernet.Encode(mem, destination, adapter.MacAddress, Ethernet.Type.VLanTaggedFrame); //VLAN VLAN.Encode(mem, VLAN.Priorities.Priority0, VLAN.Type.PN); //Profinet Real Time RT.EncodeFrameId(mem, RT.FrameIds.DCP_Identify_ResPDU); //Profinet DCP DCP.EncodeIdentifyResponse(mem, xid, blocks); //Send Send(mem); }
public IAsyncResult BeginGetRequest(PhysicalAddress destination, DCP.BlockOptions option) { Trace.WriteLine("Sending Get " + option.ToString() + " request", null); MemoryStream mem = new MemoryStream(); //ethernet Ethernet.Encode(mem, destination, adapter.MacAddress, Ethernet.Type.VLanTaggedFrame); //VLAN VLAN.Encode(mem, VLAN.Priorities.Priority0, VLAN.Type.PN); //Profinet Real Time RT.EncodeFrameId(mem, RT.FrameIds.DCP_Get_Set_PDU); //Profinet DCP UInt16 xid = ++lastXid; DCP.EncodeGetRequest(mem, xid, option); //start Async return(new ProfinetAsyncDcpResult(this, mem, xid)); }
public void SendIdentifyBroadcast() { Trace.WriteLine("Sending identify broadcast", null); MemoryStream mem = new MemoryStream(); //ethernet PhysicalAddress ethernetDestinationHwAddress = PhysicalAddress.Parse(RT.MulticastMACAdd_Identify_Address); Ethernet.Encode(mem, ethernetDestinationHwAddress, adapter.MacAddress, Ethernet.Type.VLanTaggedFrame); //VLAN VLAN.Encode(mem, VLAN.Priorities.Priority0, VLAN.Type.PN); //Profinet Real Time RT.EncodeFrameId(mem, RT.FrameIds.DCP_Identify_ReqPDU); //Profinet DCP DCP.EncodeIdentifyRequest(mem, ++lastXid); //Send Send(mem); }