Esempio n. 1
0
    void SpawnFirstArcs()
    {
        for (int i = -2; i < 3; i++)
        {
            for (int j = 0; j < 5; j++)
            {
                ArcController arc = SpawnArc(new Vector3(i, j, 0), Random.Range(90, 190), (Direction)Random.Range(0, 2));

                arcs.Add(arc);
            }
        }
    }
Esempio n. 2
0
    public void MoveGrid(Vector3 direction, Vector3 destination)
    {
        if (direction.y == 0)
        {
            for (int i = -2; i < 3; i++)
            {
                ArcController arc = SpawnArc(new Vector3(destination.x + direction.x * removeDistX, destination.y + i, 0), Random.Range(RotationSpeedMin, RotationSpeedMax), (Direction)Random.Range(0, 2));
                arcs.Add(arc);
            }
        }
        else

        {
            for (int i = -2; i < 3; i++)
            {
                ArcController arc = SpawnArc(new Vector3(destination.x + i, destination.y + direction.y * removeDistY, 0), Random.Range(RotationSpeedMin, RotationSpeedMax), (Direction)Random.Range(0, 2));
                arcs.Add(arc);
            }
        }
    }
Esempio n. 3
0
        static void Main(string[] args)
        {
            ArcController arc = new ArcController();

            arc.GetArc();
            arc.WriteNodes();
            arc.OrderNodes();

            if (arc.isValid)
            {
                //arc.ShowGraphAfterOrder();
                arc.CaluclateExecutionTime();
                arc.CalculateDeadline();
                arc.CriticalPath();
                arc.ShowFinalGraph();
            }

            Console.WriteLine("Naciśnij dowolny klawisz aby zakończyć...");
            Console.ReadLine();
        }
Esempio n. 4
0
        private void applyACParameterFrom_To_(ArcController baseAC, IEnumerable <AbstractController> ACs)
        {
            var type       = baseAC.GetType();
            var propInfo   = type.GetProperties();
            var numProps   = propInfo.GetLength(0) - (typeof(ArcController)).GetProperties().GetLength(0);
            var baseValues = new object[numProps];

            for (var j = 0; j < numProps; j++)
            {
                baseValues[j] = propInfo[j].GetValue(baseAC, null);
            }

            foreach (ArcController a in ACs)
            {
                for (var j = 0; j < numProps; j++)
                {
                    propInfo[j].SetValue(a, baseValues[j], null);
                }
            }

            Update();
        }
Esempio n. 5
0
    void PurchaseK9Cooldown()
    {
        if ((currentWoolCost <= GameObject.FindGameObjectWithTag("Player").GetComponent <PlayerController>().woolTotal) && (currentWoolCost != -1))
        {
            ArcController ArcGun = GameObject.FindGameObjectWithTag("ArcGun").GetComponent <ArcController>();

            switch (ArcGun.FireRate)
            {
            case 0.75f:
                ArcGun.FireRate = 0.5f;
                break;

            case 0.5f:
                ArcGun.FireRate = 0.25f;
                break;

            case 0.25f:
                break;
            }

            GameObject.FindGameObjectWithTag("Player").GetComponent <PlayerController>().woolTotal -= currentWoolCost;
        }
    }
Esempio n. 6
0
    void PurchaseK9Damage()
    {
        if ((currentWoolCost <= GameObject.FindGameObjectWithTag("Player").GetComponent <PlayerController>().woolTotal) && (currentWoolCost != -1))
        {
            ArcController ArcGun = GameObject.FindGameObjectWithTag("ArcGun").GetComponent <ArcController>();

            switch (ArcGun.Damage)
            {
            case 2:
                ArcGun.Damage = 3;
                break;

            case 3:
                ArcGun.Damage = 4;
                break;

            case 4:
                break;
            }

            GameObject.FindGameObjectWithTag("Player").GetComponent <PlayerController>().woolTotal -= currentWoolCost;
        }
    }
Esempio n. 7
0
        static void Main(string[] args)
        {
            Logger.Disabled = false;

            ThreadPool.SetMaxThreads(3, 3);

            var cfg = ConverterConfigFactory.Get();

            ConverterConfigFactory.Save(cfg);

            dbconrtoller = new ArcController(cfg.ArcFileName)
            {
                AllowMessageLogging = cfg.AllowMessageLogging,
                SavePeriod          = cfg.SavePeriod,
                MaxDataLimit        = cfg.MaxLimit,
                Hyst = cfg.Hyst
            };
            //dbconrtoller.Start();

            var cts  = new CancellationTokenSource();
            var wCts = new CancellationTokenSource();

            var connnectionWfqydb = StreamSourceFactory.GetStreamSourceConfig(cfg.WFQYDBConnection).Get();

            var wFQYDBServer = new WFQYDBServer(
                connnectionWfqydb,
                new byte[] { 1, 0, 0, 0 },
                wCts.Token)
            {
                UpdatePeriod = new TimeSpan(0, 0, cfg.PeriodSec),
                CanA0        = cfg?.AllowedCommands.Contains <byte>(0xA0) ?? false,
                CanA1        = cfg?.AllowedCommands.Contains <byte>(0xA1) ?? false,
                CanA2        = cfg?.AllowedCommands.Contains <byte>(0xA2) ?? false,
                CanA3        = cfg?.AllowedCommands.Contains <byte>(0xA3) ?? false,
            };

            wFQYDBServer.PropertyChanged += WFQYDBServer_PropertyChanged;

            var modbusSvr = new ModbusSvr(
                cfg.ModbusSlaveTcpPort,
                cfg.ModbusSlaveRtuOverTcpPort,
                wFQYDBServer)
            {
                ArcController = dbconrtoller,
                //UpdatePeriod = new TimeSpan(cfg.PeriodSec * 10_000_000)
            };

            modbusSvr.Start();

            System.Threading.ThreadPool.GetMaxThreads(out int workerTh, out int completionTh);
            Logger.Info($"workerTh: {workerTh} completionTh: {completionTh}");

            if (args.Contains("TUI"))
            {
                Logger.Disabled = true;
                MainViewModel mvm = new MainViewModel();
                //mvm.ConnnectionWfqydb = connnectionWfqydb;
                mvm.WFQYDBServer = wFQYDBServer;
                mvm.ModbusSvr    = modbusSvr;
                Window window = (Window)ConsoleApplication
                                .LoadFromXaml("WfqydbModbusGateway.View.MainWin.xml", mvm);
                WindowsHost windowsHost = new WindowsHost {
                    Name = "temp"
                };
                windowsHost.Show(window);
                ConsoleApplication.Instance.Run(windowsHost);
            }
            else
            {
                int i = 0;

                while (!cts.Token.IsCancellationRequested)
                {
                    Thread.Sleep(200);
                    //if (wFQYDBServer.NeedToRestart)
                    //{
                    //    // restart services
                    //    Logger.Warn("Restarting services");
                    //    wCts.Cancel();
                    //    wCts = new CancellationTokenSource();
                    //    wFQYDBServer.PropertyChanged -= WFQYDBServer_PropertyChanged;
                    //    wFQYDBServer = new WFQYDBServer(connnectionWfqydb, new byte[] { 1, 0, 0, 0 }, cts.Token);
                    //    modbusSvr.WfqydbServer = wFQYDBServer;
                    //    GC.Collect();
                    //    wFQYDBServer.PropertyChanged += WFQYDBServer_PropertyChanged;
                    //}
                }
                wCts.Cancel();
                //Task.Delay(1000, cts.Token).Wait();
            }
            cts.Dispose();
            wCts.Dispose();
            dbconrtoller.Stop();
        }//Main
Esempio n. 8
0
        protected override async Task ServiceTaskAsync(CancellationToken cancellationToken)
        {
            ArcController?.NewLogMessage(LogCode.ModbusStarting);

            Logger.Info("begin");

            var tcpListener = new TcpListener(IPAddress.Any, TcpPort);
            var rtuListener = new TcpListener(IPAddress.Any, RtuOverTcpPort);

            Logger.Info("starting listener");

            tcpListener.Start();
            rtuListener.Start();

            Logger.Info("generating slave net");

            var factory = new ModbusFactory();

            var tcpNetwork = factory.CreateSlaveNetwork(tcpListener);
            var rtuNetwork = factory.CreateRtuOverTcpSlaveNetwork(rtuListener);

            var slaveTcp = factory.CreateSlave(1);
            var slaveRtu = factory.CreateSlave(1, slaveTcp.DataStore);

            tcpNetwork.AddSlave(slaveTcp);
            rtuNetwork.AddSlave(slaveRtu);

            iRegisters = slaveTcp.DataStore.InputRegisters;
            hRegisters = slaveTcp.DataStore.HoldingRegisters;

            WfqydbServer.PropertyChanged += Wf_PropertyChanged;

            var timeOfStart = DateTime.Now.ToUnixTimestamp();

            ushort[] timeOfStartBuffer =
            {
                (ushort)(timeOfStart >> 16),
                (ushort)(timeOfStart),
            };

            var ver = System.Reflection.Assembly.GetExecutingAssembly().GetName().Version;

            ushort[] verBuffer =
            {
                (ushort)ver.Major,
                (ushort)ver.Minor,
                (ushort)ver.Build,
            };

            byte[] myAddress = { 0x01, 0x00, 0x00, 0x00, };

            iRegisters.WritePoints(0, verBuffer);
            iRegisters.WritePoints(3, timeOfStartBuffer);

            Logger.Info("starting slave net. step1");

            var tcpListenerTask = tcpNetwork.ListenAsync(cancellationToken);
            var rtuListenerTask = rtuNetwork.ListenAsync(cancellationToken);

            Logger.Info($"starting slave net. step2 {WfqydbServer.ToString()}");

            ArcController?.NewLogMessage(LogCode.ModbusStarted);
            ArcController?.NewLogMessage(LogCode.WFQYDBConnecting);

            //await WfqydbServer.PullBroadcastQuery().ConfigureAwait(false);
            //WfqydbServer.PullBroadcastQuery();
            ArcController?.NewLogMessage(LogCode.WFQYDBConnected);

            const int waitTime        = 100;    //ms
            const int faultRestTime   = 10_000; //ms
            const int responseTime    = 500;    //ms
            var       lastRequestTime = DateTime.Now;
            var       lastResetTime   = DateTime.Now;
            var       resetInterval   = TimeSpan.FromSeconds(30);

            var faultRestTimer = 0;

            Logger.Info("entering inf loop");
            // Главный цикл до отмены этой задачи.
            while (!cancellationToken.IsCancellationRequested)
            {
                try
                {
                    // состояние связи
                    iRegisters.WritePoints(5, new ushort[] { (ushort)WfqydbServer.ConnectionState });
                    // Habdle

                    var buff     = hRegisters.ReadPoints(10, 5);
                    var cmd      = buff[0];
                    var cmdState = buff[1];

                    if ((buff[2] + buff[3]) == 0)
                    {
                        // Чтобы не было пустого места на элкамрм
                        hRegisters.WritePoints(12, new ushort[] { currentData[3], currentData[4], currentData[6] });
                    }

                    // обработка команд по модбас
                    if ((cmd > 0) && (cmdState == (ushort)CmdState.Rdy))
                    {
                        var upFreq    = (byte)buff[2];
                        var dnFreq    = (byte)buff[3];
                        var stokeRate = (byte)buff[4];

                        hRegisters.WritePoints(10, new ushort[] { cmd, (ushort)CmdState.Working });

                        try
                        {
                            switch ((Cmd)cmd)
                            {
                            case Cmd.Reset:
                                cmd      = 0;
                                cmdState = 0;
                                hRegisters.WritePoints(10, new ushort[] { (ushort)Cmd.NoOp, (ushort)CmdState.Rdy });
                                break;

                            case Cmd.BroadcastQuery:
                                lastRequestTime = DateTime.Now;
                                //await WfqydbServer.PullBroadcastQuery().ConfigureAwait(false);
                                WfqydbServer.PullBroadcastQuery();
                                hRegisters.WritePoints(10, new ushort[] { (ushort)Cmd.NoOp, (ushort)CmdState.Rdy });

                                ArcController?.NewLogMessage(LogCode.WFQYDBCmdRead);
                                break;

                            case Cmd.AutoRun:
                                lastRequestTime = DateTime.Now;
                                //await WfqydbServer.PullAutoRun(upFreq, dnFreq, stokeRate).ConfigureAwait(false);
                                WfqydbServer.PullAutoRun(upFreq, dnFreq, stokeRate);
                                hRegisters.WritePoints(10, new ushort[] { (ushort)Cmd.NoOp, (ushort)CmdState.Rdy });

                                ArcController?.NewLogMessage(LogCode.WFQYDBCmdCtart, $"u:{upFreq}, d:{dnFreq}, sr:{stokeRate}");
                                break;

                            case Cmd.Shutdown:
                                lastRequestTime = DateTime.Now;
                                //await WfqydbServer.PullShutdown().ConfigureAwait(false);
                                WfqydbServer.PullShutdown();
                                hRegisters.WritePoints(10, new ushort[] { (ushort)Cmd.NoOp, (ushort)CmdState.Rdy });

                                ArcController?.NewLogMessage(LogCode.WFQYDBCmdCtop);
                                break;

                            case Cmd.ThrowException:
                                throw new Exception("Test exception");

                            default:
                                hRegisters.WritePoints(10, new ushort[] { cmd, (ushort)CmdState.NotImplementedCmd });
                                faultRestTimer = faultRestTime;
                                break;
                            }
                        }
                        catch (Exception ex)
                        {
                            hRegisters.WritePoints(10, new ushort[] { cmd, (ushort)CmdState.CommonError });
                            faultRestTimer = faultRestTime;
                            FireOnError(ex);

                            Logger.Alarm(ex.Message);
                            ArcController?.NewLogMessage(LogCode.ModbusFailed);
                        }
                    }

                    if (cmdState != (ushort)CmdState.Rdy)
                    {
                        if ((faultRestTimer -= waitTime) <= 0)
                        {
                            hRegisters.WritePoints(10, new ushort[] { (ushort)Cmd.NoOp, (ushort)CmdState.Rdy });
                        }
                    }

                    await Task.Delay(waitTime, cancellationToken).ConfigureAwait(false);

                    // передернем сеть rtu. Так как она периодически подвисает.
                    //var lastResetTime = DateTime.Now;
                    //var resetInterval = TimeSpan.FromSeconds(30);
                    if ((lastResetTime + resetInterval) < DateTime.Now)
                    {
                        lastResetTime = DateTime.Now;
                        Logger.Info("restarting rtu");
                        //var rtuListener = new TcpListener(IPAddress.Any, RtuOverTcpPort);
                        rtuListener.Stop();
                        rtuListener.Start();
                        // var rtuNetwork = factory.CreateRtuOverTcpSlaveNetwork(rtuListener);
                        // var slaveRtu = factory.CreateSlave(1, slaveTcp.DataStore);
                        // rtuNetwork.AddSlave(slaveRtu);
                        // var rtuListenerTask = rtuNetwork.ListenAsync(cancellationToken);
                    }
                }
                catch (Exception ex)
                {
                    FireOnError(ex);

                    Logger.Alarm(ex.Message);

                    ArcController?.NewLogMessage(LogCode.ModbusFailed);

                    await Task.Delay(waitTime, cancellationToken).ConfigureAwait(false);
                }
            }// while

            tcpListener.Stop();
            rtuListener.Stop();

            tcpNetwork.Dispose();
            rtuNetwork.Dispose();

            await tcpListenerTask.ConfigureAwait(true);

            await rtuListenerTask.ConfigureAwait(true);
        }