using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows; using System.Windows.Media; using System.Windows.Threading; using FujianEarthquake.Common; using FujianEarthquake.DataAccess; using FujianEarthquake.Views.UserControls; namespace FujianEarthquake.ViewModels { public class ShoreBaseStationControlViewModel : NotifyBase { public CommandBase ShoreBaseStationSwitchCommand { get; set; } public CommandBase ParaSettingCommand { get; set; } public CommandBase ProSettingCommand { get; set; } public CommandBase ResetDataCommand { get; set; } public ShoreBaseStationControlViewModel() { #region Command Set this.ShoreBaseStationSwitchCommand = new CommandBase(); this.ShoreBaseStationSwitchCommand.DoExcute = new Action(ShoreBaseStationSwitch); this.ShoreBaseStationSwitchCommand.DoCanExcute = new Func((o) => true); this.ParaSettingCommand = new CommandBase(); this.ParaSettingCommand.DoExcute = new Action(ParaSetting); this.ParaSettingCommand.DoCanExcute = new Func((o) => true); this.ProSettingCommand = new CommandBase(); this.ProSettingCommand.DoExcute = new Action(ProSetting); this.ProSettingCommand.DoCanExcute = new Func((o) => true); this.ResetDataCommand = new CommandBase(); this.ResetDataCommand.DoExcute = new Action(ResetData); this.ResetDataCommand.DoCanExcute = new Func((o) => true); #endregion #region DispatcherTimer Set timerOutputPowerOpenMsgHidden.Interval = TimeSpan.FromSeconds(2); timerOutputPowerOpenMsgHidden.Tick += TimerOutputPowerOpenMsgHidden_Tick; timerOutputPowerCloseMsgHidden.Interval = TimeSpan.FromSeconds(2); timerOutputPowerCloseMsgHidden.Tick += TimerOutputPowerCloseMsgHidden_Tick; timerOverVolProPowerOpenMsgHidden.Interval = TimeSpan.FromSeconds(2); timerOverVolProPowerOpenMsgHidden.Tick += TimerOverVolProPowerOpenMsgHidden_Tick; timerOverVolProPowerCloseMsgHidden.Interval = TimeSpan.FromSeconds(2); timerOverVolProPowerCloseMsgHidden.Tick += TimerOverVolProPowerCloseMsgHidden_Tick; timerOverCurProPowerOpenMsgHidden.Interval = TimeSpan.FromSeconds(2); timerOverCurProPowerOpenMsgHidden.Tick += TimerOverCurProPowerOpenMsgHidden_Tick; timerOverCurProPowerCloseMsgHidden.Interval = TimeSpan.FromSeconds(2); timerOverCurProPowerCloseMsgHidden.Tick += TimerOverCurProPowerCloseMsgHidden_Tick; timerParaSettingMsgHidden.Interval = TimeSpan.FromSeconds(2); timerParaSettingMsgHidden.Tick += TimerParaSettingMsgHidden_Tick; timerProSettingMsgHidden.Interval = TimeSpan.FromSeconds(2); timerProSettingMsgHidden.Tick += TimerProSettingMsgHidden_Tick; timerOutputPowerOpen.Interval = TimeSpan.FromSeconds(20); timerOutputPowerOpen.Tick += TimerOutputPowerOpen_Tick; timerOutputPowerClose.Interval = TimeSpan.FromSeconds(20); timerOutputPowerClose.Tick += TimerOutputPowerClose_Tick; timerOverVolProPowerOpen.Interval = TimeSpan.FromSeconds(20); timerOverVolProPowerOpen.Tick += TimerOverVolProPowerOpen_Tick; timerOverVolProPowerClose.Interval = TimeSpan.FromSeconds(20); timerOverVolProPowerClose.Tick += TimerOverVolProPowerClose_Tick; timerOverCurProPowerOpen.Interval = TimeSpan.FromSeconds(20); timerOverCurProPowerOpen.Tick += TimerOverCurProPowerOpen_Tick; timerOverCurProPowerClose.Interval = TimeSpan.FromSeconds(20); timerOverCurProPowerClose.Tick += TimerOverCurProPowerClose_Tick; timerParaSetting.Interval = TimeSpan.FromSeconds(20); timerParaSetting.Tick += TimerParaSetting_Tick; timerProSetting.Interval = TimeSpan.FromSeconds(20); timerProSetting.Tick += TimerProSetting_Tick; #endregion } #region SendMsg Define private byte powerAddress { get; set; } //电源地址 private byte functionCode { get; set; } //功能码 private byte[] startingRegisterAddress { get; set; } //起始寄存器地址 private byte[] registerNumber { get; set; } //寄存器个数 private byte[] checkCodeCRC { get; set; } //校验码 private List checkByte { get; set; } = new List(); //校验码Byte private List sendBytes { get; set; } = new List(); //发送数据 #endregion #region Timer Define public DispatcherTimer timerOutputPowerOpenMsgHidden = new DispatcherTimer(); public DispatcherTimer timerOutputPowerCloseMsgHidden = new DispatcherTimer(); public DispatcherTimer timerOverVolProPowerOpenMsgHidden = new DispatcherTimer(); public DispatcherTimer timerOverVolProPowerCloseMsgHidden = new DispatcherTimer(); public DispatcherTimer timerOverCurProPowerOpenMsgHidden = new DispatcherTimer(); public DispatcherTimer timerOverCurProPowerCloseMsgHidden = new DispatcherTimer(); public DispatcherTimer timerParaSettingMsgHidden = new DispatcherTimer(); public DispatcherTimer timerProSettingMsgHidden = new DispatcherTimer(); public DispatcherTimer timerOutputPowerOpen = new DispatcherTimer(); public DispatcherTimer timerOutputPowerClose = new DispatcherTimer(); public DispatcherTimer timerOverVolProPowerOpen = new DispatcherTimer(); public DispatcherTimer timerOverVolProPowerClose = new DispatcherTimer(); public DispatcherTimer timerOverCurProPowerOpen = new DispatcherTimer(); public DispatcherTimer timerOverCurProPowerClose = new DispatcherTimer(); public DispatcherTimer timerParaSetting = new DispatcherTimer(); public DispatcherTimer timerProSetting = new DispatcherTimer(); #endregion #region Para Set public float setVoltageValue=0.0f; public float setCurrentValue=0.0f; private void TimerParaSettingMsgHidden_Tick(object sender, EventArgs e) { ParaSettingMsgVisibility = Visibility.Hidden; // 停止定时器 (sender as DispatcherTimer).Stop(); } private void TimerParaSetting_Tick(object sender, EventArgs e) { if (!ParaSettingIsReceived) { ParaSettingMsgVisibility = Visibility.Visible; ParaSettingMsg = "设置电压电流值发送成功,但未收到回复!"; timerParaSettingMsgHidden.Start(); ParaSettingMsgForeground = new SolidColorBrush(Colors.Red); ParaSettingBtnIsEnabled = true; } // 停止定时器 (sender as DispatcherTimer).Stop(); } private float setVoltage; public float SetVoltage { get { return setVoltage; } set { setVoltage = value; this.DoNotify(); } } private float setCurrent; public float SetCurrent { get { return setCurrent; } set { setCurrent = value; this.DoNotify(); } } private string paraSettingMsg; public string ParaSettingMsg { get { return paraSettingMsg; } set { paraSettingMsg = value; this.DoNotify(); } } private Brush paraSettingMsgForeground; public Brush ParaSettingMsgForeground { get { return paraSettingMsgForeground; } set { paraSettingMsgForeground = value; this.DoNotify(); } } private Visibility paraSettingMsgVisibility; public Visibility ParaSettingMsgVisibility { get { return paraSettingMsgVisibility; } set { paraSettingMsgVisibility = value; this.DoNotify(); } } private bool paraSettingIsReceived = false; public bool ParaSettingIsReceived { get { return paraSettingIsReceived; } set { paraSettingIsReceived = value; this.DoNotify(); } } private bool paraSettingBtnIsEnabled = true; public bool ParaSettingBtnIsEnabled { get { return paraSettingBtnIsEnabled; } set { paraSettingBtnIsEnabled = value; this.DoNotify(); } } /// /// 设置额定电压和额定电流 /// /// public void ParaSetting(object o) { ParaSettingBtnIsEnabled = false; ParaSettingIsReceived = false; setVoltageValue = 0.0f; setCurrentValue = 0.0f; powerAddress = 0x01; functionCode = 0x10; //功能码 startingRegisterAddress = new byte[2] { 0x00, 0x95 }; //起始寄存器地址 registerNumber = new byte[2] { 0x00, 0x02 }; //寄存器个数 byte number = 0x04; int voltageSet = (int)(SetVoltage * 10); byte[] voltage = Tools.DecimalToTwoByteArray(voltageSet); int currentSet = (int)(SetCurrent * 10); byte[] current = Tools.DecimalToTwoByteArray(currentSet); //校验码计算 checkByte.Clear(); checkByte.Add(powerAddress); checkByte.Add(functionCode); checkByte.AddRange(startingRegisterAddress); checkByte.AddRange(registerNumber); checkByte.Add(number); checkByte.AddRange(voltage); checkByte.AddRange(current); checkCodeCRC = Tools.CalculateModbusCRC(checkByte.ToArray()); //发送指令 sendBytes.Clear(); sendBytes.Add(powerAddress); sendBytes.Add(functionCode); sendBytes.AddRange(startingRegisterAddress); sendBytes.AddRange(registerNumber); sendBytes.Add(number); sendBytes.AddRange(voltage); sendBytes.AddRange(current); sendBytes.AddRange(checkCodeCRC); bool result = false; if (MainWindow.mainViewModel.clientModel1.IsConnected) result = MainWindow.mainViewModel.clientModel1.SendMessage(sendBytes.ToArray()); else { ParaSettingMsgVisibility = Visibility.Visible; ParaSettingMsg = "通信未连接!"; timerParaSettingMsgHidden.Start(); ParaSettingMsgForeground = new SolidColorBrush(Colors.Red); ParaSettingBtnIsEnabled = true; return; } if (result) { ParaSettingMsgVisibility = Visibility.Visible; ParaSettingMsg = "设置电压电流值发送成功!"; timerParaSettingMsgHidden.Start(); ParaSettingMsgForeground = new SolidColorBrush(Colors.Green); timerParaSetting.Start(); setVoltageValue = SetVoltage; setCurrentValue = SetCurrent; } else { ParaSettingMsgVisibility = Visibility.Visible; ParaSettingMsg = "设置电压电流值发送失败!"; timerParaSettingMsgHidden.Start(); ParaSettingMsgForeground = new SolidColorBrush(Colors.Red); ParaSettingBtnIsEnabled = true; } string sql = $"insert into log_record(StationID,RecordTime,Device_Name,Operation_Type,Record) values('1','{DateTime.Now}','岸基电源','数据请求','{ParaSettingMsg}');"; DBHelper.ExecuteNonQuery(sql, 1); } #endregion #region Pro Value Set public float proVoltageValue = 0.0f; public float proCurrentValue = 0.0f; private void TimerProSettingMsgHidden_Tick(object sender, EventArgs e) { ProSettingMsgVisibility = Visibility.Hidden; // 停止定时器 (sender as DispatcherTimer).Stop(); } private void TimerProSetting_Tick(object sender, EventArgs e) { if (!ProSettingIsReceived) { ProSettingMsgVisibility = Visibility.Visible; ProSettingMsg = "设置输出过压过流保护值发送成功,但未收到回复!"; timerProSettingMsgHidden.Start(); ProSettingMsgForeground = new SolidColorBrush(Colors.Red); ProSettingBtnIsEnabled = true; } // 停止定时器 (sender as DispatcherTimer).Stop(); } private float proVoltage; public float ProVoltage { get { return proVoltage; } set { proVoltage = value; this.DoNotify(); } } private float proCurrent; public float ProCurrent { get { return proCurrent; } set { proCurrent = value; this.DoNotify(); } } private bool proSettingBtnIsEnabled = true; public bool ProSettingBtnIsEnabled { get { return proSettingBtnIsEnabled; } set { proSettingBtnIsEnabled = value; this.DoNotify(); } } private bool proSettingIsReceived = false; public bool ProSettingIsReceived { get { return proSettingIsReceived; } set { proSettingIsReceived = value; this.DoNotify(); } } private string proSettingMsg; public string ProSettingMsg { get { return proSettingMsg; } set { proSettingMsg = value; this.DoNotify(); } } private Brush proSettingMsgForeground; public Brush ProSettingMsgForeground { get { return proSettingMsgForeground; } set { proSettingMsgForeground = value; this.DoNotify(); } } private Visibility proSettingMsgVisibility; public Visibility ProSettingMsgVisibility { get { return proSettingMsgVisibility; } set { proSettingMsgVisibility = value; this.DoNotify(); } } /// /// 设置过压过流保护值 /// /// public void ProSetting(object o) { ProSettingBtnIsEnabled = false; ProSettingIsReceived = false; proVoltageValue = 0.0f; proCurrentValue = 0.0f; powerAddress = 0x01; functionCode = 0x10; //功能码 startingRegisterAddress = new byte[2] { 0x00, 0x9D }; //起始寄存器地址 registerNumber = new byte[2] { 0x00, 0x02 }; //寄存器个数 byte number = 0x04; int voltagePro = (int)(ProVoltage * 10); byte[] voltage = Tools.DecimalToTwoByteArray(voltagePro); int currentPro = (int)(ProCurrent * 10); byte[] current = Tools.DecimalToTwoByteArray(currentPro); //校验码计算 checkByte.Clear(); checkByte.Add(powerAddress); checkByte.Add(functionCode); checkByte.AddRange(startingRegisterAddress); checkByte.AddRange(registerNumber); checkByte.Add(number); checkByte.AddRange(voltage); checkByte.AddRange(current); checkCodeCRC = Tools.CalculateModbusCRC(checkByte.ToArray()); //发送指令 sendBytes.Clear(); sendBytes.Add(powerAddress); sendBytes.Add(functionCode); sendBytes.AddRange(startingRegisterAddress); sendBytes.AddRange(registerNumber); sendBytes.Add(number); sendBytes.AddRange(voltage); sendBytes.AddRange(current); sendBytes.AddRange(checkCodeCRC); bool result = false; if (MainWindow.mainViewModel.clientModel1.IsConnected) result = MainWindow.mainViewModel.clientModel1.SendMessage(sendBytes.ToArray()); else { ProSettingMsgVisibility = Visibility.Visible; ProSettingMsg = "通信未连接!"; timerProSettingMsgHidden.Start(); ProSettingMsgForeground = new SolidColorBrush(Colors.Red); ProSettingBtnIsEnabled = true; return; } if (result) { ProSettingMsgVisibility = Visibility.Visible; ProSettingMsg = "设置输出过压过流保护值发送成功!"; timerProSettingMsgHidden.Start(); ProSettingMsgForeground = new SolidColorBrush(Colors.Green); timerProSetting.Start(); proVoltageValue = ProVoltage; proCurrentValue = ProCurrent; } else { ProSettingMsgVisibility = Visibility.Visible; ProSettingMsg = "设置输出过压过流保护值发送失败!"; timerProSettingMsgHidden.Start(); ProSettingMsgForeground = new SolidColorBrush(Colors.Red); ProSettingBtnIsEnabled = true; } string sql = $"insert into log_record(StationID,RecordTime,Device_Name,Operation_Type,Record) values('1','{DateTime.Now}','岸基电源','数据请求','{ParaSettingMsg}');"; DBHelper.ExecuteNonQuery(sql, 1); } #endregion #region Reset Data /// /// 读取电压电流设置值和输出过压过流保护值 /// /// public void ResetData(object o) { powerAddress = 0x01; functionCode = 0x03; //功能码 startingRegisterAddress = new byte[2] { 0x00, 0x95 }; //起始寄存器地址 registerNumber = new byte[2] { 0x00, 0x05 }; //寄存器个数 //校验码计算 checkByte.Clear(); checkByte.Add(powerAddress); checkByte.Add(functionCode); checkByte.AddRange(startingRegisterAddress); checkByte.AddRange(registerNumber); checkCodeCRC = Tools.CalculateModbusCRC(checkByte.ToArray()); //发送指令 sendBytes.Clear(); sendBytes.Add(powerAddress); sendBytes.Add(functionCode); sendBytes.AddRange(startingRegisterAddress); sendBytes.AddRange(registerNumber); sendBytes.AddRange(checkCodeCRC); bool result = false; if (MainWindow.mainViewModel.clientModel1.IsConnected) result = MainWindow.mainViewModel.clientModel1.SendMessage(sendBytes.ToArray()); else { return; } string msg; if (result) { msg = "读取电压电流设置值、输出过压过流保护值发送成功!"; } else { msg = "读取电压电流设置值、输出过压过流保护值发送失败!"; } string sql = $"insert into log_record(StationID,RecordTime,Device_Name,Operation_Type,Record) values('1','{DateTime.Now}','岸基电源','数据请求','{msg}');"; DBHelper.ExecuteNonQuery(sql, 1); } #endregion #region Pow Set #region Timer Tick private void TimerOutputPowerOpenMsgHidden_Tick(object sender, EventArgs e) { OutputPowerOpenMsgVisibility = Visibility.Hidden; // 停止定时器 (sender as DispatcherTimer).Stop(); } private void TimerOutputPowerCloseMsgHidden_Tick(object sender, EventArgs e) { OutputPowerCloseMsgVisibility = Visibility.Hidden; // 停止定时器 (sender as DispatcherTimer).Stop(); } private void TimerOverVolProPowerOpenMsgHidden_Tick(object sender, EventArgs e) { OverVolProPowerOpenMsgVisibility = Visibility.Hidden; // 停止定时器 (sender as DispatcherTimer).Stop(); } private void TimerOverVolProPowerCloseMsgHidden_Tick(object sender, EventArgs e) { OverVolProPowerCloseMsgVisibility = Visibility.Hidden; // 停止定时器 (sender as DispatcherTimer).Stop(); } private void TimerOverCurProPowerOpenMsgHidden_Tick(object sender, EventArgs e) { OverCurProPowerOpenMsgVisibility = Visibility.Hidden; // 停止定时器 (sender as DispatcherTimer).Stop(); } private void TimerOverCurProPowerCloseMsgHidden_Tick(object sender, EventArgs e) { OverCurProPowerCloseMsgVisibility = Visibility.Hidden; // 停止定时器 (sender as DispatcherTimer).Stop(); } private void TimerOutputPowerOpen_Tick(object sender, EventArgs e) { if (!OutputPowerOpenIsReceived) { OutputPowerOpenMsgVisibility = Visibility.Visible; OutputPowerOpenMsg = "开启输出开关发送成功,但未收到回复!"; timerOutputPowerOpenMsgHidden.Start(); OutputPowerOpenMsgForeground = new SolidColorBrush(Colors.Red); OutputPowerOpenBtnIsEnabled = true; OutputPowerCloseBtnIsEnabled = true; } // 停止定时器 (sender as DispatcherTimer).Stop(); } private void TimerOutputPowerClose_Tick(object sender, EventArgs e) { if (!OutputPowerCloseIsReceived) { OutputPowerCloseMsgVisibility = Visibility.Visible; OutputPowerCloseMsg = "关闭输出开关发送成功,但未收到回复!"; timerOutputPowerCloseMsgHidden.Start(); OutputPowerCloseMsgForeground = new SolidColorBrush(Colors.Red); OutputPowerOpenBtnIsEnabled = true; OutputPowerCloseBtnIsEnabled = true; } // 停止定时器 (sender as DispatcherTimer).Stop(); } private void TimerOverVolProPowerOpen_Tick(object sender, EventArgs e) { if (!OverVolProPowerOpenIsReceived) { OverVolProPowerOpenMsgVisibility = Visibility.Visible; OverVolProPowerOpenMsg = "开启输出过压保护允许发送成功,但未收到回复!"; timerOverVolProPowerOpenMsgHidden.Start(); OverVolProPowerOpenMsgForeground = new SolidColorBrush(Colors.Red); OverVolProPowerOpenBtnIsEnabled = true; OverVolProPowerCloseBtnIsEnabled = true; } // 停止定时器 (sender as DispatcherTimer).Stop(); } private void TimerOverVolProPowerClose_Tick(object sender, EventArgs e) { if (!OverVolProPowerCloseIsReceived) { OverVolProPowerCloseMsgVisibility = Visibility.Visible; OverVolProPowerCloseMsg = "关闭输出过压保护允许发送成功,但未收到回复!"; timerOverVolProPowerCloseMsgHidden.Start(); OverVolProPowerCloseMsgForeground = new SolidColorBrush(Colors.Red); OverVolProPowerOpenBtnIsEnabled = true; OverVolProPowerCloseBtnIsEnabled = true; } // 停止定时器 (sender as DispatcherTimer).Stop(); } private void TimerOverCurProPowerOpen_Tick(object sender, EventArgs e) { if (!OverCurProPowerOpenIsReceived) { OverCurProPowerOpenMsgVisibility = Visibility.Visible; OverCurProPowerOpenMsg = "开启输出过流保护允许发送成功,但未收到回复!"; timerOverCurProPowerOpenMsgHidden.Start(); OverCurProPowerOpenMsgForeground = new SolidColorBrush(Colors.Red); OverCurProPowerOpenBtnIsEnabled = true; OverCurProPowerCloseBtnIsEnabled = true; } // 停止定时器 (sender as DispatcherTimer).Stop(); } private void TimerOverCurProPowerClose_Tick(object sender, EventArgs e) { if (!OverCurProPowerCloseIsReceived) { OverCurProPowerCloseMsgVisibility = Visibility.Visible; OverCurProPowerCloseMsg = "关闭输出过流保护允许发送成功,但未收到回复!"; timerOverCurProPowerCloseMsgHidden.Start(); OverCurProPowerCloseMsgForeground = new SolidColorBrush(Colors.Red); OverCurProPowerOpenBtnIsEnabled = true; OverCurProPowerCloseBtnIsEnabled = true; } // 停止定时器 (sender as DispatcherTimer).Stop(); } #endregion #region Page Define private ImageSource overState; public ImageSource OutputState { get { return overState; } set { overState = value; this.DoNotify(); } } private string outputPowerOpenMsg; public string OutputPowerOpenMsg { get { return outputPowerOpenMsg; } set { outputPowerOpenMsg = value; this.DoNotify(); } } private Brush outputPowerOpenMsgForeground; public Brush OutputPowerOpenMsgForeground { get { return outputPowerOpenMsgForeground; } set { outputPowerOpenMsgForeground = value; this.DoNotify(); } } private Visibility outputPowerOpenMsgVisibility; public Visibility OutputPowerOpenMsgVisibility { get { return outputPowerOpenMsgVisibility; } set { outputPowerOpenMsgVisibility = value; this.DoNotify(); } } private bool outputPowerOpenIsReceived = false; public bool OutputPowerOpenIsReceived { get { return outputPowerOpenIsReceived; } set { outputPowerOpenIsReceived = value; this.DoNotify(); } } private bool outputPowerOpenBtnIsEnabled = true; public bool OutputPowerOpenBtnIsEnabled { get { return outputPowerOpenBtnIsEnabled; } set { outputPowerOpenBtnIsEnabled = value; this.DoNotify(); } } private string outputPowerCloseMsg; public string OutputPowerCloseMsg { get { return outputPowerCloseMsg; } set { outputPowerCloseMsg = value; this.DoNotify(); } } private Brush outputPowerCloseMsgForeground; public Brush OutputPowerCloseMsgForeground { get { return outputPowerCloseMsgForeground; } set { outputPowerCloseMsgForeground = value; this.DoNotify(); } } private Visibility outputPowerCloseMsgVisibility; public Visibility OutputPowerCloseMsgVisibility { get { return outputPowerCloseMsgVisibility; } set { outputPowerCloseMsgVisibility = value; this.DoNotify(); } } private bool outputPowerCloseIsReceived = false; public bool OutputPowerCloseIsReceived { get { return outputPowerCloseIsReceived; } set { outputPowerCloseIsReceived = value; this.DoNotify(); } } private bool outputPowerCloseBtnIsEnabled = true; public bool OutputPowerCloseBtnIsEnabled { get { return outputPowerCloseBtnIsEnabled; } set { outputPowerCloseBtnIsEnabled = value; this.DoNotify(); } } private ImageSource overVolProAllowState; public ImageSource OverVolProAllowState { get { return overVolProAllowState; } set { overVolProAllowState = value; this.DoNotify(); } } private string overVolProPowerOpenMsg; public string OverVolProPowerOpenMsg { get { return overVolProPowerOpenMsg; } set { overVolProPowerOpenMsg = value; this.DoNotify(); } } private Brush overVolProPowerOpenMsgForeground; public Brush OverVolProPowerOpenMsgForeground { get { return overVolProPowerOpenMsgForeground; } set { overVolProPowerOpenMsgForeground = value; this.DoNotify(); } } private Visibility overVolProPowerOpenMsgVisibility; public Visibility OverVolProPowerOpenMsgVisibility { get { return overVolProPowerOpenMsgVisibility; } set { overVolProPowerOpenMsgVisibility = value; this.DoNotify(); } } private bool overVolProPowerOpenIsReceived = false; public bool OverVolProPowerOpenIsReceived { get { return overVolProPowerOpenIsReceived; } set { overVolProPowerOpenIsReceived = value; this.DoNotify(); } } private bool overVolProPowerOpenBtnIsEnabled = true; public bool OverVolProPowerOpenBtnIsEnabled { get { return overVolProPowerOpenBtnIsEnabled; } set { overVolProPowerOpenBtnIsEnabled = value; this.DoNotify(); } } private string overVolProPowerCloseMsg; public string OverVolProPowerCloseMsg { get { return overVolProPowerCloseMsg; } set { overVolProPowerCloseMsg = value; this.DoNotify(); } } private Brush overVolProPowerCloseMsgForeground; public Brush OverVolProPowerCloseMsgForeground { get { return overVolProPowerCloseMsgForeground; } set { overVolProPowerCloseMsgForeground = value; this.DoNotify(); } } private Visibility overVolProPowerCloseMsgVisibility; public Visibility OverVolProPowerCloseMsgVisibility { get { return overVolProPowerCloseMsgVisibility; } set { overVolProPowerCloseMsgVisibility = value; this.DoNotify(); } } private bool overVolProPowerCloseIsReceived = false; public bool OverVolProPowerCloseIsReceived { get { return overVolProPowerCloseIsReceived; } set { overVolProPowerCloseIsReceived = value; this.DoNotify(); } } private bool overVolProPowerCloseBtnIsEnabled = true; public bool OverVolProPowerCloseBtnIsEnabled { get { return overVolProPowerCloseBtnIsEnabled; } set { overVolProPowerCloseBtnIsEnabled = value; this.DoNotify(); } } private ImageSource overCurProAllowState; public ImageSource OverCurProAllowState { get { return overCurProAllowState; } set { overCurProAllowState = value; this.DoNotify(); } } private string overCurProPowerOpenMsg; public string OverCurProPowerOpenMsg { get { return overCurProPowerOpenMsg; } set { overCurProPowerOpenMsg = value; this.DoNotify(); } } private Brush overCurProPowerOpenMsgForeground; public Brush OverCurProPowerOpenMsgForeground { get { return overCurProPowerOpenMsgForeground; } set { overCurProPowerOpenMsgForeground = value; this.DoNotify(); } } private Visibility overCurProPowerOpenMsgVisibility; public Visibility OverCurProPowerOpenMsgVisibility { get { return overCurProPowerOpenMsgVisibility; } set { overCurProPowerOpenMsgVisibility = value; this.DoNotify(); } } private bool overCurProPowerOpenIsReceived = false; public bool OverCurProPowerOpenIsReceived { get { return overCurProPowerOpenIsReceived; } set { overCurProPowerOpenIsReceived = value; this.DoNotify(); } } private bool overCurProPowerOpenBtnIsEnabled = true; public bool OverCurProPowerOpenBtnIsEnabled { get { return overCurProPowerOpenBtnIsEnabled; } set { overCurProPowerOpenBtnIsEnabled = value; this.DoNotify(); } } private string overCurProPowerCloseMsg; public string OverCurProPowerCloseMsg { get { return overCurProPowerCloseMsg; } set { overCurProPowerCloseMsg = value; this.DoNotify(); } } private Brush overCurProPowerCloseMsgForeground; public Brush OverCurProPowerCloseMsgForeground { get { return overCurProPowerCloseMsgForeground; } set { overCurProPowerCloseMsgForeground = value; this.DoNotify(); } } private Visibility overCurProPowerCloseMsgVisibility; public Visibility OverCurProPowerCloseMsgVisibility { get { return overCurProPowerCloseMsgVisibility; } set { overCurProPowerCloseMsgVisibility = value; this.DoNotify(); } } private bool overCurProPowerCloseIsReceived = false; public bool OverCurProPowerCloseIsReceived { get { return overCurProPowerCloseIsReceived; } set { overCurProPowerCloseIsReceived = value; this.DoNotify(); } } private bool overCurProPowerCloseBtnIsEnabled = true; public bool OverCurProPowerCloseBtnIsEnabled { get { return overCurProPowerCloseBtnIsEnabled; } set { overCurProPowerCloseBtnIsEnabled = value; this.DoNotify(); } } #endregion public void ShoreBaseStationSwitch(object o) { string[] msg = o.ToString().Split(','); int switchNum = msg[1].Equals("True") ? 1 : 0; switch (msg[0]) { case "OutputPowerPicker": OutputPowerOpenBtnIsEnabled = false; OutputPowerCloseBtnIsEnabled = false; OutputPowerOpenIsReceived = false; OutputPowerCloseIsReceived = false; powerAddress = 0x01; functionCode = 0x05; //功能码 startingRegisterAddress = new byte[2] { 0x00, 0x85 }; //起始寄存器地址 byte[] operation = new byte[2]; if (msg[1].Equals("True")) //打开 { operation = new byte[2] { 0x00, 0x00 }; } else { operation = new byte[2] { 0xFF, 0x00 }; } //校验码计算 checkByte.Clear(); checkByte.Add(powerAddress); checkByte.Add(functionCode); checkByte.AddRange(startingRegisterAddress); checkByte.AddRange(operation); checkCodeCRC = Tools.CalculateModbusCRC(checkByte.ToArray()); //发送指令 sendBytes.Clear(); sendBytes.Add(powerAddress); sendBytes.Add(functionCode); sendBytes.AddRange(startingRegisterAddress); sendBytes.AddRange(operation); sendBytes.AddRange(checkCodeCRC); bool result = false; if (msg[1].Equals("True")) //打开 { if (MainWindow.mainViewModel.clientModel1.IsConnected) result = MainWindow.mainViewModel.clientModel1.SendMessage(sendBytes.ToArray()); else { OutputPowerOpenMsgVisibility = Visibility.Visible; OutputPowerOpenMsg = "通信未连接!"; timerOutputPowerOpenMsgHidden.Start(); OutputPowerOpenMsgForeground = new SolidColorBrush(Colors.Red); OutputPowerOpenBtnIsEnabled = true; OutputPowerCloseBtnIsEnabled = true; return; } if (result) { OutputPowerOpenMsgVisibility = Visibility.Visible; OutputPowerOpenMsg = "开启输出开关发送成功!"; timerOutputPowerOpenMsgHidden.Start(); OutputPowerOpenMsgForeground = new SolidColorBrush(Colors.Green); timerOutputPowerOpen.Start(); } else { OutputPowerOpenMsgVisibility = Visibility.Visible; OutputPowerOpenMsg = "开启输出开关发送失败!"; timerOutputPowerOpenMsgHidden.Start(); OutputPowerOpenMsgForeground = new SolidColorBrush(Colors.Red); OutputPowerOpenBtnIsEnabled = true; OutputPowerCloseBtnIsEnabled = true; } string sql = $"insert into log_record(StationID,RecordTime,Device_Name,Operation_Type,Record) values('1','{DateTime.Now}','岸基电源','继电控制','{OutputPowerOpenMsg}');"; DBHelper.ExecuteNonQuery(sql, 1); } else { if (MainWindow.mainViewModel.clientModel1.IsConnected) result = MainWindow.mainViewModel.clientModel1.SendMessage(sendBytes.ToArray()); else { OutputPowerCloseMsgVisibility = Visibility.Visible; OutputPowerCloseMsg = "通信未连接!"; timerOutputPowerCloseMsgHidden.Start(); OutputPowerCloseMsgForeground = new SolidColorBrush(Colors.Red); OutputPowerCloseBtnIsEnabled = true; OutputPowerOpenBtnIsEnabled = true; return; } if (result) { OutputPowerCloseMsgVisibility = Visibility.Visible; OutputPowerCloseMsg = "关闭输出开关发送成功!"; timerOutputPowerCloseMsgHidden.Start(); OutputPowerCloseMsgForeground = new SolidColorBrush(Colors.Green); timerOutputPowerClose.Start(); } else { OutputPowerCloseMsgVisibility = Visibility.Visible; OutputPowerCloseMsg = "关闭输出开关发送失败!"; timerOutputPowerCloseMsgHidden.Start(); OutputPowerCloseMsgForeground = new SolidColorBrush(Colors.Red); OutputPowerCloseBtnIsEnabled = true; OutputPowerOpenBtnIsEnabled = true; } string sql = $"insert into log_record(StationID,RecordTime,Device_Name,Operation_Type,Record) values('1','{DateTime.Now}','岸基电源','继电控制','{OutputPowerCloseMsg}');"; DBHelper.ExecuteNonQuery(sql, 1); } break; case "OverVolProPowerPicker": OverVolProPowerOpenBtnIsEnabled = false; OverVolProPowerCloseBtnIsEnabled = false; OverVolProPowerOpenIsReceived = false; OverVolProPowerCloseIsReceived = false; powerAddress = 0x01; functionCode = 0x05; //功能码 startingRegisterAddress = new byte[2] { 0x00, 0x88 }; //起始寄存器地址 if (msg[1].Equals("True")) //打开 { operation = new byte[2] { 0x00, 0x00 }; } else { operation = new byte[2] { 0xFF, 0x00 }; } //校验码计算 checkByte.Clear(); checkByte.Add(powerAddress); checkByte.Add(functionCode); checkByte.AddRange(startingRegisterAddress); checkByte.AddRange(operation); checkCodeCRC = Tools.CalculateModbusCRC(checkByte.ToArray()); //发送指令 sendBytes.Clear(); sendBytes.Add(powerAddress); sendBytes.Add(functionCode); sendBytes.AddRange(startingRegisterAddress); sendBytes.AddRange(operation); sendBytes.AddRange(checkCodeCRC); result = false; if (msg[1].Equals("True")) //打开 { if (MainWindow.mainViewModel.clientModel1.IsConnected) result = MainWindow.mainViewModel.clientModel1.SendMessage(sendBytes.ToArray()); else { OverVolProPowerOpenMsgVisibility = Visibility.Visible; OverVolProPowerOpenMsg = "通信未连接!"; timerOverVolProPowerOpenMsgHidden.Start(); OverVolProPowerOpenMsgForeground = new SolidColorBrush(Colors.Red); OverVolProPowerOpenBtnIsEnabled = true; OverVolProPowerCloseBtnIsEnabled = true; return; } if (result) { OverVolProPowerOpenMsgVisibility = Visibility.Visible; OverVolProPowerOpenMsg = "开启输出过压保护允许发送成功!"; timerOverVolProPowerOpenMsgHidden.Start(); OverVolProPowerOpenMsgForeground = new SolidColorBrush(Colors.Green); timerOverVolProPowerOpen.Start(); } else { OverVolProPowerOpenMsgVisibility = Visibility.Visible; OverVolProPowerOpenMsg = "开启输出过压保护允许发送失败!"; timerOverVolProPowerOpenMsgHidden.Start(); OverVolProPowerOpenMsgForeground = new SolidColorBrush(Colors.Red); OverVolProPowerOpenBtnIsEnabled = true; OverVolProPowerCloseBtnIsEnabled = true; } string sql = $"insert into log_record(StationID,RecordTime,Device_Name,Operation_Type,Record) values('1','{DateTime.Now}','岸基电源','继电控制','{OverVolProPowerOpenMsg}');"; DBHelper.ExecuteNonQuery(sql, 1); } else { if (MainWindow.mainViewModel.clientModel1.IsConnected) result = MainWindow.mainViewModel.clientModel1.SendMessage(sendBytes.ToArray()); else { OverVolProPowerCloseMsgVisibility = Visibility.Visible; OverVolProPowerCloseMsg = "通信未连接!"; timerOverVolProPowerCloseMsgHidden.Start(); OverVolProPowerCloseMsgForeground = new SolidColorBrush(Colors.Red); OverVolProPowerCloseBtnIsEnabled = true; OverVolProPowerOpenBtnIsEnabled = true; return; } if (result) { OverVolProPowerCloseMsgVisibility = Visibility.Visible; OverVolProPowerCloseMsg = "关闭输出过压保护允许发送成功!"; timerOverVolProPowerCloseMsgHidden.Start(); OverVolProPowerCloseMsgForeground = new SolidColorBrush(Colors.Green); timerOverVolProPowerClose.Start(); } else { OverVolProPowerCloseMsgVisibility = Visibility.Visible; OverVolProPowerCloseMsg = "关闭输出过压保护允许发送失败!"; timerOverVolProPowerCloseMsgHidden.Start(); OverVolProPowerCloseMsgForeground = new SolidColorBrush(Colors.Red); OverVolProPowerCloseBtnIsEnabled = true; OverVolProPowerOpenBtnIsEnabled = true; } string sql = $"insert into log_record(StationID,RecordTime,Device_Name,Operation_Type,Record) values('1','{DateTime.Now}','岸基电源','继电控制','{OverVolProPowerCloseMsg}');"; DBHelper.ExecuteNonQuery(sql, 1); } break; case "OverCurProPowerPicker": OverCurProPowerOpenBtnIsEnabled = false; OverCurProPowerCloseBtnIsEnabled = false; OverCurProPowerOpenIsReceived = false; OverCurProPowerCloseIsReceived = false; powerAddress = 0x01; functionCode = 0x05; //功能码 startingRegisterAddress = new byte[2] { 0x00, 0x89 }; //起始寄存器地址 if (msg[1].Equals("True")) //打开 { operation = new byte[2] { 0x00, 0x00 }; } else { operation = new byte[2] { 0xFF, 0x00 }; } //校验码计算 checkByte.Clear(); checkByte.Add(powerAddress); checkByte.Add(functionCode); checkByte.AddRange(startingRegisterAddress); checkByte.AddRange(operation); checkCodeCRC = Tools.CalculateModbusCRC(checkByte.ToArray()); //发送指令 sendBytes.Clear(); sendBytes.Add(powerAddress); sendBytes.Add(functionCode); sendBytes.AddRange(startingRegisterAddress); sendBytes.AddRange(operation); sendBytes.AddRange(checkCodeCRC); result = false; if (msg[1].Equals("True")) //打开 { if (MainWindow.mainViewModel.clientModel1.IsConnected) result = MainWindow.mainViewModel.clientModel1.SendMessage(sendBytes.ToArray()); else { OverCurProPowerOpenMsgVisibility = Visibility.Visible; OverCurProPowerOpenMsg = "通信未连接!"; timerOverCurProPowerOpenMsgHidden.Start(); OverCurProPowerOpenMsgForeground = new SolidColorBrush(Colors.Red); OverCurProPowerOpenBtnIsEnabled = true; OverCurProPowerCloseBtnIsEnabled = true; return; } if (result) { OverCurProPowerOpenMsgVisibility = Visibility.Visible; OverCurProPowerOpenMsg = "开启输出过流保护允许发送成功!"; timerOverCurProPowerOpenMsgHidden.Start(); OverCurProPowerOpenMsgForeground = new SolidColorBrush(Colors.Green); timerOverCurProPowerOpen.Start(); } else { OverCurProPowerOpenMsgVisibility = Visibility.Visible; OverCurProPowerOpenMsg = "开启输出过流保护允许发送失败!"; timerOverCurProPowerOpenMsgHidden.Start(); OverCurProPowerOpenMsgForeground = new SolidColorBrush(Colors.Red); OverCurProPowerOpenBtnIsEnabled = true; OverCurProPowerCloseBtnIsEnabled = true; } string sql = $"insert into log_record(StationID,RecordTime,Device_Name,Operation_Type,Record) values('1','{DateTime.Now}','岸基电源','继电控制','{OverCurProPowerOpenMsg}');"; DBHelper.ExecuteNonQuery(sql, 1); } else { if (MainWindow.mainViewModel.clientModel1.IsConnected) result = MainWindow.mainViewModel.clientModel1.SendMessage(sendBytes.ToArray()); else { OverCurProPowerCloseMsgVisibility = Visibility.Visible; OverCurProPowerCloseMsg = "通信未连接!"; timerOverCurProPowerCloseMsgHidden.Start(); OverCurProPowerCloseMsgForeground = new SolidColorBrush(Colors.Red); OverCurProPowerCloseBtnIsEnabled = true; OverCurProPowerOpenBtnIsEnabled = true; return; } if (result) { OverCurProPowerCloseMsgVisibility = Visibility.Visible; OverCurProPowerCloseMsg = "关闭输出过流保护允许发送成功!"; timerOverCurProPowerCloseMsgHidden.Start(); OverCurProPowerCloseMsgForeground = new SolidColorBrush(Colors.Green); timerOverCurProPowerClose.Start(); } else { OverCurProPowerCloseMsgVisibility = Visibility.Visible; OverCurProPowerCloseMsg = "关闭输出过流保护允许发送失败!"; timerOverCurProPowerCloseMsgHidden.Start(); OverCurProPowerCloseMsgForeground = new SolidColorBrush(Colors.Red); OverCurProPowerCloseBtnIsEnabled = true; OverCurProPowerOpenBtnIsEnabled = true; } string sql = $"insert into log_record(StationID,RecordTime,Device_Name,Operation_Type,Record) values('1','{DateTime.Now}','岸基电源','继电控制','{OverCurProPowerCloseMsg}');"; DBHelper.ExecuteNonQuery(sql, 1); } break; } } #endregion } }