예제 #1
0
        private static void _bw_DoWork(object sender, DoWorkEventArgs e)
        {
            OpenPort();

            SqlliteDao.OpenConnection(true);

            while (true)
            {
                Logger.Info($"worker cycle {++_workerCycleCnt}");

                try
                {
                    UnitCommand unitCommand;

                    //pokud jsou prikazy cekajici na zpracovani tak se provedou prednostne
                    while (_unitCommandsQueue.TryDequeue(out unitCommand))
                    {
                        Logger.Debug($"command {unitCommand.Description} dequeue");
                        unitCommand.Run();
                        Thread.Sleep(_runConfig.RelaxTime);
                        Logger.Debug($"command invoke res:{unitCommand.Result}");
                    }

                    //provedu nacitani ze vsech jednotek v cyklu
                    foreach (var addr in UnitAddresses)
                    {
                        if (_bw.CancellationPending)
                        {
                            Logger.Info("*** read worker canceled ***");
                            _isWorkerStarted = false;
                            SqlliteDao.CloseConnection();
                            return;
                        }

                        ObtainStatus((byte)addr);

                        Logger.Debug($"+worker sleep: {_runConfig.WorkerSleepPeriod}");
                        Thread.Sleep(_runConfig.WorkerSleepPeriod);  //pauza pred ctenim dalsi jednotky - parametr
                        Logger.Debug("-worker sleep");
                    }

                    //ClosePort();  //- muze byt problem ze prijimani dat neste neskoncilo

                    //pokud o vynuceni uvolneni zdroju
                    //Thread.Sleep(100);

                    //GC.Collect();
                    //GC.WaitForPendingFinalizers();

                    //Thread.Sleep(100);
                }
                catch (Exception ex)
                {
                    Logger.Error(ex);
                }
            }
        }
예제 #2
0
        public IHttpActionResult ExportInterval([FromBody] IntervalExport value)
        {
            Logger.Info($"exportFilename:{value.FileName} from:{value.TimeFromStr} to:{value.TimeToStr}");
            if (string.IsNullOrWhiteSpace(value.FileName) || string.IsNullOrWhiteSpace(value.TimeFromStr) ||
                string.IsNullOrWhiteSpace(value.TimeToStr))
            {
                return(BadRequest("Neplatné parametry"));
            }

            var cnt = SqlliteDao.ExportToCsv(value);

            return(Ok($"Počet exportovaných záznamů: {cnt}"));
        }
예제 #3
0
파일: Program.cs 프로젝트: marsikv/slevyr
        private static void TestCreateSchema()
        {
            var status = new UnitStatus()
            {
                Ok = 134, CasOk = 5454, CilKusuTabule = 1000, AktualDefectTabule = 0
            };

            SqlliteDao.OpenConnection(true);
            SqlliteDao.AddUnitState(100, status);
            status.Ok    = 135;
            status.CasOk = 5455;
            SqlliteDao.AddUnitState(100, status);
            SqlliteDao.CloseConnection();
        }
예제 #4
0
        /// <summary>
        /// Získá status jednoty načtením stavu čítačů a výpočtem parametrů zobrazovaných na tabuli
        /// </summary>
        /// <param name="addr"></param>
        /// <returns></returns>
        public static UnitStatus ObtainStatus(byte addr)
        {
            Logger.Info($"+ *** unit {addr}");

            if (_runConfig.IsMockupMode)
            {
                return(_unitDictionary[addr].UnitStatus);
            }

            int    ok, ng;
            Single casOk = -1, casNg = -1;
            var    res = _unitDictionary[addr].ReadStavCitacu(out ok, out ng);
            var    s   = res ? "" : "err";

            Logger.Info($">ok:{ok} ng:{ng} " + s);

            if (!res)
            {
                _ErrorRecordedCnt++;
                if (!_ErrorRecorded)
                {
                    ErrorsLogger.Error($"ReadStavCitacu;{addr};total errors:{_ErrorRecordedCnt}");
                    _ErrorRecorded = true;
                }
            }
            else
            {
                if (_ErrorRecorded)
                {
                    ErrorsLogger.Info($"ReadStavCitacu;{addr};recovered");
                    _ErrorRecorded = false;
                }
            }

            if (res && _runConfig.IsReadOkNgTime)
            {
                _unitDictionary[addr].ReadCasOK(out casOk);
                Logger.Info($">casOk:{casOk}");

                _unitDictionary[addr].ReadCasNG(out casNg);
                Logger.Info($">casNg:{casNg}");
            }

            if (res)
            {
                //prepocitat pro zobrazeni tabule
                try
                {
                    _unitDictionary[addr].RecalcTabule();

                    _unitDictionary[addr].UnitStatus.LastCheckTime = DateTime.Now;

                    string casOkStr = (_runConfig.IsReadOkNgTime)
                        ? casOk.ToString(CultureInfo.InvariantCulture)
                        : string.Empty;
                    string casNgStr = (_runConfig.IsReadOkNgTime)
                        ? casNg.ToString(CultureInfo.InvariantCulture)
                        : string.Empty;

                    UnitsLogger.Info($"4;{addr};{ok};{ng};{casOkStr};{casNgStr};{(int)_unitDictionary[addr].UnitStatus.MachineStatus}");

                    StringBuilder sb = new StringBuilder();
                    sb.Append($"4;{_unitDictionary[addr].UnitConfig.UnitName};{addr}");                                //az po 4
                    sb.Append($";{_unitDictionary[addr].UnitStatus.CilKusuTabule}");                                   //5
                    sb.Append($";{ok}");                                                                               //6
                    sb.Append(_runConfig.IsReadOkNgTime ? $";{_unitDictionary[addr].UnitStatus.CasOk}" : ";");         //7
                    sb.Append(ok != 0 ? $";{_unitDictionary[addr].UnitStatus.UbehlyCasSmenySec / (float)ok:F}" : ";");
                    sb.Append($";{_unitDictionary[addr].UnitStatus.CilDefectTabule:F}");                               //9
                    sb.Append($";{ng}");                                                                               //10
                    sb.Append(_runConfig.IsReadOkNgTime ? $";{_unitDictionary[addr].UnitStatus.CasNg}" : ";");         //11
                    sb.Append(ng != 0 ? $";{_unitDictionary[addr].UnitStatus.UbehlyCasSmenySec / (float)ng:F}" : ";"); //12
                    sb.Append($";{_unitDictionary[addr].UnitStatus.RozdilTabuleTxt}");                                 //13
                    sb.Append($";{_unitDictionary[addr].UnitStatus.AktualDefectTabuleTxt}");                           //14
                    sb.Append($";{_unitDictionary[addr].UnitStatus.MachineStatus}");                                   //15
                    sb.Append($";{Convert.ToInt32(_unitDictionary[addr].UnitStatus.IsPrestavkaTabule)}");              //16
                    Units2Logger.Info(sb.ToString);

                    SqlliteDao.AddUnitState(addr, _unitDictionary[addr].UnitStatus);
                }
                catch (Exception ex)
                {
                    Logger.Error(ex);
                }
            }
            else
            {
                if (_runConfig.IsWriteEmptyToLog)
                {
                    UnitsLogger.Info($" 4;{addr};;;;;");
                }
            }

            Logger.Info($"-");

            return(_unitDictionary[addr].UnitStatus);
        }