diff --git a/ConvertMoels/BoolRBConvert.cs b/ConvertMoels/BoolRBConvert.cs index e0b463f..4c05bf0 100644 --- a/ConvertMoels/BoolRBConvert.cs +++ b/ConvertMoels/BoolRBConvert.cs @@ -12,9 +12,9 @@ namespace DyeingComputer.ConvertMoels { public object Convert(object value, Type targetType, object parameter, CultureInfo culture) { - String G = value.ToString(); + bool G =(Boolean) value; // bool G = (bool)value; - if (G == "False")//判断单元格值是否为零 + if (!G)//判断单元格值是否为零 { return "";//零返回 } @@ -26,7 +26,7 @@ namespace DyeingComputer.ConvertMoels public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture) { - return null; + return ""; } } } diff --git a/ConvertMoels/IORBConvert.cs b/ConvertMoels/IORBConvert.cs index 222f651..6786d93 100644 --- a/ConvertMoels/IORBConvert.cs +++ b/ConvertMoels/IORBConvert.cs @@ -14,13 +14,13 @@ namespace DyeingComputer.ConvertMoels { String G = value.ToString(); // bool G = (bool)value; - if ((G == "AI")||(G == "DI"))//判断单元格值是否为零 + if ((G == "AI")||(G == "DO"))//判断单元格值是否为零 { return "green";//零返回 } else { - return "red";//非零返回红色 + return "blue";//非零返回红色 } } diff --git a/View/InOutView.xaml b/View/InOutView.xaml index 38d5541..94978c7 100644 --- a/View/InOutView.xaml +++ b/View/InOutView.xaml @@ -67,7 +67,13 @@ diff --git a/ViewModel/MainWindowViewModel.cs b/ViewModel/MainWindowViewModel.cs index df66bdc..6fb66ab 100644 --- a/ViewModel/MainWindowViewModel.cs +++ b/ViewModel/MainWindowViewModel.cs @@ -94,7 +94,7 @@ namespace DyeingComputer.ViewModel { DispatcherTimer timer1s = new DispatcherTimer//初始化循环,每1秒调用一次Tick { - Interval = TimeSpan.FromSeconds(1)//秒 + Interval = TimeSpan.FromSeconds(0.5)//秒 }; timer1s.Tick += Tick_Event_1S; timer1s.Start(); @@ -165,8 +165,12 @@ namespace DyeingComputer.ViewModel private bool LINK_OK = false; private int LINK_RUN = 0; private int LINK_ERR = 0; - bool[] DQ = new bool[12]; - ushort DQ_L = 12; + bool[] DQ = new bool[128]; + ushort DQ_L = 128; + bool[] DO = new bool[128]; + ushort DO_L = 128; + readonly byte slaveId = 1; + private async void Modbus_link() { await Task.Run(() => @@ -178,21 +182,22 @@ namespace DyeingComputer.ViewModel // write three registers LINK_RUN++; - // try + try { - - byte slaveId = 1; - ushort startAddress = 46001; - ushort[] registers = new ushort[] { 1, 2, 3 }; + // ushort startAddress = 46001; + // ushort[] registers = new ushort[] { 1, 2, 3 }; // master.WriteMultipleRegisters(slaveId, startAddress, registers); - // bool[] x = master.ReadInputs(slaveId, 1001, 100); - DQ = master.ReadCoils(slaveId,0, DQ_L); + + DO = master.ReadCoils(slaveId, 01000, DO_L); + DQ = master.ReadCoils(slaveId, 00000, DQ_L); + LINK_OK=true; } - // catch (Exception ex) + catch (Exception ex) { + LINK_OK=false; LINK_ERR++; // LogGing.LogGingDATA(ex.Message); Name_err = "PLC"+Properties.Resources.Connectionlost; @@ -213,7 +218,7 @@ namespace DyeingComputer.ViewModel { SQLiteHelpers = new SQLiteHelper(DBAddress); //数据库连接路径 SQLiteHelpers.Open(); //打开数据库 - dt_d = SQLiteHelpers.ExecuteDataSet("select * from IOName where type='DI' OR type='DO'", null).Tables[0]; //读取表写入缓存 + dt_d = SQLiteHelpers.ExecuteDataSet("select * from IOName where ID>'2000' AND ID<'4000'", null).Tables[0]; //读取表写入缓存 dt_a = SQLiteHelpers.ExecuteDataSet("select * from IOName where type='AI' OR type='AO'", null).Tables[0]; dt_m = SQLiteHelpers.ExecuteDataSet("select * from IOName where type='M'", null).Tables[0]; SQLiteHelpers.Close(); @@ -223,14 +228,12 @@ namespace DyeingComputer.ViewModel { await Task.Run(() => { - - for (ushort i = 0; i < DQ_L; i++) - { + for (ushort i = 0; i < DO_L; i++) { updata_dtd((i + 2001).ToString(), DO[i]); } + for (ushort i = 0; i < DQ_L; i++) { updata_dtd((i + 3001).ToString(), DQ[i]); } + }); - //updata_dtd(i.ToString(), DQ[i]); - - } - updata_dtd("1", false); + await Task.Run(() => + { SYSData_A = ToObservableCollection(dt_a); SYSData_D = ToObservableCollection(dt_d); SYSData_M = ToObservableCollection(dt_m); @@ -266,12 +269,17 @@ namespace DyeingComputer.ViewModel } void updata_dtd(string key, bool Value)//更新D寄存器 { - DataRow[] arrRows = dt_d.Select("ID=" + key); + DataRow[] arrRows = dt_d.Select("ID='" + key+"'"); int index = dt_d.Rows.IndexOf(arrRows[0]); - DataRow drEmployee = dt_d.Rows[index]; - drEmployee.BeginEdit(); - drEmployee["DIO"] = Value; - drEmployee.EndEdit(); + if (index != -1) + { + DataRow drEmployee = dt_d.Rows[index]; + drEmployee.BeginEdit(); + drEmployee["DIO"] = Value; + drEmployee.EndEdit(); + drEmployee.AcceptChanges(); + drEmployee.ClearErrors(); + } } void updata_dta(string key, int Value)//更新A寄存器 {