コード例 #1
0
 /// <summary>
 ///     Create a new emulator with the specified polling period
 /// </summary>
 /// <param name="pollingPeriod">Main loop period</param>
 /// <param name="token">Cancellation token</param>
 /// <param name="logger">Optional logger</param>
 public EmulationRunner(TimeSpan pollingPeriod, CancellationToken token, ILogger logger = null)
 {
     _emulator = new T();
     _token    = token;
     Config    = new Rs232Config(_emulator)
     {
         Logger        = logger,
         PollingPeriod = pollingPeriod
     };
 }
コード例 #2
0
 /// <summary>
 /// 保存配置到配置文件
 /// </summary>
 /// <param name="navConfig">导航仪配置</param>
 /// <param name="rs232Config">RS232COM口配置</param>
 /// <param name="plcConfig">PLC配置</param>
 /// <returns>保存成功返回True</returns>
 public static bool Save(NavConfig navConfig, Rs232Config rs232Config, PLCConfig plcConfig)
 {
     if (navConfig == null && rs232Config == null && plcConfig == null)
     {
         return(false);
     }
     try
     {
         XmlDocument xmlDoc = new XmlDocument();
         xmlDoc.Load(configPath);
         if (navConfig != null)
         {
             XmlNode xmldocSelect = xmlDoc.SelectSingleNode("configs/Nav");
             xmldocSelect.Attributes["ip"].InnerText   = navConfig.Ip;
             xmldocSelect.Attributes["port"].InnerText = navConfig.Port.ToString();
         }
         if (rs232Config != null)
         {
             XmlNode xmldocSelect = xmlDoc.SelectSingleNode("configs/Can");
             xmldocSelect.Attributes["CanPortName"].InnerText = rs232Config.PortName;
             xmldocSelect.Attributes["BaudRate"].InnerText    = rs232Config.BaudRate.ToString();
         }
         if (plcConfig != null)
         {
             XmlNode xmldocSelect = xmlDoc.SelectSingleNode("configs/PLC");
             xmldocSelect.Attributes["ip"].InnerText   = plcConfig.Ip;
             xmldocSelect.Attributes["port"].InnerText = plcConfig.Port.ToString();
         }
         xmlDoc.Save(@"Configs\AGVConfig.xml");
         return(true);
     }
     catch (Exception ex)
     {
         Logger.Error("保存硬件配置文件失败.", ex);
         return(false);
     }
 }
コード例 #3
0
        /// <summary>
        ///     Run a real bill validator
        /// </summary>
        /// <param name="logger">Logger attaches to validator</param>
        /// <param name="args">Program arguments</param>
        private static void RunValidator(ILogger logger, string[] args)
        {
            var portName = args.FirstOrDefault();

            if (string.IsNullOrEmpty(portName))
            {
                Console.WriteLine("Usage: rs232validator.cli.exe portName");
                return;
            }


            var config = Rs232Config.UsbRs232Config(portName, logger);

            var validator = new ApexValidator(config);

            validator.OnLostConnection += (sender, eventArgs) =>
            {
                config.Logger?.Error($"[APP] Lost connection to acceptor");
            };

            validator.OnBillInEscrow += (sender, i) =>
            {
                // For USA this index represent $20. This example will always return a $20
                // Alternatively you could set the Rs232Config mask to 0x5F to disable a 20.
                if (i == 5)
                {
                    config.Logger.Info($"[APP] Issuing a return command for this {BillValues[i]}");

                    validator.Return();
                }
                else
                {
                    config.Logger.Info($"[APP] Issuing stack command for this {BillValues[i]}");

                    validator.Stack();
                }
            };

            validator.OnCreditIndexReported += (sender, i) =>
            {
                config.Logger.Info($"[APP] Credit issued: {BillValues[i]}");
            };

            validator.OnStateChanged += (sender, state) =>
            {
                config.Logger.Info($"[APP] State changed from {state.OldState} to {state.NewState}");
            };

            validator.OnEventReported += (sender, evt) => { config.Logger.Info($"[APP] Event(s) reported: {evt}"); };

            validator.OnCashBoxRemoved += (sender, eventArgs) => { config.Logger.Info("[APP] Cash box removed"); };

            validator.OnCashBoxAttached += (sender, eventArgs) => { config.Logger.Info("[APP] Cash box attached"); };

            if (!validator.StartPollingLoop())
            {
                config.Logger.Error("[APP] Failed to start RS232 main loop");
                return;
            }

            config.Logger.Info("[APP] Validator is now running. CTRL+C to Exit");
            while (true)
            {
                Thread.Sleep(TimeSpan.FromMilliseconds(100));

                if (!validator.IsUnresponsive)
                {
                    continue;
                }

                config.Logger?.Error("[APP] validator failed to start. Quitting now");

                validator.StopPollingLoop();

                break;
            }
        }
コード例 #4
0
        private static void Main(string[] args)
        {
            var portName = args.FirstOrDefault();

            if (string.IsNullOrEmpty(portName))
            {
                Console.WriteLine("Usage: app portName");
                return;
            }

            var logger = new ConsoleLogger {
                Level = 3
            };
            var config = Rs232Config.UsbRs232Config(portName, logger);

            var validator = new ApexValidator(config);

            validator.OnLostConnection += (sender, eventArgs) =>
            {
                config.Logger?.Error($"[APP] Lost connection to acceptor");
            };

            validator.OnCreditIndexReported += (sender, i) =>
            {
                config.Logger.Info($"[APP] Credit issued: {BillValues[i]}");
            };

            validator.OnStateChanged += (sender, state) =>
            {
                config.Logger.Info($"[APP] State changed from {state.OldState} to {state.NewState}");
            };

            validator.OnEventReported += (sender, evt) => { config.Logger.Info($"[APP] Event(s) reported: {evt}"); };

            validator.OnCashBoxRemoved += (sender, eventArgs) => { config.Logger.Info("[APP] Cash box removed"); };

            validator.OnCashBoxAttached += (sender, eventArgs) => { config.Logger.Info("[APP] Cash box attached"); };

            if (!validator.StartPollingLoop())
            {
                config.Logger.Error("[APP] Failed to start RS232 main loop");
                return;
            }

            config.Logger.Info("[APP] Validator is now running. CTRL+C to Exit");
            while (true)
            {
                Thread.Sleep(TimeSpan.FromMilliseconds(100));

                if (!validator.IsUnresponsive)
                {
                    continue;
                }

                config.Logger?.Error("[APP] validator failed to start. Quitting now");

                validator.StopPollingLoop();

                break;
            }
        }