示例#1
0
文件: TermFile.cs 项目: shod/Uniterm
        public TermFile()
        {
            Config cConf = new Config();
            strDirPath = cConf.getappSettings(Config.SettingField.DataSyncDir.ToString());
            int lastNum = GetLastFuleNum();
            lastNum++;
            string strNum = "000";
            int len = 3;

            if (lastNum<10)
            {
                len = 1;
            }
            else if (lastNum < 100)
            {
                len = 2;
            }
            strNum = strNum.Substring(0,3 - len) + lastNum.ToString();

            string strYear = DateTime.Now.Year.ToString();
            string strMonth = DateTime.Now.Month.ToString();
            string strDay = DateTime.Now.Day.ToString();

            fileName = strDirPath+"/act_" + strYear + strMonth + strDay + strNum + ".txt";
        }
示例#2
0
文件: CTerm.cs 项目: shod/Uniterm
 public CTerm(int TermId,string TermType)
 {
     _TermType = TermType;
     _TermId = TermId;
     Config cConf = new Config();
     Config.SysObjectProtocol sProtocol;
     //arrProtocolElement = cConf.getObjectProtocol(TermType);
     _TimeWait = Convert.ToInt16(cConf.getappSettings(Config.SettingField.TimeWait.ToString()));
     _TimeDelay = Convert.ToInt16(cConf.getappSettings(Config.SettingField.TimeDelay.ToString()));
 }
示例#3
0
        private void InitSetting()
        {
            string strDemo = "";

            try
            {
                Sys.Config cConf = new UniTerm.Sys.Config();
                numPeriod.Value = cConf.getPeriod();
                numErr.Value    = Convert.ToInt16(cConf.getappSettings("AttemptCount"));
                lblDirPath.Text = cConf.getappSettings("DataSyncDir");

                chkResponse.Checked = Convert.ToBoolean(cConf.getappSettings(Config.SettingField.LogResponse.ToString()));
                numDelay.Value      = Convert.ToInt16(cConf.getappSettings(Config.SettingField.TimeDelay.ToString()));
                numWait.Value       = Convert.ToInt16(cConf.getappSettings(Config.SettingField.TimeWait.ToString()));

                strDemo = cConf.getappSettings(Config.SettingField.Demo.ToString());

                if (strDemo == "")
                {
                    chkDemo.Visible = false;
                }
                else
                {
                    chkDemo.Checked = Convert.ToBoolean(cConf.getappSettings(Config.SettingField.Demo.ToString()));
                }


                // Check port
                //string[] ports = SerialPort.GetPortNames();


                // Display each port name to the console.

                /*foreach(string port in ports)
                 * {
                 *  comboPort.Items.Add("Com" + port);
                 * }
                 */

                //@todo
                //if (Convert.ToBoolean(cConf.getappSettings(Config.SettingField.LogResponse.ToString()))==True)
                //{
                //    chkResponse.Checked = true;
                //}
            }
            catch (Exception e)
            {
                MessageBox.Show(e.Message, "Ошибка!", MessageBoxButtons.OK, MessageBoxIcon.Stop);
            }
        }
示例#4
0
文件: SPort.cs 项目: shod/Uniterm
        public void Open()
        {
            Config cConf = new Config();

            // Set the port's settings
            comport.BaudRate = 9600;
            comport.DataBits = 8;
            comport.StopBits = StopBits.One;
            comport.Parity = Parity.None;
            comport.PortName = cConf.getappSettings(Config.SettingField.Port.ToString());
            comport.RtsEnable = true;
            comport.DtrEnable = true;
            //19.02.2012
            //comport.ReadTimeout = 500;
            //comport.WriteTimeout = 300;

            // Begin communications
            comport.Open();
            // Enter an application loop to keep this thread alive
        }
示例#5
0
文件: TermFile.cs 项目: shod/Uniterm
        /// <summary>
        ///  Получение списка записанных файлов
        /// </summary>
        /// <returns></returns>
        private int GetLastFuleNum()
        {
            String[] strFiles;
            Config SConf = new Config();
            //string strDirPath = "G:/temp/"; //SConf.getappSettings("DataSyncDir");
            string strFilePath = strDirPath;// GetFileLoadPath();

            string strYear = DateTime.Now.Year.ToString();
            string strMonth = DateTime.Now.Month.ToString();
            string strDay = DateTime.Now.Day.ToString();

            strFiles = Directory.GetFiles(strFilePath, "act_" + strYear + strMonth + strDay + "*.txt");

            //Сортировочка:
            Array.Sort(strFiles);
            String strNum = "1";
            foreach (String fname in strFiles)
            {
                strNum = fname.Substring(fname.Length - 7, 3);
            }
            //Array.Sort(strFiles, 0, strFiles.Length, new FileSort());

            return Convert.ToInt16(strNum);
        }
示例#6
0
文件: frmMain.cs 项目: shod/Uniterm
        /// <summary>
        /// Demo regime
        /// </summary>
        private void TerminalRefreshDemo()
        {
            Config cConf = new Config();
            arrInfoLine = new ArrayList();
            String strLine;
            String[] arrLine;
            string DirPath = cConf.getappSettings(Config.SettingField.DataSyncDir.ToString());
            CFile FileDemo = new CFile(DirPath+"/demo_act.txt");
            CFile FileDemoNew = new CFile(DirPath + "/demo_act.txt");
            arrLineDemo = FileDemo.Read();

            /* Прогресс */
            statusProgress.Visible = true;
            statusProgress.Value = 0;

            TermFile cFileObj = new TermFile();

            int c_count = arrLineDemo.Count;
            int c_Rand;
            Random fixRand = new Random();
            c_Rand = fixRand.Next(1, 7);
            for (int i = 0; i < c_count; i++)
            {
                Thread.Sleep(1000);
                statusProgress.Step = (80 / c_count);
                statusProgress.PerformStep();
                //arrInfoLine.Add(arrLineDemo[i]);
                strLine = arrLineDemo[i];
                //strLine = strLine.Replace(".", ",");
                arrLine = strLine.Split(';');
                strLine = "";

                double dd;
                int idd;

                int l_count = arrLine.Length;
                for (int a = 0; a < l_count; a++)
                {
                    if (a == 2)
                    {
                        arrLine[a] = DateTime.Now.Hour + ":" + DateTime.Now.Minute + ":" + DateTime.Now.Second;
                    }

                    //if (a == 13 || a==14 ||a==15)
                    if (a >10 && Char.IsDigit(Convert.ToChar(arrLine[a].Substring(0,1))))
                    {
                        try
                        {
                            dd = Convert.ToDouble(arrLine[a]);
                            dd = dd + (dd / 100 * 0.5);
                            arrLine[a] = dd.ToString();
                        }
                        catch
                        {
                            idd = Convert.ToInt16(arrLine[a]);
                            idd = idd + (idd / 100 * l_count);
                            arrLine[a] = idd.ToString();
                        }

                    }
                }
                strLine = String.Join(";", arrLine);
                strLine = strLine.Replace(",", ".");

                if (i <= c_Rand-1)
                {
                    cFileObj.AddLine(strLine);
                }

                FileDemoNew.AddLine(strLine);
            }
            cFileObj.Write();
            FileDemoNew.Write(false);

            _tCount++;
            LogFileSave(arrInfoLine);
            statusProgress.Visible = false;
            lblTCount.Text = _tCount.ToString();
            lblError.Text = _tError.ToString();
        }
示例#7
0
文件: frmMain.cs 项目: shod/Uniterm
        /// <summary>
        /// Опрос терминалов
        /// </summary>
        private void TerminalRefresh()
        {
            statusMessage.Text = DateTime.Now.ToString( "H:mm:f");

            try
            {

                lblInfo.Text = "Система в работе.";
                Config.SysObject SysObject, Sterm;
                Config cConf = new Config();
                string strDemo = "";

                strDemo = cConf.getappSettings(Config.SettingField.Demo.ToString());

                if (strDemo != "")
                {
                    if (Convert.ToBoolean(strDemo))
                    {
                        TerminalRefreshDemo();
                        return;
                    }

                }

                int c_count;
                CTerm cTermObj;
                int cAttempt = 0;
                _Attempt = Convert.ToInt16(cConf.getappSettings(Config.SettingField.AttemptCount.ToString()));

                cConf.getappSettings("Period");
                String strTermData;
                c_count = arrObject.Count;
                bool FlagNoTerm = false;

                for (int ia = 0; ia < c_count; ia++)
                {
                    Sterm = (Config.SysObject)arrObject[ia];
                    if (_TermIndex > 0 && Sterm.Index != _TermIndex)
                    {
                        FlagNoTerm = true;
                    }
                    else
                    {
                        FlagNoTerm = false;
                        break;
                    }
                }

                if (FlagNoTerm)
                {
                    lblInfo.Text = "Терминал с номером №" + _TermIndex + " не зарегистрирован в системе.";
                    return;
                }

                //TermFile cFileObj = new TermFile();
                strTermData = "";
                //_tError = 0;

                arrInfoLine = new ArrayList();
                ArrayList arrResponseLine = new ArrayList();
                ArrayList arrErrorLine = new ArrayList() ; // Массив строк для записи ошибок
                bool FlagError = false;

                /* Прогресс */
                statusProgress.Visible = true;
                statusProgress.Value = 0;

                for (int i = 0; i < c_count; i++)
                {
                    statusProgress.Step = (80 / c_count);
                    statusProgress.PerformStep();

                    SysObject = (Config.SysObject)arrObject[i];

                    FlagError = false;
                    if (_TermIndex == SysObject.Index || _TermIndex == -1)
                    {
                        /* Опрос терминалов */
                        cTermObj = new CTerm(SysObject.Index, SysObject.Type);
                        cTermObj.TermProtocolIndex = _TermProtocolIndex;
                        _TermProtocolIndex = _TermProtocolIndex; //-1 Сброс индекса протокола
                        cTermObj.RequestParam = _cTermReqParam;
                        cTermObj.Refresh(cPort);

                        if (cTermObj.isDataError())
                        {
                            FlagError = true;
                            arrErrorLine.Add("[" + SysObject.Index + "]" + cTermObj.getDataResponseHex());
                            //statusProgress.Value = statusProgress.Value - _Attempt;
                            statusProgress.Step = 1;

                            while (cAttempt <= _Attempt)
                            {
                                statusProgress.PerformStep();

                                cTermObj.Refresh(cPort);
                                Thread.Sleep((cAttempt + 1) * 200);
                                strTermData = cTermObj.getDataString();
                                if (cTermObj.isDataError() == false)
                                {
                                    strTermData = cTermObj.getDataString();
                                    FlagError = false;
                                    arrErrorLine.Clear();
                                    break;
                                }
                                arrErrorLine.Add("[" + SysObject.Index + "]" + cTermObj.getDataResponseHex());
                                arrResponseLine.Add("[" + SysObject.Index + "][" + cAttempt + "]" + cTermObj.getDataResponseHex());
                                cAttempt++;
                            }
                        }
                        else
                        {
                            //MessageBox.Show(cTermObj.getDataString());
                            strTermData = cTermObj.getDataString();
                        }

                        //Оригинальные ответы
                        arrResponseLine.Add("[" + SysObject.Index + "]"+cTermObj.getDataResponseHex());
                        //arrInfoLine.Add(strTermData.ToString());
                        /* Запись строк в массив */
                        if (FlagError == false)
                        {
                            arrInfoLine.Add(strTermData.ToString());
                        }
                        else
                        {
                            _tError++;
                        }

                    }

                    /* Запись оригинальных ответов */
                    if (Convert.ToBoolean(cConf.getappSettings(Config.SettingField.LogResponse.ToString()))
                        & arrResponseLine.Count>0)
                    {

                        LogFileSave(arrResponseLine);
                    }
                    _tCount++;
                }

                /* Запись в файл, если это не отчет*/
                if (_cTermReqParam.ReportType == null)
                {
                    if (arrInfoLine.Count > 0)
                    {
                        TermFile cFileObj = new TermFile();

                        foreach (string Line in arrInfoLine)
                        {
                            cFileObj.AddLine(Line);
                        }
                        cFileObj.Write();
                    }
                }

                /* Запись ошибок опросов */
                LogErrorFileSave(arrErrorLine);

                if (_cTermReqParam.ReportType !=  "")
                {
                    ReportFileSave(strTermData.Split('='), _cTermReqParam.ReportCode);
                }

            }
            catch(Exception e)
            {
            StartStopProcess(Convert.ToBoolean(TerminalAct.Stop));
            MessageBox.Show(e.Message, "Ошибка!",MessageBoxButtons.OK, MessageBoxIcon.Stop);
            lblInfo.Text = "Ошибка в работе системы!";
            }
            statusProgress.Visible = false;
            lblTCount.Text = _tCount.ToString();
            lblError.Text = _tError.ToString();
        }
示例#8
0
文件: frmMain.cs 项目: shod/Uniterm
        /// <summary>
        /// Save Report file
        /// </summary>
        /// <param name="arrLine"></param>
        private void ReportFileSave(String[] arrLine, string RepName)
        {
            Config cConf = new Config();
            CFile cLogFile = new CFile();
            string DirPath = cConf.getappSettings(Config.SettingField.DataSyncDir.ToString());
            string strFilePath = DirPath + "/rep_" + RepName + ".csv";
            cLogFile.fileName = strFilePath;

            System.IO.File.Delete(@strFilePath);

            foreach (string Line in arrLine)
            {
                cLogFile.AddLine(Line);
            }
            cLogFile.Write();
        }
示例#9
0
文件: frmMain.cs 项目: shod/Uniterm
        private void ReadConfigSetting()
        {
            Config cConf = new Config();

            /*
             * Получение массива объектов для опроса
             */
            arrObject = cConf.getObjectList();
            //Config.SysObject cObj;

            intervalNewData = cConf.getPeriod() * 1000;
            timer.Interval = intervalNewData;

            lblPeriod.Text = Convert.ToString(intervalNewData / 1000);
            lblAttempt.Text = cConf.getappSettings(Config.SettingField.AttemptCount.ToString());
            lblTermCount.Text = cConf.getObjectList().Count.ToString();
            lblPort.Text = cConf.getappSettings(Config.SettingField.Port.ToString());
        }
示例#10
0
文件: SPT961.cs 项目: shod/Uniterm
        /*
         * Функция подготавливает сообщения к передаче
         */
        private string MessagePrepare(Config.SysObjectCommand Sterm)
        {
            string Command = Sterm.Value;
            String[] arrCmd = Command.Split(';');
            string strHexCommand = HexString2Ascii(arrCmd[1]);

            if (arrCmd[0] == "18")
            {
                strHexCommand = strHexCommand + "0c09" + GetDate() + "0c";
                strHexCommand = strHexCommand.ToUpper();
            }

            strHexCommand = strHexCommand.Replace("2E", "09");
            string strMessage = strHeader + arrCmd[0] + strSTX + strHexCommand + strETX;// strData.Replace("#", Command);
            //strMessage = "101f18100209300936353533320c0938093909323031310931320933330931370c1003";
            string strMessageConvert = strMessage.ToUpper();

            string sd = Data_Hex_Asc(ref strMessageConvert);

            //string lngCommand = CTerm.GetHexToDouble(command).ToString();
            //char[] s1 = strMessage.ToCharArray;
            int intValue = CRCode(sd, sd.Length);
            //int intValue = CRCode(Command, Command.Length);

            byte[] intBytes = BitConverter.GetBytes(intValue);

            //Array.Reverse(intBytes);
            byte[] result = intBytes;

            int dd = intBytes[0];
            string CRC2 = dd.ToString("X2");

            dd = intBytes[1];
            string CRC1 = dd.ToString("X2");
            strMessage = strMessage + CRC1 + CRC2;

            //intValue = CRCode(strMessage, strMessage.Length);
            //intBytes = BitConverter.GetBytes(intValue);
            strMessage = strSOH + strMessage;
            return strMessage;
        }
示例#11
0
文件: frmMain.cs 项目: shod/Uniterm
 private void lnkStart_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e)
 {
     Config cConf = new Config();
     intervalNewData = cConf.getPeriod() * 1000;
     StartStopProcess(TermStart);
 }
示例#12
0
文件: frmMain.cs 项目: shod/Uniterm
        private void frmMain_Load(object sender, EventArgs e)
        {
            ReadConfigSetting();
            CreateMenuReport();
            /* Создаем объект порт */
            cPort = new SPort();
            try
            {
                cPort.Open();
            }
            catch
            {
                MessageBox.Show("Нет доступа к порту!", "Ошибка запуска.", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }

            try
            {
                Config cConf = new Config();
                intervalNewData = cConf.getPeriod() * 1000;
                //StartStopProcess(TermStart);
            }
            catch(Exception err)
            {
                StartStopProcess(Convert.ToBoolean(TerminalAct.Stop));
                MessageBox.Show(err.Message, "Ошибка!", MessageBoxButtons.OK, MessageBoxIcon.Stop);
                lblInfo.Text = "Ошибка в работе системы!";
            }

            //cPort.CurrentDataMode = SPort.DataMode.Hex;
            //cPort.SendData("2f3f210D0A");

            //cPort.SendData("8D0AAF3F218D0A1001101F1D10020930093030330C1003C515");
            //string retdata = cPort.ReturnData();
        }
示例#13
0
文件: frmReport.cs 项目: shod/Uniterm
        /// <summary>
        /// Запуск формы отчета
        /// </summary>
        public void ReportGenerate()
        {
            DataTable DT = new DataTable();
            Config cConf = new Config();
            string DirPath = cConf.getappSettings(Config.SettingField.DataSyncDir.ToString());
            string fileName = DirPath + "/rep_" + _repName + ".csv"; //DirPath +

            try
            {
                DT = UniTerm.Program.GetDataTableFromCsv(fileName, false);
                myReportDocument.SetDataSource(DT);
                ReportViewer.ReportSource = myReportDocument;
            }
            catch (Exception e)
            {
                MessageBox.Show(_repName + "\n" + e.Message + "\n(" + fileName + ")", "Ошибка при считывании файа отчета", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }
示例#14
0
文件: Tem104.cs 项目: shod/Uniterm
        /// <summary>
        /// Обновляет, опрашивает состояние и получает данные с терминала 
        /// </summary>
        public void Refresh(SPort cPort)
        {
            Config cConf = new Config();
            Config.SysObjectCommand Sterm;
            string sCommand;
            string _resData;
            string[] testData = {"AA00FF0F014015270313000011713F39B7380000110F3DC2C1A80000006A3E56B5A200D4926200D491FC00000066000000000000000000000000000019AA10F432320000000232",
            "AA00FF0F020845281503270313403B"};

            cPort.TimeWait = _TimeWait;

            /*
             * Для прохода по параметрам протокола
             */
            Config.SysObjectProtocol Sprotokol;
            /*
             * Получение массива объектов для опроса
             */
            arrObjectCommand = cConf.getObjectTypeCommand(ProtocolName);

            cPort.CurrentDataMode = SPort.DataMode.Hex;
            /*
             * Проходим по набору комманд
             */
            cPort.Clear();
            if (!InitDevice(cPort))
            {
                Thread.Sleep(_TimeDelay);
                if (!InitDevice(cPort))
                {
                    Exception myException = new Exception("TEM104 - Ошибка при инициализации.");
                    throw myException;
                }
            }

            cPort.Clear();
            if (!TimeDevice(cPort))
            {
                Thread.Sleep(_TimeDelay);
                if (!TimeDevice(cPort))
                {
                    Exception myException = new Exception("TEM104 - Ошибка при получении последнего времени с устройства.");
                    throw myException;
                }
            }

            Sterm = (Config.SysObjectCommand)arrObjectCommand[0];
            String[] arrCmd = Sterm.Value.Split(';');

            int c_count = arrCmd.Length;

            /*
            * Проход по кодам опроса
            */
            for (int ia = 0; ia < c_count; ia++)
            {
                cPort.Clear();
                /* Подготовка сообщения */
                sCommand = MessagePrepare(arrCmd[ia]);

                /* Посылка сообщения */
                cPort.SendData(sCommand);
                Thread.Sleep(_TimeDelay);

                ///!!@TODO Убрать после теста!!!!
                //_resData = testData[ia];
                _resData = cPort.ReturnData();
                if (!CheckMessage(_resData)){
                    cPort.Clear();
                    cPort.SendData(sCommand);
                    Thread.Sleep(_TimeDelay);
                }
                _resData = cPort.ReturnData();
                _resData = DecodeResponce(_resData, arrCmd[ia]);
                strData = strData + _resData;
            }

            ResData.strData = strData.Replace(",",".");

            /*
             * Проверка на готовность ответа порта
             */
            ResData.IsError = false;
        }
示例#15
0
文件: CTerm.cs 项目: shod/Uniterm
        /// <summary>
        /// Возвращает строку данных 
        /// </summary>
        /// <returns></returns>
        public String getDataString()
        {
            string sep = ";";
            string sepArray = "";
            int intStart;
            int intStartHead;
            String strItem;
            String strData, currVal = "";
            /*Это заголовок*/
            String strDataHead;
            String retData, strStatus = "49";
            Tem05 cTem05 = new Tem05();
            SPT961 cSpt961 = new SPT961();
            int Code_D1 = 0;
            int Code_D2 = 0;
            string sResVal = "";
            String[] arrItem;
            Config cConf = new Config();
            string strTime;

            arrProtocolElement = cConf.getObjectProtocol(_TermType, _TermProtocolIndex);

            String strAdd = "";
            strTime = ResData.strTime;

            if (strTime == null)
            {
                strTime = DateTime.Now.Hour + ":" + DateTime.Now.Minute + ":" + DateTime.Now.Second;
            }
            retData = _TermId.ToString() + sep + _RequestParam.ProtocolIndex + sep + strTime;

            if (_RequestParam.ReportType != null)
            {
                sepArray = "=";
                sep = ",";
                retData = "";
            }

            //Config.SysObjectProtocol Protokol;
            try
            {

                //strData = ResData.strData;
                strDataHead = ResData.strHead;

                String[] arrDataLine = ResData.strData.Split(sepArray.ToCharArray());

                foreach (string DataLine in arrDataLine)
                {
                    strData = DataLine;
                    strItem = "";
                    foreach (Config.SysObjectProtocolMap Protocol in arrProtocolElement)
                    {
                        /*Если данные*/
                        if (Protocol.Index > 0)
                        {
                            if (_TermType == "TEM05M")
                            {
                                intStart = Convert.ToInt16(Convert.ToInt32(Protocol.Pos, 16));
                                //intStart = Convert.ToInt16(Convert.ToInt32(intStart, 16)) * 2;
                                intStart = intStart * 2;

                                /*if (intStart > 1)
                                    intStart = intStart + 2;
                                */
                                strItem = strData.Substring(intStart, Protocol.Len * 2);
                                strAdd = strAdd + strItem;
                                sResVal = (GetHexToDouble(strItem).ToString());
                            }
                            else if (_TermType == "SPT961")
                            {
                                intStart = Convert.ToInt16(Protocol.Pos);
                                arrItem = strData.Split(';');
                                strItem = arrItem[intStart];

                                sResVal = Data_Hex_Asc(ref strItem);
                                //sResVal = cSpt961.getConvertHexToString(strItem);
                                //sResVal = (GetHexToDouble(strItem).ToString());
                            }
                            else if (_TermType == "TEM104")
                            {
                                intStart = Convert.ToInt16(Protocol.Pos);
                                arrItem = strData.Split(';');
                                strItem = arrItem[intStart];

                                sResVal = strItem;
                            }
                            else
                            {
                                sResVal = (GetHexToDouble(strItem).ToString());
                            }
                        }
                        else
                        {
                            intStart = Convert.ToInt16(Convert.ToInt32(Protocol.Pos, 16));
                            intStart = intStart * 2;

                            strItem = strDataHead.Substring(intStart, Protocol.Len * 2);
                            strAdd = strAdd + strItem;

                            sResVal = (GetHexToDouble(strItem).ToString());
                        }

                        /* Значения кода для выставления запятой */
                        if (Protocol.Name == "DR1") // Первый канал
                        {
                            Code_D1 = Convert.ToInt16(sResVal);

                        }

                        if (Protocol.Name == "DR2") // Второй канал
                        {
                            Code_D2 = Convert.ToInt16(sResVal);

                        }

                        if (Protocol.Comma == 1)
                        {
                            sResVal = cTem05.GetStrComma(Code_D1, Protocol.Name, sResVal);
                        }
                        if (Protocol.Comma == 2)
                        {
                            sResVal = cTem05.GetStrComma(Code_D2, Protocol.Name, sResVal);
                        }

                        /*@TODO дописать в общем виде*/
                        /* ДАнные из заголовока*/
                        if (Protocol.Name == "DOR")
                        {
                            string binaryval = "00" + Convert.ToString(Convert.ToInt32(strItem, 16), 2);
                            sResVal = binaryval.Substring(Protocol.Comma + 1, 1);
                        }
                        /* ДАнные из заголовока*/
                        if (Protocol.Name == "WTR")
                        {
                            string binaryval = "00" + Convert.ToString(Convert.ToInt32(strItem, 16), 2);
                            sResVal = binaryval.Substring(Protocol.Comma + 1, 1);
                        }
                        currVal = currVal + sep + sResVal;
                    }
                    retData = retData + sep + strStatus + currVal + sepArray;
                    currVal = "";
                }
            }
            catch(Exception e)
            {
                strStatus = "4";
            }
            //return "1;1;21:21:08;49;0;0;0;1;11;0;0;4;41;.22955;1.995;16.5179;667.859;755.027;27.147;434.3;2732.36;97429.3;44310.2;0;84.44;28.86;13.21";
            return retData ;//= retData + sep + strStatus  + currVal;
        }
示例#16
0
文件: SPT961.cs 项目: shod/Uniterm
        /// <summary>
        /// Обновляет, опрашивает состояние и получает данные с терминала 
        /// </summary>
        public void Refresh(SPort cPort)
        {
            Config cConf = new Config();
            Config.SysObjectCommand Sterm;
            string strResData = "";
            string sCommand;
            String[] arrResData; // Массив ответа
            String[] arrInfoResp; // Массив Информации
            String[] arrResPortion; // Массив ответа
            string FNC;
            DateTime dtRequest;
            String[] arrResponce = new string[0]; // Массив порций ответов
            int i_request = 1;

            /*
             * Для прохода по параметрам протокола
             */
            Config.SysObjectProtocol Sprotokol;
            /*
             * Получение массива объектов для опроса
             */
            arrObjectCommand = cConf.getObjectTypeCommand(ProtocolName);
            //arrProtocolCommand = cConf.getObjectProtocol(ProtocolName, _RequestParam.ProtocolIndex);

            string strCheck = ">";
            string retData = "";
            try
            {
                cPort.CurrentDataMode = SPort.DataMode.Hex;
                /*
                 * Проходим по набору команд
                 */
                cPort.Clear();
                int c_count = arrObjectCommand.Count;

                for (int ia = 0; ia < c_count; ia++)
                {

                    Sterm = (Config.SysObjectCommand)arrObjectCommand[ia];
                    //sCommand = Sterm.Value;

                    /*
                     * Если указан индекс, который следует опрашивать
                     * Или индекс не указан
                     */
                    if (((_RequestParam.ProtocolIndex == 0) &&  (Sterm.Mode == "auto")) || (_RequestParam.ProtocolIndex == Sterm.Index))
                    {

                        String Command = Sterm.Value;
                        String[] arrCmd = Command.Split(';');

                        int c_cmd = 1;
                        if (_RequestParam.ReportType == "period_day")
                        {
                            c_cmd = 12;
                            i_request = 2;
                        }
                        else if (_RequestParam.ReportType == "period_month")
                        {
                            c_cmd = System.DateTime.DaysInMonth(_RequestParam.DateFrom.Year, _RequestParam.DateFrom.Month);
                            i_request = 2;
                        }

                        arrResponce = new string[c_cmd];

                        bool flag_cicle = true;
                        for (int iq = 0; iq < c_cmd && flag_cicle; iq++)
                        {

                            for (int iqr = 0; iqr < i_request; iqr++)
                            {
                                if (_RequestParam.ReportType == "period_day")
                                {

                                    dtRequest = new DateTime(_RequestParam.DateFrom.Year, _RequestParam.DateFrom.Month, _RequestParam.DateFrom.Day, iq, 1, 0);
                                    _RequestDate = dtRequest;
                                    /* Подготовка сообщения */
                                    sCommand = MessagePrepare(Sterm);

                                    /* Посылка сообщения */
                                    cPort.SendData(sCommand);
                                }
                                else if (_RequestParam.ReportType == "period_month")
                                {

                                    dtRequest = new DateTime(_RequestParam.DateFrom.Year, _RequestParam.DateFrom.Month, iq+1, 0, 1, 0);
                                    _RequestDate = dtRequest;
                                    /* Подготовка сообщения */
                                    sCommand = MessagePrepare(Sterm);

                                    /* Посылка сообщения */
                                    cPort.SendData(sCommand);
                                }
                                else
                                {
                                    /* Подготовка сообщения */
                                    sCommand = MessagePrepare(Sterm);

                                    /* Посылка сообщения */
                                    cPort.SendData(sCommand);
                                }
                                Thread.Sleep(_TimeDelay);

                                ResData.strData = cPort.ReturnData();

                                /* @TODO Временно */
                                //ResData.strData
                                arrResponce[iq] = "1001101f20100209300936353533320c0938093909323031310931320933330931370c093809390931310930093009300c093709390931310930093009300c09300c09302e350c0937382e380c09302e31313138380c09352e383037370c0931352e373433350c0932340c09300c09302e3030300c1003b832";
                                /**/

                                ResData.strDataOriginal = ResData.strData;

                                if (arrResponce[iq].Length >= 2)// && ia == (c_count - 1))
                                {
                                    ResData.IsError = false;
                                    //retData = ResData.strData.Substring(0, 2);
                                    //retData = Data_Hex_Asc(ref retData);
                                    cPort.Clear();
                                    break;
                                }
                                else
                                {
                                    ResData.IsError = true;
                                    ResData.strData = "0 - Приемник не подключен"; //0 - приёмник;
                                }
                                cPort.Clear();
                            } // end for попытки

                            // Если ошибка, то прекращаем вообще запросы
                            if (ResData.IsError == true)
                            {
                                flag_cicle = false;
                                Exception myException = new Exception("SPT961 - Ошибка при получении данных.");
                                throw myException;
                                break;
                            }
                        } // end for запросов
                    }
                }

                /*
                 * Проверка на готовность ответа порта
                 */
                ResData.IsError = false;
                ResData.strData = "";
                //if (ResData.IsError == false)
                String strResponceLine; // Одна порция данных
                String res;
                string ProtocolCommand;
                int ir = 0;
                while (ir < arrResponce.Length)
                {

                    int pos;

                    strResponceLine = arrResponce[ir];

                    //strResData = ResData.strData;

                    if (strResponceLine.Length > 2)
                    {

                        res = strResponceLine.Replace(" ", "");//.Substring(4);

                        if (res.Length <= 2)
                        {
                            ResData.IsError = true;
                            ResData.strData = "1 - со счетчиком связь отсутствует";
                        }
                        else
                        {
                            //_TimeWait = Convert.ToInt16(res.Substring(2, 2)) * 500;
                            res = res.Substring(4);
                            if (res.Substring(0, 2) == "FF")
                            {
                                ResData.IsError = true;
                                ResData.strData = "1 - Связь со счетчиком отсутствует.";
                            }
                            else
                            {
                                /* Вычисление позиции старта данных */
                                //long var1;
                                //byte var2 = 7;
                                //byte var3 = Convert.ToByte(res.Substring(1, 1));
                                //var1 = (var3 & var2) + (byte)5;
                                //int start = Convert.ToInt16(var1);
                                //int start = Convert.ToInt16(ResData.strData.IndexOf("0c09"))+4;

                                /* Разделяем строку ответа на массивы
                                 и вынимаем второй массив - он и есть данные ответа
                                 */
                                arrResData = Regex.Split(strResponceLine.ToUpper(), "0C");

                                //FNC = arrResData[0]

                                /* Цикл считывания параметров
                                 // @TODO Сделать проверку на считываемый код FNC
                                 */

                                // Время показаний
                                if (_RequestParam.ReportType == "period_day")
                                {
                                    arrResPortion = Regex.Split(arrResData[1], "09");
                                    strResData = strResData + ";" + arrResPortion[4];
                                }
                                else if (_RequestParam.ReportType == "period_month")
                                {
                                    arrResPortion = Regex.Split(arrResData[1], "09");
                                    strResData = strResData + ";" + arrResPortion[1];
                                }
                                /*else
                                {
                                    arrResPortion = Regex.Split(arrResData[1], "09");
                                    strResData = strResData + ";" + arrResPortion[1] + "." + arrResPortion[2] + "." + arrResPortion[3] + " " + arrResPortion[1] + "." + arrResPortion[1];
                                }*/

                                int d_count = arrResData.Length-1;
                                for (int di = 4; di < d_count; di++)
                                {
                                    arrResPortion = Regex.Split(arrResData[di], "09");
                                    strResData = strResData + ";" + arrResPortion[1];
                                }

                                arrInfoResp = Regex.Split(arrResData[1], "09");

                                //ResData.strData = arrInfoResp[1];
                                ResData.strHead = arrResData[0];
                                /* ПРоверка на весь пакет */
                                if (strResponceLine.Length == 0)
                                {
                                    ResData.IsError = true;
                                    ResData.strData = "3 - Данные со счетчика не поступают.";
                                }
                                else if (strResponceLine.Length < 4 * 2)
                                {
                                    ResData.IsError = true;
                                    ResData.strData = "4 - Данные искажены.";
                                }
                            }
                        }

                        //strResData = strResData + ResData.strData;
                    }
                    else
                    {
                        ResData.IsError = true;
                        //ResData.strData = "00";
                    }

                    ResData.strData = ResData.strData + strResData.Replace(" ", "") + "=";
                    strResData = "";

                    ir++;
                }
                ResData.strData=ResData.strData.TrimEnd('=');
                //ResData.strData.Substring(0,ResData.strData.Length-2);
                return;

            }
            catch (Exception e)
            {
                ResData.IsError = true;
                ResData.strData = e.Message + ResData.strData;
            }
        }
示例#17
0
文件: frmMain.cs 项目: shod/Uniterm
        /// <summary>
        /// Save Log file
        /// </summary>
        /// <param name="arrLine"></param>
        private void LogErrorFileSave(ArrayList arrLine)
        {
            string strYear = DateTime.Now.Year.ToString();
            string strMonth = DateTime.Now.Month.ToString();
            string strDay = DateTime.Now.Day.ToString();

            if (arrLine.Count == 0)
            {
                return;
            }

            Config cConf = new Config();
            CFile cLogFile = new CFile();
            string DirPath = cConf.getappSettings(Config.SettingField.DataSyncDir.ToString());
            cLogFile.fileName = DirPath + "/errorTerminal.log";

            string sLine;
            foreach (string Line in arrLine)
            {
                sLine = "[" + DateTime.Now.ToUniversalTime().ToString() + "]" + Line;
                cLogFile.AddLine(sLine);
            }
            cLogFile.Write();
        }
示例#18
0
文件: frmMain.cs 项目: shod/Uniterm
        /// <summary>
        /// Save Log file
        /// </summary>
        /// <param name="arrLine"></param>
        private void LogFileSave(ArrayList arrLine)
        {
            string strYear = DateTime.Now.Year.ToString();
            string strMonth = DateTime.Now.Month.ToString();
            string strDay = DateTime.Now.Day.ToString();

            Config cConf = new Config();
            CFile cLogFile = new CFile();
            string DirPath = cConf.getappSettings(Config.SettingField.DataSyncDir.ToString());
            cLogFile.fileName = DirPath + "/log_" + strYear + strMonth + strDay + ".txt";

            string sLine;
            foreach (string Line in arrLine)
            {
                sLine = "["+DateTime.Now.ToUniversalTime().ToString() + "]" + Line;
                cLogFile.AddLine(sLine);
            }
            cLogFile.Write();
        }
示例#19
0
文件: SPT961_.cs 项目: shod/Uniterm
        /// <summary>
        /// Обновляет, опрашивает состояние и получает данные с терминала 
        /// </summary>
        public void Refresh(SPort cPort)
        {
            Config cConf = new Config();
            Config.SysObjectCommand Sterm;
            string strResData = "";
            string sCommand;
            String[] arrResData; // Массив ответа
            String[] arrInfoResp; // Массив Информации

            /*
             * Для прохода по параметрам протокола
             */
            Config.SysObjectProtocol Sprotokol;
            /*
             * Получение массива объектов для опроса
             */
            arrObjectCommand = cConf.getObjectTypeCommand(ProtocolName);
            arrProtocolCommand = cConf.getObjectProtocol(ProtocolName);

            string strCheck = ">";
            string retData = "";
            try
            {
                cPort.CurrentDataMode = SPort.DataMode.Hex;
                /*
                 * Проходим по набору команд
                 */
                cPort.Clear();
                int c_count = arrObjectCommand.Count;

                for (int ia = 0; ia < c_count; ia++)
                {
                    Sterm = (Config.SysObjectCommand)arrObjectCommand[ia];
                    sCommand = Sterm.Value;

                    cPort.SendData(sCommand);
                    Thread.Sleep(_TimeDelay);
                    ResData.strData = cPort.ReturnData();

                    if (ResData.strData.Length >= 2 && ia == (c_count-1))
                    {
                        retData = ResData.strData.Substring(0, 2);
                        //char c = (char)Convert.ToInt32(retData, 16);
                        retData = Data_Hex_Asc(ref retData);
                    }
                    else
                    {
                        ResData.IsError = true;
                        ResData.strData = "0 - Приемник не подключен"; //0 - приёмник;
                    }
                }

                /*
                 * Проверка на готовность ответа порта
                 */
                //if (retData == strCheck)
                if (1 == 1)
                {
                    string ProtocolCommand;
                    int pos;
                    cPort.Clear();
                    //int c_count = arrProtocolCommand.Count;
                    ResData.IsError = false;
                    sCommand = "";
                    foreach (Config.SysObjectProtocolMap Protocol in arrProtocolCommand)
                    {
                        cPort.Clear();
                        ProtocolCommand = Protocol.Command;
                        //sCommand = MessagePrepare(sCommand);

                        //frmMain.LogErrorFileSave(ProtocolCommand);
                        cPort.SendData(ProtocolCommand);
                        //pos = ProtocolCommand.IndexOf("0c1003");
                        //sCommand = ProtocolCommand.Substring(17, (pos - 17));

                        //Thread.Sleep(_TimeDelay);
                        Thread.Sleep(1500);
                        //Thread.Sleep(_TimeWait);
                        /* ТЕст */
                        /*if (Protocol.Index == 1)
                        {
                            ResData.strData = "1001101f0310020930093030330c093130343031303030303209a12fe00c1003bf85";
                        }
                        else if (Protocol.Index == 2)
                        {
                            ResData.strData = "1001101f0310020930093039390c093936312e303234333130333209a12fe00c1003cdc5";
                        }
                        else
                        {
                            ResData.strData = cPort.ReturnData();
                        }*/
                        ResData.strData = cPort.ReturnData().Replace(" ", "");
                        ///retData = retData + sep + Data_Hex_Dec(ref strItem);

                        /*-------------------------------------------*/

                        // TODO отключил - проверить
                        //if (ResData.strData.Length > 2)
                        //{
                        //    retData = ResData.strData.Substring(0, 2);
                        //}
                        //else
                        //{
                        //    ResData.IsError = true;
                        //    ResData.strData = "0 - Данные не поступают"; //0 - приёмник;
                        //}

                        if (ResData.strData.Length > 2)
                        {
                            String res = ResData.strData;
                            res = res.Replace(" ", "");//.Substring(4);

                            if (res.Length <= 2)
                            {
                                ResData.IsError = true;
                                ResData.strData = "1 - со счетчиком связь отсутствует";
                            }
                            else
                            {
                                //_TimeWait = Convert.ToInt16(res.Substring(2, 2)) * 500;
                                res = res.Substring(4);
                                if (res.Substring(0, 2) == "FF")
                                {
                                    ResData.IsError = true;
                                    ResData.strData = "1 - Связь со счетчиком отсутствует.";
                                }
                                else
                                {
                                    /* Вычисление позиции старта данных */
                                    //long var1;
                                    //byte var2 = 7;
                                    //byte var3 = Convert.ToByte(res.Substring(1, 1));
                                    //var1 = (var3 & var2) + (byte)5;
                                    //int start = Convert.ToInt16(var1);
                                    //int start = Convert.ToInt16(ResData.strData.IndexOf("0c09"))+4;

                                    arrResData = Regex.Split(ResData.strData, "0C");
                                    arrInfoResp = Regex.Split(arrResData[1], "09");

                                    ResData.strData = arrInfoResp[1];
                                    ResData.strHead = arrResData[0];
                                    /* ПРоверка на весь пакет */
                                    if (ResData.strData.Length == 0)
                                    {
                                        ResData.IsError = true;
                                        ResData.strData = "3 - Данные со счетчика не поступают.";
                                    }
                                    //@TODO
                                    else if (ResData.strData.Length < 4 * 2)
                                    {
                                        ResData.IsError = true;
                                        ResData.strData = "4 - Данные искажены.";
                                    }
                                }
                            }

                            strResData = strResData + ResData.strData;
                        }
                        else
                        {
                            ResData.IsError = true;
                            ResData.strData = "00";
                            break;
                        }
                    }
                    ResData.strData = strResData;
                    return;

                }
            }
            catch (Exception e)
            {
                ResData.IsError = true;
                ResData.strData = e.Message;
            }
        }