public InputOutputItem(string name, DIStruct signal) { this.Name = name; _index = signal.indxArrDI; signalType = ESignalType.DI; AssignedSignalName = signal.NameDI; }
public WatchItem(int index, ESignalType type) { this.index = index; this.signalType = type; switch (type) { case ESignalType.DI: DIStruct signaldi = DIStruct.FindByIndex(index); signaldi.PropertyChanged += Signal_PropertyChanged; break; case ESignalType.AI: AIStruct signalai = AIStruct.FindByIndex(index); signalai.PropertyChanged += Signal_PropertyChanged; break; case ESignalType.DO: DOStruct signaldo = DOStruct.FindByIndex(index); signaldo.PropertyChanged += Signal_PropertyChanged; break; case ESignalType.AO: AOStruct signalao = AOStruct.FindByIndex(index); signalao.PropertyChanged += Signal_PropertyChanged; break; } }
/// <summary> /// актуализировать привязку /// </summary> public void RefreshLink() { if (index > -1) { switch (signalType) { case ESignalType.DI: DIStruct signaldi = DIStruct.FindByIndex(index); signaldi.PropertyChanged += Signal_PropertyChanged; break; case ESignalType.AI: AIStruct signalai = AIStruct.FindByIndex(index); signalai.PropertyChanged += Signal_PropertyChanged; break; case ESignalType.DO: DOStruct signaldo = DOStruct.FindByIndex(index); signaldo.PropertyChanged += Signal_PropertyChanged; break; case ESignalType.AO: AOStruct signalao = AOStruct.FindByIndex(index); signalao.PropertyChanged += Signal_PropertyChanged; break; } } }
public DITableViewModel(DIStruct[] table) { DIStruct[] DIViewModels = new DIStruct[table.Length]; for (int i = 0; i < table.Length; i++) { DIViewModels[i] = table[i]; } DIs = DIViewModels; }
/// <summary> /// Установить/снять напряжение на скеции шин извне /// </summary> /// <param name="value"></param> public void SetBusState(bool value) { if (bs == null) { bs = new DIStruct(); } if (BusSecIndex == -1) { bs.ValDI = value; } }
private void Filter_Func(object sender, FilterEventArgs e) { DIStruct item = e.Item as DIStruct; if (item != null) { if (item.NameDI.ToLower().Contains(nameFilter.ToLower())) { e.Accepted = true; } else { e.Accepted = false; } } }
/// <summary> /// Обновление ссылок /// </summary> public void UpdateRefs() { ABB = DOStruct.FindByIndex(_ABBindxArrDO); ABO = DOStruct.FindByIndex(_ABOindxArrDO); ABO2 = DOStruct.FindByIndex(_ABO2indxArrDO); MBC12 = DIStruct.FindByIndex(_MBC12indxArrDI); MBC22 = DIStruct.FindByIndex(_MBC22indxArrDI); ECB = DIStruct.FindByIndex(_ECBindxArrDI); ECO = DIStruct.FindByIndex(_ECO12indxArrDI); CT_AI = AIStruct.FindByIndex(_CTindxArrDI); MBC11 = DIStruct.FindByIndex(_MBC11indxArrDI); MBC21 = DIStruct.FindByIndex(_MBC21indxArrDI); ECx = DIStruct.FindByIndex(_ECxindxArrDI); ECO11 = DIStruct.FindByIndex(_ECO11indxArrDI); EC = DIStruct.FindByIndex(_ECindxArrDI); /*current = AIStruct.FindByIndex(_current_indexArrAi); * RPM = AIStruct.FindByIndex(_RPMindxArrAI);*/ }
private void Filter_Func(object sender, FilterEventArgs e) { DIStruct item = e.Item as DIStruct; if (item != null) { if (item.NameDI == "") { e.Accepted = !_hideEmpty; } else { if ((item.NameDI.ToLower().Contains(_nameFilter.ToLower())) && (item.TegDI.ToLower().Contains(_tagFilter.ToLower()))) { e.Accepted = true; } else { e.Accepted = false; } } } }
private static void ReadSignals(OleDbConnection conn) { OleDbCommand cmd = new OleDbCommand { Connection = conn }; // Get all Sheets in Excel File DataTable dtSheet = conn.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, null); // Loop through all Sheets to get data string sheetName = ""; //==================================================== ЧТЕНИЕ ТАБЛИЦЫ СИГНАЛОВ ========================================================== foreach (DataRow dr in dtSheet.Rows) { sheetName = dr["TABLE_NAME"].ToString(); if (sheetName.Contains("Таблица сигналов")) { //LogViewModel.WriteLine("Таблица сигналов найдена, чтение данных..."); LogWriter.AppendLog("Таблица сигналов найдена, чтение данных..."); break; } } // Get all rows from the Sheet cmd.CommandText = "SELECT * FROM [" + sheetName + "]"; DataTable dt = new DataTable { TableName = sheetName }; OleDbDataAdapter da = new OleDbDataAdapter(cmd); da.Fill(dt); // ds.Tables.Add(dt); foreach (DataColumn col in dt.Columns) { LogWriter.AppendLog(col.ColumnName); } //LogViewModel.WriteLine(col.ColumnName); //--- тип сигнала ai,di,do --- string signalType = ""; //---адрес сигнала --- double currentAddr = 0; //---- номер бита если попадется int bit = 0; //---- string tagName = ""; string signalName = ""; //--- номер сигнала, пригодится--- int NSign = 0; for (int i = 0; i < dt.Rows.Count; i++) { // mod =(string)dt.Rows[i].ItemArray[1]; if (!(dt.Rows[i].ItemArray[1] is DBNull)) { signalType = (string)dt.Rows[i].ItemArray[1]; } // addr = (string)dt.Rows[i].ItemArray[6]; // if (!(dt.Rows[i].ItemArray[6] is DBNull)) if (dt.Rows[i].ItemArray[6] is double) { currentAddr = (double)dt.Rows[i].ItemArray[6]; } else if (dt.Rows[i].ItemArray[6] is string) { currentAddr = double.Parse((string)dt.Rows[i].ItemArray[6]); } try { if (dt.Rows[i].ItemArray[7] is string) { bit = int.Parse((string)dt.Rows[i].ItemArray[7]); } else if (dt.Rows[i].ItemArray[7] is double) { bit = (int)((double)dt.Rows[i].ItemArray[7]); } else { bit = 0; } if (dt.Rows[i].ItemArray[8] is string) { NSign = int.Parse((string)dt.Rows[i].ItemArray[8]); } else if (dt.Rows[i].ItemArray[8] is double) { NSign = (int)((double)dt.Rows[i].ItemArray[8]); } else { NSign = 0; } } catch (Exception ex) { LogWriter.AppendLog(ex.Message); } try { tagName = (string)dt.Rows[i].ItemArray[4]; } catch { tagName = ""; } try { signalName = (string)dt.Rows[i].ItemArray[5]; } catch { signalName = ""; } if (signalType.ToLower() == "ai" && signalName != "") { AIStruct ai = new AIStruct { En = true, NameAI = signalName, TegAI = tagName, PLCAddr = (int)currentAddr - 300000 + 40000 }; AIStruct.items.Add(ai); //LogViewModel.WriteLine("прочитан сигнал AI: " + ai.NameAI); } if (signalType.ToLower() == "di" && signalName != "") { DIStruct di = new DIStruct { En = true, NameDI = signalName, TegDI = tagName, PLCAddr = (int)currentAddr - 300000 + 40000, indxBitDI = bit, Nsign = NSign }; DIStruct.items.Add(di); } if (signalType.ToLower() == "do" && signalName != "") { DOStruct _do = new DOStruct { En = true, TegDO = tagName, NameDO = signalName, PLCAddr = (int)currentAddr - 400000, indxBitDO = bit, Nsign = NSign }; DOStruct.items.Add(_do); } } cmd = null; }
}//readvs /// <summary> /// чтение настроек клапанов /// </summary> /// <param name="conn"></param> private static void ReadKL(OleDbConnection conn) { //---------- настройки чтения ------ int skipLines = 4; //количество пропускаемых строк заголовка int nNameCol = 0; //номер столбца с именем int nDICol = 8; //номер столбца со ссылками на DI int strideDI = 2; //количество строк на однин клапан int shiftDIlink = 1000; //ссылки на DI имеют смещение на 1000 int nDOCol = 5; //номер столбца со ссылками на DO int strideDO = 2; //количество строк на однин клпан int shiftDOlink = 4000; //ссылки на DO смещаются на 4000 //наименования используемых таблиц // string tableName = "Настр. клапанов"; string DITableName = "DI клапанов"; string DOTableName = "DO клапанов"; OleDbCommand cmd = new OleDbCommand { Connection = conn }; // Get all Sheets in Excel File DataTable dtSheet = conn.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, null); //======================================================================= чтение таблицы DI задвижек ===================================== string sheetName = ""; foreach (DataRow dr in dtSheet.Rows) { sheetName = dr["TABLE_NAME"].ToString(); if (sheetName.Contains(DITableName)) { //LogViewModel.WriteLine("Таблица DI вспомсистем найдена, чтение данных..."); LogWriter.AppendLog("Таблица DI вспомсистем найдена, чтение данных..."); break; } } // Get all rows from the Sheet cmd.CommandText = "SELECT * FROM [" + sheetName + "]"; DataTable dataTable = new DataTable { TableName = sheetName }; OleDbDataAdapter dataAdapter = new OleDbDataAdapter(cmd); dataAdapter.Fill(dataTable); KLTableViewModel.KL.Clear(); //================= for (int i = 0; i < dataTable.Rows.Count / strideDI; i++) { int rowindex = i * strideDI + skipLines; KLStruct kl; if (dataTable.Rows[rowindex].ItemArray[nNameCol] is DBNull) //название пустое, прекращаем чтение { break; } else { kl = new KLStruct { Description = (string)dataTable.Rows[rowindex].ItemArray[0] }; if (kl.Description.Length < 2) { break; } kl.En = true; KLTableViewModel.KL.Add(kl); } for (int j = 0; j < strideDI; j++) { object param = dataTable.Rows[rowindex + j].ItemArray[nDICol]; int iParam = 0; if (param is string) { iParam = int.Parse((string)(param)); } else if (param is double) { iParam = (int)((double)param); } if (iParam == 0) { continue; } int refValue = DIStruct.FindByNsign(iParam + shiftDIlink); switch (j) { case 0: kl.OKCindxArrDI = refValue; break; //клапан открыт case 1: kl.CKCindxArrDI = refValue; break; //клапан закрыт } } } foreach (DataRow dr in dtSheet.Rows) { sheetName = dr["TABLE_NAME"].ToString(); if (sheetName.Contains(DOTableName)) { //LogViewModel.WriteLine("Таблица DO вспомсистем найдена, чтение данных..."); LogWriter.AppendLog("Таблица DO вспомсистем найдена, чтение данных..."); break; } } // Get all rows from the Sheet cmd.CommandText = "SELECT * FROM [" + sheetName + "]"; dataTable = new DataTable { TableName = sheetName }; dataAdapter.Fill(dataTable); for (int i = 0; i < KLTableViewModel.KL.Count; i++) { int rowindex = i * strideDO + skipLines; for (int j = 0; j < strideDO; j++) { object param = dataTable.Rows[rowindex + j].ItemArray[nDOCol]; int iParam = 0; if (param is string) { iParam = int.Parse((string)(param)); } else if (param is double) { iParam = (int)((double)param); } if (iParam == 0) { continue; } int refValue = DOStruct.FindByNsign(iParam + shiftDOlink); switch (j) { case 0: KLTableViewModel.KL[i].DOBindxArrDO = refValue; break; //открыть case 1: KLTableViewModel.KL[i].DKBindxArrDO = refValue; break; //закрыть } } } }//readkl
}//readzd /// <summary> /// чтение настроек вспомсистем /// </summary> /// <param name="conn"></param> private static void ReadVS(OleDbConnection conn) { //---------- настройки чтения ------ int skipLines = 4; //количество пропускаемых строк заголовка int nNameCol = 0; //номер столбца с именем int nDICol = 8; //номер столбца со ссылками на DI int strideDI = 3; //количество строк на одну вспомку int shiftDIlink = 1000; //ссылки на DI имеют смещение на 1000 int nDOCol = 5; //номер столбца со ссылками на DO int strideDO = 2; //количество строк на одну вспомку int shiftDOlink = 4000; //ссылки на DO смещаются на 4000 //наименования используемых таблиц string vsDITableName = "DI вспомсистем"; string vsDOTableName = "DO вспомсистем"; OleDbCommand cmd = new OleDbCommand { Connection = conn }; // Get all Sheets in Excel File DataTable dtSheet = conn.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, null); //======================================================================= чтение таблицы DI задвижек ===================================== string sheetName = ""; foreach (DataRow dr in dtSheet.Rows) { sheetName = dr["TABLE_NAME"].ToString(); if (sheetName.Contains(vsDITableName)) { //LogViewModel.WriteLine("Таблица DI вспомсистем найдена, чтение данных..."); LogWriter.AppendLog("Таблица DI вспомсистем найдена, чтение данных..."); break; } } // Get all rows from the Sheet cmd.CommandText = "SELECT * FROM [" + sheetName + "]"; DataTable dataTable = new DataTable { TableName = sheetName }; OleDbDataAdapter dataAdapter = new OleDbDataAdapter(cmd); dataAdapter.Fill(dataTable); VSTableViewModel.VS.Clear(); //================= for (int i = 0; i < dataTable.Rows.Count / strideDI; i++) { int rowindex = i * strideDI + skipLines; VSStruct vs; if (dataTable.Rows[rowindex].ItemArray[nNameCol] is DBNull) //название пустое, прекращаем чтение { break; } else { vs = new VSStruct { Description = (string)dataTable.Rows[rowindex].ItemArray[0] }; if (vs.Description.Length < 2) { break; } vs.En = true; VSTableViewModel.VS.Add(vs); } for (int j = 0; j < strideDI; j++) { object param = dataTable.Rows[rowindex + j].ItemArray[nDICol]; int iParam = 0; if (param is string) { iParam = int.Parse((string)(param)); } else if (param is double) { iParam = (int)((double)param); } if (iParam == 0) { continue; } switch (j) { case 0: vs.ECindxArrDI = DIStruct.FindByNsign(iParam + shiftDIlink); break; //EC case 1: vs.MPCindxArrDI = DIStruct.FindByNsign(iParam + shiftDIlink); break; //MPC case 2: vs.PCindxArrDI = DIStruct.FindByNsign(iParam + shiftDIlink); break; //PC } } } foreach (DataRow dr in dtSheet.Rows) { sheetName = dr["TABLE_NAME"].ToString(); if (sheetName.Contains(vsDOTableName)) { //LogViewModel.WriteLine("Таблица DO вспомсистем найдена, чтение данных..."); LogWriter.AppendLog("Таблица DO вспомсистем найдена, чтение данных..."); break; } } // Get all rows from the Sheet cmd.CommandText = "SELECT * FROM [" + sheetName + "]"; dataTable = new DataTable { TableName = sheetName }; dataAdapter.Fill(dataTable); for (int i = 0; i < VSTableViewModel.VS.Count; i++) { int rowindex = i * strideDO + skipLines; for (int j = 0; j < strideDO; j++) { object param = dataTable.Rows[rowindex + j].ItemArray[nDOCol]; int iParam = 0; if (param is string) { iParam = int.Parse((string)(param)); } else if (param is double) { iParam = (int)((double)param); } if (iParam == 0) { continue; } switch (j) { case 0: VSTableViewModel.VS[i].ABBindxArrDO = DOStruct.FindByNsign(iParam + shiftDOlink); break; //вкл case 1: VSTableViewModel.VS[i].ABOindxArrDO = DOStruct.FindByNsign(iParam + shiftDOlink); break; //выкл } } } }//readvs
/// <summary> /// чтение настроек задвижек /// </summary> /// <param name="conn"></param> private static void ReadZD(OleDbConnection conn) { OleDbCommand cmd = new OleDbCommand { Connection = conn }; // Get all Sheets in Excel File DataTable dtSheet = conn.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, null); //======================================================================= чтение таблицы DI задвижек ===================================== string sheetName = ""; foreach (DataRow dr in dtSheet.Rows) { sheetName = dr["TABLE_NAME"].ToString(); if (sheetName.Contains("DI задвижек")) { //LogViewModel.WriteLine("Таблица задвижек найдена, чтение данных..."); LogWriter.AppendLog("Таблица задвижек найдена, чтение данных..."); break; } } // Get all rows from the Sheet cmd.CommandText = "SELECT * FROM [" + sheetName + "]"; DataTable dt = new DataTable { TableName = sheetName }; OleDbDataAdapter da = new OleDbDataAdapter(cmd); ZDTableViewModel.ZDs.Clear(); da.Fill(dt); object[] zdparams = new object[7]; //================= for (int i = 0; i < dt.Rows.Count / 8; i++) { int rowindex = i * 8 + 4; ZDStruct zd; if (dt.Rows[rowindex].ItemArray[0] is DBNull) //название задвижки пустое, прекращаем чтение { break; } else { zd = new ZDStruct { Description = (string)dt.Rows[rowindex].ItemArray[0] }; if (zd.Description.Length < 2) { break; } zd.En = true; ZDTableViewModel.ZDs.Add(zd); } for (int j = 0; j < 8; j++) { object zdParam = dt.Rows[rowindex + j].ItemArray[8]; int iParam = 0; if (zdParam is string) { iParam = int.Parse((string)(zdParam)); } else if (zdParam is double) { iParam = (int)((double)zdParam); } if (iParam == 0) { continue; } switch (j) { case 0: zd.OKCindxArrDI = DIStruct.FindByNsign(iParam + 1000); break; //КВО case 1: zd.CKCindxArrDI = DIStruct.FindByNsign(iParam + 1000); break; //КВЗ case 2: zd.ODCindxArrDI = DIStruct.FindByNsign(iParam + 1000); break; //МПО case 3: zd.CDCindxArrDI = DIStruct.FindByNsign(iParam + 1000); break; //МПЗ case 4: zd.DCindxArrDI = DIStruct.FindByNsign(iParam + 1000); break; //Дист case 5: zd.VoltindxArrDI = DIStruct.FindByNsign(iParam + 1000); break; //напряж case 6: zd.MCindxArrDI = DIStruct.FindByNsign(iParam + 1000); break; //муфта case 7: zd.OPCindxArrDI = DIStruct.FindByNsign(iParam + 1000); break; //авария } } } foreach (DataRow dr in dtSheet.Rows) { sheetName = dr["TABLE_NAME"].ToString(); if (sheetName.Contains("DO задвижек")) { //LogViewModel.WriteLine("Таблица DO задвижек найдена, чтение данных..."); LogWriter.AppendLog("Таблица DO задвижек найдена, чтение данных..."); break; } } // Get all rows from the Sheet cmd.CommandText = "SELECT * FROM [" + sheetName + "]"; dt = new DataTable { TableName = sheetName }; //OleDbDataAdapter da = new OleDbDataAdapter(cmd); da.Fill(dt); for (int i = 0; i < ZDTableViewModel.ZDs.Count; i++) { int rowindex = i * 4 + 4; for (int j = 0; j < 4; j++) { object zdParam = dt.Rows[rowindex + j].ItemArray[5]; int iParam = 0; if (zdParam is string) { iParam = int.Parse((string)(zdParam)); } else if (zdParam is double) { iParam = (int)((double)zdParam); } if (iParam == 0) { continue; } switch (j) { case 0: ZDTableViewModel.ZDs[i].DOBindxArrDO = DOStruct.FindByNsign(iParam + 4000); break; //открыть case 1: ZDTableViewModel.ZDs[i].DKBindxArrDO = DOStruct.FindByNsign(iParam + 4000); break; //закрыть case 2: ZDTableViewModel.ZDs[i].DCBindxArrDO = DOStruct.FindByNsign(iParam + 4000); break; //стоп case 3: ZDTableViewModel.ZDs[i].DCBZindxArrDO = DOStruct.FindByNsign(iParam + 4000); break; //стоп закрытия } } } }//readzd
public DITableViewModel() { DIs = new DIStruct[1]; _DIs[0] = new DIStruct(); _DIs[0].NameDI = "reserved"; }
void ReadTableDI(StreamReader reader, out int count) { count = 0; string line; // CultureInfo culture = new CultureInfo("ru-RU"); CultureInfo culture = new CultureInfo("en-US"); //считываем страницу DI try { reader.ReadLine();//пропускаем строку с заголовками List <DIStruct> listDI = new List <DIStruct>(); while (!reader.EndOfStream) { line = reader.ReadLine(); // if (!line.Contains(pageSeparator)) // { string[] values = line.Split('\t'); if (values.Count() < 11) { System.Windows.Forms.MessageBox.Show("Ошибка чтения файла"); } DIStruct di = new DIStruct(); di.En = bool.Parse(values[0]); di.indxArrDI = int.Parse(values[1]); di.OPCtag = values[2]; di.PLCAddr = int.Parse(values[3]); di.indxBitDI = int.Parse(values[4]); di.Forced = bool.Parse(values[5]); di.ForcedValue = bool.Parse(values[6]); di.ValDI = bool.Parse(values[7]); di.InvertDI = bool.Parse(values[8]); if (values.Length > 9) { di.TegDI = values[9]; } if (values.Length > 10) { di.NameDI = values[10]; } listDI.Add(di); // } // else // { // break; // } } count = listDI.Count; /// DIStruct.items.Clear(); foreach (DIStruct di in listDI) { DIStruct.items.Add(di); } //DITableViewModel.Instance.Init(DIStruct.items); // dataGridDI.ItemsSource = DITableViewModel.Instance.viewSource.View; //обновление ссылок foreach (KLStruct kl in KLTableViewModel.KL) { kl.UpdateRefs(); } foreach (ZDStruct zd in ZDTableViewModel.ZDs) { zd.UpdateRefs(); } foreach (VSStruct vs in VSTableViewModel.VS) { vs.UpdateRefs(); } foreach (MPNAStruct mpna in MPNATableViewModel.MPNAs) { mpna.UpdateRefs(); } foreach (USOCounter counter in CountersTableViewModel.Counters) { counter.Refresh(); } foreach (WatchItem item in WatchItem.Items) { item.RefreshLink(); } } catch (Exception ex) { System.Windows.Forms.MessageBox.Show("Ошибка импорта таблицы DI:\n\r" + ex.Message); } }
public WatchItem(DIStruct signal) { index = signal.indxArrDI; signalType = ESignalType.DI; signal.PropertyChanged += Signal_PropertyChanged; }