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)); } }
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); }
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); }
/// <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(); }