예제 #1
0
파일: XmlMaker.cs 프로젝트: YSheldon/cdef
 private string EncodeBaseType(CTerm type)
 {
     if (type is CPrim)
     {
         return("." + EncodePrim((CPrim)type));
     }
     else if (type is CTypeRef)
     {
         return("$" + ((CTypeRef)type).Name);
     }
     else
     {
         return("#" + AddUnnamed((CBrace)type));
     }
 }
예제 #2
0
파일: XmlMaker.cs 프로젝트: YSheldon/cdef
        private CTerm StripTypeAttr(CTerm core, out string attr)
        {
            CTerm inner;

            if (core is CAttrTerm)
            {
                CAttrTerm attrTerm = (CAttrTerm)core;
                inner = attrTerm.CoreType;
                attr  = attrTerm.AttrStr;
            }
            else
            {
                inner = core;
                attr  = "";
            }
            return(inner);
        }
예제 #3
0
파일: Translator.cs 프로젝트: YSheldon/cdef
        private CTerm WithAttr(CTerm type, IDiaSymbol sym)
        {
            SortedSet <TypeAttr> attrs = new SortedSet <TypeAttr>();

            if (sym.constType == 1)
            {
                attrs.Add(TypeAttrs.Const);
            }
            if (sym.volatileType == 1)
            {
                attrs.Add(TypeAttrs.Volatile);
            }
            if (sym.unalignedType == 1)
            {
                attrs.Add(TypeAttrs.Unaligned);
            }

            return(attrs.Any() ? new CAttrTerm(type, attrs) : type);
        }
예제 #4
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 + "/n/r" + e.TargetSite, "Ошибка!", MessageBoxButtons.OK, MessageBoxIcon.Stop);
                lblInfo.Text = "Ошибка в работе системы!";
            }
            statusProgress.Visible = false;
            lblTCount.Text         = _tCount.ToString();
            lblError.Text          = _tError.ToString();
        }