Ejemplo n.º 1
0
        public Task <SaveResult> SendSignalRequest(ICaptureDevice adapter, string macAddress)
        {
            var disposables = new CompositeDisposable();
            var transport   = new ProfinetEthernetTransport(adapter);

            transport.Open();
            transport.AddDisposableTo(disposables);


            try
            {
                System.Net.NetworkInformation.PhysicalAddress deviceAddress = System.Net.NetworkInformation.PhysicalAddress.Parse(macAddress);
                DCP.BlockErrors err = transport.SendSetSignalRequest(deviceAddress, timeoutInMilliseconds, retries);
                if (err != DCP.BlockErrors.NoError)
                {
                    return(Task.FromResult(new SaveResult(false, err.ToString())));
                }

                return(Task.FromResult(new SaveResult(true, err.ToString())));
            }
            catch (Exception e)
            {
                return(Task.FromResult(new SaveResult(false, e.Message)));
            }
            finally
            {
                disposables.Dispose();
            }
        }
        public DCP.BlockErrors EndSetRequest(IAsyncResult result, int timeoutMs)
        {
            ProfinetAsyncDcpResult r = (ProfinetAsyncDcpResult)result;

            if (result.AsyncWaitHandle.WaitOne(timeoutMs))
            {
                DCP.BlockErrors ret = r.Result.ContainsKey(DCP.BlockOptions.Control_Response) ? ((DCP.ResponseStatus)r.Result[DCP.BlockOptions.Control_Response]).Error : DCP.BlockErrors.NoError;
                r.Dispose();
                return(ret);
            }
            else
            {
                r.Dispose();
                throw new TimeoutException("No response received");
            }
        }
Ejemplo n.º 3
0
        public Task <SaveResult> SendSettings(ICaptureDevice adapter, string macAddress, Device newSettings, bool permanent)
        {
            var disposables = new CompositeDisposable();
            var transport   = new ProfinetEthernetTransport(adapter);

            transport.Open();
            transport.AddDisposableTo(disposables);


            try
            {
                System.Net.NetworkInformation.PhysicalAddress deviceAddress = System.Net.NetworkInformation.PhysicalAddress.Parse(macAddress);

                DCP.BlockErrors err = transport.SendSetNameRequest(deviceAddress, timeoutInMilliseconds, retries, newSettings.Name, permanent);
                if (err != DCP.BlockErrors.NoError)
                {
                    return(Task.FromResult(new SaveResult(false, err.ToString())));
                }

                System.Net.IPAddress ip      = System.Net.IPAddress.Parse(newSettings.IP);
                System.Net.IPAddress subnet  = System.Net.IPAddress.Parse(newSettings.SubnetMask);
                System.Net.IPAddress gateway = System.Net.IPAddress.Parse(newSettings.Gateway);
                err = transport.SendSetIpRequest(deviceAddress, timeoutInMilliseconds, retries, ip, subnet, gateway, permanent);
                if (err != DCP.BlockErrors.NoError)
                {
                    return(Task.FromResult(new SaveResult(false, err.ToString())));
                }

                return(Task.FromResult(new SaveResult(true, err.ToString())));
            }
            catch (Exception e)
            {
                return(Task.FromResult(new SaveResult(false, e.Message)));
            }
            finally
            {
                disposables.Dispose();
            }
        }
        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);
        }