using Chen.Communication; using Chen.Communication.Modbus; using LiveCharts; using LiveCharts.Defaults; using System; using System.Collections.Generic; using System.Collections.ObjectModel; using System.IO.Ports; using System.Linq; using System.Text; using System.Threading; using System.Threading.Tasks; using System.Windows; using 垂直剖面动态观测系统.DataAccess; using 垂直剖面动态观测系统.Model; using 垂直剖面动态观测系统.View; using 垂直剖面动态观测系统.ViewModel; namespace 垂直剖面动态观测系统.Common { public class GlobalValues : NotifyBase { private static int _length = 48; #region model public static Para_LimitModel Para_LimitModel { get; set; } = new Para_LimitModel(); static LocalDataAccess localDataAccess = new LocalDataAccess(); public static ErrorMessageModel ErrorMessageModel { get; set; } = new ErrorMessageModel(); public static ControlModel ControlModel { get; set; } = new ControlModel(); public static FileModel FileModel { get; set; } = new FileModel(); public static Buoy_sensor_adcpModel Buoy_sensor_adcpModel { get; set; } = new Buoy_sensor_adcpModel(); public static Buoy_sensor_attitudeModel Buoy_sensor_attitudeModel { get; set; } = new Buoy_sensor_attitudeModel(); public static Buoy_sensor_othModel Buoy_sensor_othModel { get; set; } = new Buoy_sensor_othModel(); public static Conbox_sensor_adcpModel Conbox_sensor_adcpModel { get; set; } = new Conbox_sensor_adcpModel(); public static Conbox_sensor_othModel Conbox_sensor_othModel { get; set; } = new Conbox_sensor_othModel(); public static Enviroment_Model Enviroment_Model { get; set; } = new Enviroment_Model(); public static Lattarget_sensor_adcp300Model Lattarget_sensor_adcp300Model { get; set; } = new Lattarget_sensor_adcp300Model(); public static Lattarget_sensor_othModel Lattarget_sensor_othModel { get; set; } = new Lattarget_sensor_othModel(); public static Switch_Model Switch_Model { get; set; } = new Switch_Model(); public static LoginModel LoginInfo { get; set; } public static Para_Model Para_Model { get; set; } = new Para_Model(); public static GPSModel gPSModel { get; set; } = new GPSModel(); //串口配置信息 public static SerialInfo SerialInfo { get; set; } = new SerialInfo(); #endregion #region 开关 //浮标甲烷电源开关 public CommandBase BT_FB_CH4_Power { get; set; } //浮标甲烷数据开关 public CommandBase BT_FB_CH4_Data { get; set; } //浮标走航甲烷电源开关 public CommandBase BT_FB_Sailing_CH4_Power { get; set; } //浮标走航甲烷数据开关 public CommandBase BT_FB_Sailing_CH4_Data { get; set; } //浮标姿态电源开关 public CommandBase BT_FB_Attitude_Power { get; set; } //浮标姿态数据开关 public CommandBase BT_FB_Attitude_Data { get; set; } //浮标CO2电源开关 public CommandBase BT_FB_CO2_Power { get; set; } //浮标CO2数据开关 public CommandBase BT_FB_CO2_Data { get; set; } //浮标ADCP电源开关 public CommandBase BT_FB_ADCP_Power { get; set; } //浮标ADCP数据开关 public CommandBase BT_FB_ADCP_Data { get; set; } //浮标气象电源开关 public CommandBase BT_FB_Air_Power { get; set; } //浮标气象数据开关 public CommandBase BT_FB_Air_Data { get; set; } //潜标ADCP电源开关 public CommandBase BT_QB_Adcp300_Power { get; set; } //潜标ADCP数据开关 public CommandBase BT_QB_Adcp300_Data { get; set; } //潜标CO2电源开关 public CommandBase BT_QB_CO2_Power { get; set; } //潜标CO2数据开关 public CommandBase BT_QB_CO2_Data { get; set; } //潜标METS电源开关 public CommandBase BT_QB_METS_Power { get; set; } //潜标METS数据开关 public CommandBase BT_QB_METS_Data { get; set; } //潜标CTD电源开关 public CommandBase BT_QB_CTD_Power { get; set; } //潜标CTD数据开关 public CommandBase BT_QB_CTD_Data { get; set; } //潜标水声通信机开关 public CommandBase BT_QB_SSTX_Power { get; set; } //接驳盒CH4电源开关 public CommandBase BT_JBH_CH4_Power { get; set; } //接驳盒CH4数据开关 public CommandBase BT_JBH_CH4_Data { get; set; } //接驳盒CO2电源开关 public CommandBase BT_JBH_CO2_Power { get; set; } //接驳盒CO2数据开关 public CommandBase BT_JBH_CO2_Data { get; set; } //接驳盒METS电源开关 public CommandBase BT_JBH_METS_Power { get; set; } //接驳盒METS数据开关 public CommandBase BT_JBH_METS_Data { get; set; } //接驳盒姿态电源开关 public CommandBase BT_JBH_Attitude_Power { get; set; } //接驳盒姿态数据开关 public CommandBase BT_JBH_Attitude_Data { get; set; } //接驳盒CTD电源开关 public CommandBase BT_JBH_CTD_Power { get; set; } //接驳盒CTD数据开关 public CommandBase BT_JBH_CTD_Data { get; set; } //接驳盒Adcp电源开关 public CommandBase BT_JBH_Adcp_Power { get; set; } //接驳盒Adcp数据开关 public CommandBase BT_JBH_Adcp_Data { get; set; } //读取设置 public CommandBase Read_SET { get; set; } //系统设置 public CommandBase System_SET { get; set; } //同步时间 public CommandBase TB_Time { get; set; } //文件请求 public CommandBase File_Require { get; set; } //获取铱星强度 public CommandBase objGetIrStrength { get; set; } //铱星拨号 public CommandBase objIrDial { get; set; } //铱星断开连接 public CommandBase objIrDisConnect { get; set; } //通过日期搜索功能 public CommandBase DataSearch { get; set; } //手动获取浮标姿态数据 public CommandBase objGetIrAttitude { get; set; } //手动获取浮标ADCP数据 public CommandBase objGetIrFBADCP { get; set; } //手动获取浮标环境参数 public CommandBase objIrEnvironmental { get; set; } //手动获取潜标CTD数据 public CommandBase objGetIrQBCTD { get; set; } //手动获取潜标ADCP数据 public CommandBase objGetIrQBADCP { get; set; } //手动获取接驳盒CTD数据 public CommandBase objGetIrJBHCTD { get; set; } //手动读取接驳盒ADCP数据 public CommandBase objGetIrJBHADCP { get; set; } #endregion public GlobalValues() { //初始化最大值和最小值 Para_LimitModel = localDataAccess.GetLimitModel(); this.BT_FB_CH4_Power = new CommandBase(); this.BT_FB_CH4_Power.DoExcute = new Action((o) => { if (Switch_Model.FB_CH4_Power) { send_port_btn(10, 01, 01, 00); } else { send_port_btn(10, 01, 00, 00); } }); this.BT_FB_CH4_Power.DoCanExcute = new Func((o) => { return true; }); this.BT_FB_CH4_Data = new CommandBase(); this.BT_FB_CH4_Data.DoExcute = new Action((o) => { if (Switch_Model.FB_CH4_Data) { send_port_btn(10, 01, 01, 01); } else { send_port_btn(10, 01, 00, 01); } }); this.BT_FB_CH4_Data.DoCanExcute = new Func((o) => { return true; }); this.BT_FB_Sailing_CH4_Power = new CommandBase(); this.BT_FB_Sailing_CH4_Power.DoExcute = new Action((o) => { if (Switch_Model.FB_Sailing_CH4_Power) { send_port_btn(10, 06, 01, 00); } else { send_port_btn(10, 06, 00, 00); } }); this.BT_FB_Sailing_CH4_Power.DoCanExcute = new Func((o) => { return true; }); this.BT_FB_Sailing_CH4_Data = new CommandBase(); this.BT_FB_Sailing_CH4_Data.DoExcute = new Action((o) => { if (Switch_Model.FB_Sailing_CH4_Data) { send_port_btn(10, 06, 01, 01); } else { send_port_btn(10, 06, 00, 01); } }); this.BT_FB_Sailing_CH4_Data.DoCanExcute = new Func((o) => { return true; }); this.BT_FB_Attitude_Power = new CommandBase(); this.BT_FB_Attitude_Power.DoExcute = new Action((o) => { if (Switch_Model.FB_Attitude_Power) { send_port_btn(13, 08, 01, 00); } else { send_port_btn(13, 08, 00, 00); } }); this.BT_FB_Attitude_Power.DoCanExcute = new Func((o) => { return true; }); this.BT_FB_Attitude_Data = new CommandBase(); this.BT_FB_Attitude_Data.DoExcute = new Action((o) => { if (Switch_Model.FB_Attitude_Data) { send_port_btn(13, 08, 01, 01); } else { send_port_btn(13, 08, 00, 01); } }); this.BT_FB_Attitude_Data.DoCanExcute = new Func((o) => { return true; }); this.BT_FB_CO2_Power = new CommandBase(); this.BT_FB_CO2_Power.DoExcute = new Action((o) => { if (Switch_Model.FB_CO2_Power) { send_port_btn(10, 02, 01, 00); } else { send_port_btn(10, 02, 00, 00); } }); this.BT_FB_CO2_Power.DoCanExcute = new Func((o) => { return true; }); this.BT_FB_CO2_Data = new CommandBase(); this.BT_FB_CO2_Data.DoExcute = new Action((o) => { if (Switch_Model.FB_CO2_Data) { send_port_btn(10, 02, 01, 01); } else { send_port_btn(10, 02, 00, 01); } }); this.BT_FB_CO2_Data.DoCanExcute = new Func((o) => { return true; }); this.BT_FB_ADCP_Power = new CommandBase(); this.BT_FB_ADCP_Power.DoExcute = new Action((o) => { if (Switch_Model.FB_Adcp_Power) { send_port_btn(11, 00, 01, 00); } else { send_port_btn(11, 00, 00, 00); } }); this.BT_FB_ADCP_Power.DoCanExcute = new Func((o) => { return true; }); this.BT_FB_ADCP_Data = new CommandBase(); this.BT_FB_ADCP_Data.DoExcute = new Action((o) => { if (Switch_Model.FB_Adcp_Data) { send_port_btn(11, 00, 01, 01); } else { send_port_btn(11, 00, 00, 01); } }); this.BT_FB_ADCP_Data.DoCanExcute = new Func((o) => { return true; }); this.BT_FB_Air_Power = new CommandBase(); this.BT_FB_Air_Power.DoExcute = new Action((o) => { if (Switch_Model.FB_Air_Power) { send_port_btn(10, 00, 01, 00); } else { send_port_btn(10, 00, 00, 00); } }); this.BT_FB_Air_Power.DoCanExcute = new Func((o) => { return true; }); this.BT_FB_Air_Data = new CommandBase(); this.BT_FB_Air_Data.DoExcute = new Action((o) => { if (Switch_Model.FB_Air_Data) { send_port_btn(10, 00, 01, 01); } else { send_port_btn(10, 00, 00, 01); } }); this.BT_FB_Air_Data.DoCanExcute = new Func((o) => { return true; }); this.BT_QB_Adcp300_Power = new CommandBase(); this.BT_QB_Adcp300_Power.DoExcute = new Action((o) => { if (Switch_Model.QB_Adcp300_Power) { send_port_btn(21, 00, 01, 00); } else { send_port_btn(21, 00, 00, 00); } }); this.BT_QB_Adcp300_Power.DoCanExcute = new Func((o) => { return true; }); this.BT_QB_Adcp300_Data = new CommandBase(); this.BT_QB_Adcp300_Data.DoExcute = new Action((o) => { if (Switch_Model.QB_Adcp300_Data) { send_port_btn(21, 00, 01, 01); } else { send_port_btn(21, 00, 00, 01); } }); this.BT_QB_Adcp300_Data.DoCanExcute = new Func((o) => { return true; }); this.BT_QB_CO2_Power = new CommandBase(); this.BT_QB_CO2_Power.DoExcute = new Action((o) => { if (Switch_Model.QB_CO2_Power) { send_port_btn(25, 02, 01, 00); } else { send_port_btn(25, 02, 00, 00); } }); this.BT_QB_CO2_Power.DoCanExcute = new Func((o) => { return true; }); this.BT_QB_CO2_Data = new CommandBase(); this.BT_QB_CO2_Data.DoExcute = new Action((o) => { if (Switch_Model.QB_CO2_Data) { send_port_btn(25, 02, 01, 01); } else { send_port_btn(25, 02, 00, 01); } }); this.BT_QB_CO2_Data.DoCanExcute = new Func((o) => { return true; }); this.BT_QB_METS_Power = new CommandBase(); this.BT_QB_METS_Power.DoExcute = new Action((o) => { if (Switch_Model.QB_METS_Power) { send_port_btn(25, 03, 01, 00); } else { send_port_btn(25, 03, 00, 00); } }); this.BT_QB_METS_Power.DoCanExcute = new Func((o) => { return true; }); this.BT_QB_METS_Data = new CommandBase(); this.BT_QB_METS_Data.DoExcute = new Action((o) => { if (Switch_Model.QB_METS_Data) { send_port_btn(25, 03, 01, 01); } else { send_port_btn(25, 03, 00, 01); } }); this.BT_QB_METS_Data.DoCanExcute = new Func((o) => { return true; }); this.BT_QB_CTD_Power = new CommandBase(); this.BT_QB_CTD_Power.DoExcute = new Action((o) => { if (Switch_Model.QB_CTD_Power) { send_port_btn(25, 04, 01, 00); } else { send_port_btn(25, 04, 00, 00); } }); this.BT_QB_CTD_Power.DoCanExcute = new Func((o) => { return true; }); this.BT_QB_CTD_Data = new CommandBase(); this.BT_QB_CTD_Data.DoExcute = new Action((o) => { if (Switch_Model.QB_CTD_Data) { send_port_btn(25, 04, 01, 01); } else { send_port_btn(25, 04, 00, 01); } }); this.BT_QB_CTD_Data.DoCanExcute = new Func((o) => { return true; }); this.BT_JBH_CH4_Power = new CommandBase(); this.BT_JBH_CH4_Power.DoExcute = new Action((o) => { if (Switch_Model.JBH_CH4_Power) { send_port_btn(30, 01, 01, 00); } else { send_port_btn(30, 01, 00, 00); } }); this.BT_JBH_CH4_Power.DoCanExcute = new Func((o) => { return true; }); this.BT_JBH_CH4_Data = new CommandBase(); this.BT_JBH_CH4_Data.DoExcute = new Action((o) => { if (Switch_Model.JBH_CH4_Data) { send_port_btn(30, 01, 01, 01); } else { send_port_btn(30, 01, 00, 01); } }); this.BT_JBH_CH4_Data.DoCanExcute = new Func((o) => { return true; }); this.BT_JBH_CO2_Power = new CommandBase(); this.BT_JBH_CO2_Power.DoExcute = new Action((o) => { if (Switch_Model.JBH_CO2_Power) { send_port_btn(30, 02, 01, 00); } else { send_port_btn(30, 02, 00, 00); } }); this.BT_JBH_CO2_Power.DoCanExcute = new Func((o) => { return true; }); this.BT_JBH_CO2_Data = new CommandBase(); this.BT_JBH_CO2_Data.DoExcute = new Action((o) => { if (Switch_Model.JBH_CO2_Data) { send_port_btn(30, 02, 01, 01); } else { send_port_btn(30, 02, 00, 01); } }); this.BT_JBH_CO2_Data.DoCanExcute = new Func((o) => { return true; }); this.BT_JBH_METS_Power = new CommandBase(); this.BT_JBH_METS_Power.DoExcute = new Action((o) => { if (Switch_Model.JBH_METS_Power) { send_port_btn(30, 03, 01, 00); } else { send_port_btn(30, 03, 00, 00); } }); this.BT_JBH_METS_Power.DoCanExcute = new Func((o) => { return true; }); this.BT_JBH_METS_Data = new CommandBase(); this.BT_JBH_METS_Data.DoExcute = new Action((o) => { if (Switch_Model.JBH_METS_Data) { send_port_btn(30, 03, 01, 01); } else { send_port_btn(30, 03, 00, 01); } }); this.BT_JBH_METS_Data.DoCanExcute = new Func((o) => { return true; }); this.BT_JBH_Attitude_Power = new CommandBase(); this.BT_JBH_Attitude_Power.DoExcute = new Action((o) => { if (Switch_Model.JBH_Attitude_Power) { send_port_btn(30, 05, 01, 00); } else { send_port_btn(30, 05, 00, 00); } }); this.BT_JBH_Attitude_Power.DoCanExcute = new Func((o) => { return true; }); this.BT_JBH_Attitude_Data = new CommandBase(); this.BT_JBH_Attitude_Data.DoExcute = new Action((o) => { if (Switch_Model.JBH_Attitude_Data) { send_port_btn(30, 05, 01, 01); } else { send_port_btn(30, 05, 00, 01); } }); this.BT_JBH_Attitude_Data.DoCanExcute = new Func((o) => { return true; }); this.BT_JBH_CTD_Power = new CommandBase(); this.BT_JBH_CTD_Power.DoExcute = new Action((o) => { if (Switch_Model.JBH_CTD_Power) { send_port_btn(30, 04, 01, 00); } else { send_port_btn(30, 04, 00, 00); } }); this.BT_JBH_CTD_Power.DoCanExcute = new Func((o) => { return true; }); this.BT_JBH_CTD_Data = new CommandBase(); this.BT_JBH_CTD_Data.DoExcute = new Action((o) => { if (Switch_Model.JBH_CTD_Data) { send_port_btn(30, 04, 01, 01); } else { send_port_btn(30, 04, 00, 01); } }); this.BT_JBH_CTD_Data.DoCanExcute = new Func((o) => { return true; }); this.BT_JBH_Adcp_Power = new CommandBase(); this.BT_JBH_Adcp_Power.DoExcute = new Action((o) => { if (Switch_Model.JBH_Adcp_Power) { send_port_btn(31, 00, 01, 00); } else { send_port_btn(31, 00, 00, 00); } }); this.BT_JBH_Adcp_Power.DoCanExcute = new Func((o) => { return true; }); this.BT_JBH_Adcp_Data = new CommandBase(); this.BT_JBH_Adcp_Data.DoExcute = new Action((o) => { if (Switch_Model.JBH_Adcp_Data) { send_port_btn(31, 00, 01, 01); } else { send_port_btn(31, 00, 00, 01); } }); this.BT_JBH_Adcp_Data.DoCanExcute = new Func((o) => { return true; }); this.Read_SET = new CommandBase(); this.Read_SET.DoExcute = new Action(Par_Read); this.Read_SET.DoCanExcute = new Func((o) => { return true; }); this.System_SET = new CommandBase(); this.System_SET.DoExcute = new Action(Par_Set); this.System_SET.DoCanExcute = new Func((o) => { return true; }); this.TB_Time = new CommandBase(); this.TB_Time.DoExcute = new Action(Tb_Time); this.TB_Time.DoCanExcute = new Func((o) => { return true; }); this.File_Require = new CommandBase(); this.File_Require.DoExcute = new Action(FILE_Require); this.File_Require.DoCanExcute = new Func((o) => { return true; }); this.objGetIrStrength = new CommandBase(); this.objGetIrStrength.DoExcute = new Action(GetIrStrength); this.objGetIrStrength.DoCanExcute = new Func((o) => { return true; }); this.objIrDial = new CommandBase(); this.objIrDial.DoExcute = new Action(IrDial); this.objIrDial.DoCanExcute = new Func((o) => { return true; }); this.objIrDisConnect = new CommandBase(); this.objIrDisConnect.DoExcute = new Action(IrDisConnect); this.objIrDisConnect.DoCanExcute = new Func((o) => { return true; }); this.DataSearch = new CommandBase(); this.DataSearch.DoExcute = new Action(GetData); this.DataSearch.DoCanExcute = new Func((o) => { return true; }); //手动读取浮标姿态传感器数据 this.objGetIrAttitude = new CommandBase(); this.objGetIrAttitude.DoExcute = new Action((o) => { send_port_hand(13); }); this.objGetIrAttitude.DoCanExcute = new Func((o) => { return true; }); //手动读取浮标ADCP-WSH300 this.objGetIrFBADCP = new CommandBase(); this.objGetIrFBADCP.DoExcute = new Action((o) => { send_port_hand(11); }); this.objGetIrFBADCP.DoCanExcute = new Func((o) => { return true; }); //手动读取浮标环境参数 this.objIrEnvironmental = new CommandBase(); this.objIrEnvironmental.DoExcute = new Action((o) => { send_port_hand(10); }); this.objIrEnvironmental.DoCanExcute = new Func((o) => { return true; }); //手动读取潜标CTD数据 this.objGetIrQBCTD = new CommandBase(); this.objGetIrQBCTD.DoExcute = new Action((o) => { send_port_hand(25); }); this.objGetIrQBCTD.DoCanExcute = new Func((o) => { return true; }); //手动读取潜标ADCP数据 this.objGetIrQBADCP = new CommandBase(); this.objGetIrQBADCP.DoExcute = new Action((o) => { send_port_hand(21); }); this.objGetIrQBADCP.DoCanExcute = new Func((o) => { return true; }); //手动读取接驳盒CTD数据 this.objGetIrJBHCTD = new CommandBase(); this.objGetIrJBHCTD.DoExcute = new Action((o) => { send_port_hand(30); }); this.objGetIrJBHCTD.DoCanExcute = new Func((o) => { return true; }); //手动读取接驳盒ADCP数据 this.objGetIrJBHADCP = new CommandBase(); this.objGetIrJBHADCP.DoExcute = new Action((o) => { send_port_hand(31); }); this.objGetIrJBHADCP.DoCanExcute = new Func((o) => { return true; }); } /// /// 取出数据库中的值并赋值 /// public static void Flash_LIST() { List enviroment_Models = localDataAccess.Enviroment_Models_List(); for (int i = 0; i < enviroment_Models.Count; i++) { Enviroment_Model.Datetime_List.Add(enviroment_Models[i].Datetime.ToString("yyyy-MM-dd HH:mm:ss")); Enviroment_Model.FB_Tem_List.Add(enviroment_Models[i].FB_Tem); Enviroment_Model.FB_Hum_List.Add(enviroment_Models[i].FB_Hum); Enviroment_Model.FB_Vol_24_in_List.Add(enviroment_Models[i].FB_Vol_24_in); Enviroment_Model.FB_Cur_24_in_List.Add(enviroment_Models[i].FB_Cur_24_in); Enviroment_Model.FB_Vol_48_out_List.Add(enviroment_Models[i].FB_Vol_48_out); Enviroment_Model.FB_Vol_95_out_List.Add(enviroment_Models[i].FB_Vol_95_out); Enviroment_Model.QB_Tem1_List.Add(enviroment_Models[i].QB_Tem1); Enviroment_Model.QB_Tem2_List.Add(enviroment_Models[i].QB_Tem2); Enviroment_Model.QB_Hum_List.Add(enviroment_Models[i].QB_Hum); Enviroment_Model.QB_Leak_List.Add(enviroment_Models[i].QB_Leak); Enviroment_Model.JBH_Tem1_List.Add(enviroment_Models[i].JBH_Tem1); Enviroment_Model.JBH_Tem2_List.Add(enviroment_Models[i].JBH_Tem2); Enviroment_Model.JBH_Hum_List.Add(enviroment_Models[i].JBH_Hum); Enviroment_Model.JBH_Leak_List.Add(enviroment_Models[i].JBH_Leak); Enviroment_Model.JBH_Vol_24V_out_List.Add(enviroment_Models[i].JBH_Vol_24V_out); Enviroment_Model.JBH_Cur_24V_out_List.Add(enviroment_Models[i].JBH_Cur_24V_out); } List buoy_Sensor_AdcpModels = localDataAccess.Buoy_sensor_adcpModel_List(); for (int i = 0; i < buoy_Sensor_AdcpModels.Count; i++) { Buoy_sensor_adcpModel.Datetime_List.Add(buoy_Sensor_AdcpModels[i].datetime_Sensor.ToString("yyyy-MM-dd HH:mm:ss")); Buoy_sensor_adcpModel.Adcp_Pre_List.Add(buoy_Sensor_AdcpModels[i].Adcp_Pre); Buoy_sensor_adcpModel.Adcp_Ysb_List.Add(buoy_Sensor_AdcpModels[i].Adcp_Ysb); } List conbox_sensor_adcpModel = localDataAccess.Conbox_sensor_adcpModel_List(); for (int i = 0; i < conbox_sensor_adcpModel.Count; i++) { Conbox_sensor_adcpModel.Datetime_List.Add(conbox_sensor_adcpModel[i].datetime_Sensor.ToString("yyyy-MM-dd HH:mm:ss")); Conbox_sensor_adcpModel.Adcp_Pre_List.Add(conbox_sensor_adcpModel[i].Adcp_Pre); Conbox_sensor_adcpModel.Adcp_Ysb_List.Add(conbox_sensor_adcpModel[i].Adcp_Ysb); } List lattarget_Sensor_Adcp300Models = localDataAccess.Lattarget_sensor_adcp300Model_List(); for (int i = 0; i < lattarget_Sensor_Adcp300Models.Count; i++) { Lattarget_sensor_adcp300Model.Datetime_List.Add(lattarget_Sensor_Adcp300Models[i].datetime_Sensor.ToString("yyyy-MM-dd HH:mm:ss")); Lattarget_sensor_adcp300Model.Adcp_Pre_List.Add(lattarget_Sensor_Adcp300Models[i].Adcp_Pre); Lattarget_sensor_adcp300Model.Adcp_Ysb_List.Add(lattarget_Sensor_Adcp300Models[i].Adcp_Ysb); } List buoy_Sensor_OthModels = localDataAccess.Buoy_sensor_othModel_List(); for (int i = 0; i < buoy_Sensor_OthModels.Count; i++) { Buoy_sensor_othModel.Datetime_List.Add(buoy_Sensor_OthModels[i].datetime_Sensor.ToString("yyyy-MM-dd HH:mm:ss")); Buoy_sensor_othModel.CH4_Pre_List.Add(buoy_Sensor_OthModels[i].CH4_Pre); Buoy_sensor_othModel.CH4_Con_List.Add(buoy_Sensor_OthModels[i].CH4_Con); Buoy_sensor_othModel.CO2_Pre_List.Add(buoy_Sensor_OthModels[i].CO2_Pre); Buoy_sensor_othModel.CO2_Con_List.Add(buoy_Sensor_OthModels[i].CO2_Con); Buoy_sensor_othModel.METS_Meth_List.Add(buoy_Sensor_OthModels[i].METS_Meth); Buoy_sensor_othModel.METS_Tem_List.Add(buoy_Sensor_OthModels[i].METS_Tem); Buoy_sensor_othModel.Air_Tem_List.Add(buoy_Sensor_OthModels[i].Air_Tem); Buoy_sensor_othModel.Air_Hum_List.Add(buoy_Sensor_OthModels[i].Air_Hum); Buoy_sensor_othModel.Air_Pre_List.Add(buoy_Sensor_OthModels[i].Air_Pre); Buoy_sensor_othModel.Wind_Dir_List.Add(buoy_Sensor_OthModels[i].Wind_Dir); Buoy_sensor_othModel.Wind_Speed_List.Add(buoy_Sensor_OthModels[i].Wind_Speed); Buoy_sensor_othModel.Wind_Speed_Max_List.Add(buoy_Sensor_OthModels[i].Wind_Speed_Max); Buoy_sensor_othModel.Fzd_List.Add(buoy_Sensor_OthModels[i].Fzd); Buoy_sensor_othModel.RainFall_List.Add(buoy_Sensor_OthModels[i].RainFall); Buoy_sensor_othModel.Go_sailing_CH4_Dry_List.Add(buoy_Sensor_OthModels[i].Go_sailing_CH4_Dry); Buoy_sensor_othModel.Go_sailing_CH4_H2O_List.Add(buoy_Sensor_OthModels[i].Go_sailing_CH4_H2O); Buoy_sensor_othModel.Go_sailing_CH4_C2H6_List.Add(buoy_Sensor_OthModels[i].Go_sailing_CH4_C2H6); Buoy_sensor_othModel.Tem_List.Add(buoy_Sensor_OthModels[i].Tem); Buoy_sensor_othModel.Hum_List.Add(buoy_Sensor_OthModels[i].Hum); Buoy_sensor_othModel.Vol_24_in_List.Add(buoy_Sensor_OthModels[i].Vol_24_in); Buoy_sensor_othModel.Cur_24_in_List.Add(buoy_Sensor_OthModels[i].Cur_24_in); Buoy_sensor_othModel.Vol_48_out_List.Add(buoy_Sensor_OthModels[i].Vol_48_out); Buoy_sensor_othModel.Vol_95_out_List.Add(buoy_Sensor_OthModels[i].Vol_95_out); } List conbox_Sensor_OthModels = localDataAccess.Conbox_sensor_othModel_List(); for (int i = 0; i < conbox_Sensor_OthModels.Count; i++) { Conbox_sensor_othModel.Datetime_List.Add(conbox_Sensor_OthModels[i].datetime_Sensor.ToString("yyyy-MM-dd HH:mm:ss")); Conbox_sensor_othModel.CH4_Pre_List.Add(conbox_Sensor_OthModels[i].CH4_Pre); Conbox_sensor_othModel.CH4_Con_List.Add(conbox_Sensor_OthModels[i].CH4_Con); Conbox_sensor_othModel.CO2_Pre_List.Add(conbox_Sensor_OthModels[i].CO2_Pre); Conbox_sensor_othModel.CO2_Con_List.Add(conbox_Sensor_OthModels[i].CO2_Con); Conbox_sensor_othModel.METS_Meth_List.Add(conbox_Sensor_OthModels[i].METS_Meth); Conbox_sensor_othModel.METS_Tem_List.Add(conbox_Sensor_OthModels[i].METS_Tem); Conbox_sensor_othModel.CTD_Tem_List.Add(conbox_Sensor_OthModels[i].CTD_Tem); Conbox_sensor_othModel.CTD_Con_List.Add(conbox_Sensor_OthModels[i].CTD_Con); Conbox_sensor_othModel.CTD_Pre_List.Add(conbox_Sensor_OthModels[i].CTD_Pre); Conbox_sensor_othModel.Angle_sensor_x_List.Add(conbox_Sensor_OthModels[i].Angle_sensor_x); Conbox_sensor_othModel.Angle_sensor_y_List.Add(conbox_Sensor_OthModels[i].Angle_sensor_y); Conbox_sensor_othModel.Angle_sensor_z_List.Add(conbox_Sensor_OthModels[i].Angle_sensor_z); Conbox_sensor_othModel.CTD_YLS_List.Add(conbox_Sensor_OthModels[i].CTD_YLS); Conbox_sensor_othModel.CTD_ZD_List.Add(conbox_Sensor_OthModels[i].CTD_ZD); Conbox_sensor_othModel.CTD_Rjy_List.Add(conbox_Sensor_OthModels[i].CTD_Rjy); } List lattarget_Sensor_OthModels = localDataAccess.Lattarget_sensor_othModel_List(); for (int i = 0; i < lattarget_Sensor_OthModels.Count; i++) { Lattarget_sensor_othModel.Datetime_List.Add(lattarget_Sensor_OthModels[i].datetime_Sensor.ToString("yyyy-MM-dd HH:mm:ss")); Lattarget_sensor_othModel.CO2_Pre_List.Add(lattarget_Sensor_OthModels[i].CO2_Pre); Lattarget_sensor_othModel.CO2_Con_List.Add(lattarget_Sensor_OthModels[i].CO2_Con); Lattarget_sensor_othModel.METS_Meth_List.Add(lattarget_Sensor_OthModels[i].METS_Meth); Lattarget_sensor_othModel.METS_Tem_List.Add(lattarget_Sensor_OthModels[i].METS_Tem); Lattarget_sensor_othModel.CTD_Tem_List.Add(lattarget_Sensor_OthModels[i].CTD_Tem); Lattarget_sensor_othModel.CTD_Con_List.Add(lattarget_Sensor_OthModels[i].CTD_Con); Lattarget_sensor_othModel.CTD_Pre_List.Add(lattarget_Sensor_OthModels[i].CTD_Pre); Lattarget_sensor_othModel.CTD_YLS_List.Add(lattarget_Sensor_OthModels[i].CTD_YLS); Lattarget_sensor_othModel.CTD_ZD_List.Add(lattarget_Sensor_OthModels[i].CTD_ZD); Lattarget_sensor_othModel.CTD_Rjy_List.Add(lattarget_Sensor_OthModels[i].CTD_Rjy); Lattarget_sensor_othModel.CTD_Rjy_Vol_List.Add(lattarget_Sensor_OthModels[i].CTD_Rjy_Vol); Lattarget_sensor_othModel.Angle_sensor_x_List.Add(lattarget_Sensor_OthModels[i].Angle_sensor_x); Lattarget_sensor_othModel.Angle_sensor_y_List.Add(lattarget_Sensor_OthModels[i].Angle_sensor_y); Lattarget_sensor_othModel.Angle_sensor_z_List.Add(lattarget_Sensor_OthModels[i].Angle_sensor_z); } gPSModel = localDataAccess.GetGPS(); } static string ParaName = ""; public static void Flash_LIST(string paraName, string starttime, string endtime) { ParaName = paraName; string header = paraName.Split(',')[0]; string sensorName = paraName.Split(',')[1]; string para = paraName.Split(',')[2]; Para_Model para_Model = null; if (header.Equals("浮标")) { if (sensorName.Equals("环境参数")) { if (para.Equals("温度")) { para_Model = localDataAccess.GetParaDate("FB_Tem", "enviroment_model", starttime, endtime); Para_Model.ParaName = "温度/℃"; } else if (para.Equals("湿度")) { para_Model = localDataAccess.GetParaDate("FB_Hum", "enviroment_model", starttime, endtime); Para_Model.ParaName = "湿度/%"; } else if (para.Equals("24V输入电压")) { para_Model = localDataAccess.GetParaDate("FB_Vol_24_in", "enviroment_model", starttime, endtime); Para_Model.ParaName = "24V输入电压/V"; } else if (para.Equals("24V输入电流")) { para_Model = localDataAccess.GetParaDate("FB_Cur_24_in", "enviroment_model", starttime, endtime); Para_Model.ParaName = "24V输入电流/A"; } else if (para.Equals("48V输出电压")) { para_Model = localDataAccess.GetParaDate("FB_Vol_48_out", "enviroment_model", starttime, endtime); Para_Model.ParaName = "48V输出电压/V"; } else if (para.Equals("95V输出电压")) { para_Model = localDataAccess.GetParaDate("FB_Vol_95_out", "enviroment_model", starttime, endtime); Para_Model.ParaName = "95V输出电压/V"; } } else if (sensorName.Equals("甲烷传感器")) { if (para.Equals("压力")) { para_Model = localDataAccess.GetParaDate("CH4_Pre", "buoy_sensor_othmodel", starttime, endtime); Para_Model.ParaName = "压力/μatm"; } else if (para.Equals("浓度")) { para_Model = localDataAccess.GetParaDate("CH4_Con", "buoy_sensor_othmodel", starttime, endtime); Para_Model.ParaName = "浓度/ppm"; } } else if (sensorName.Equals("二氧化碳传感器")) { if (para.Equals("压力")) { para_Model = localDataAccess.GetParaDate("CO2_Pre", "buoy_sensor_othmodel", starttime, endtime); Para_Model.ParaName = "压力/μatm"; } else if (para.Equals("浓度")) { para_Model = localDataAccess.GetParaDate("CO2_Con", "buoy_sensor_othmodel", starttime, endtime); Para_Model.ParaName = "浓度/ppm"; } } else if (sensorName.Equals("走行甲烷传感器")) { if (para.Equals("ch4_dry")) { para_Model = localDataAccess.GetParaDate("Go_sailing_CH4_Dry", "buoy_sensor_othmodel", starttime, endtime); Para_Model.ParaName = "ch4_dry/ppm"; } else if (para.Equals("C2H6")) { para_Model = localDataAccess.GetParaDate("Go_sailing_CH4_H2O", "buoy_sensor_othmodel", starttime, endtime); Para_Model.ParaName = "C2H6/ppb"; } else if (para.Equals("H2O")) { para_Model = localDataAccess.GetParaDate("Go_sailing_CH4_C2H6", "buoy_sensor_othmodel", starttime, endtime); Para_Model.ParaName = "H2O/ppm"; } } else if (sensorName.Equals("气象传感器")) { if (para.Equals("气温")) { para_Model = localDataAccess.GetParaDate("Air_Tem", "buoy_sensor_othmodel", starttime, endtime); Para_Model.ParaName = "气温/℃"; } else if (para.Equals("湿度")) { para_Model = localDataAccess.GetParaDate("Air_Hum", "buoy_sensor_othmodel", starttime, endtime); Para_Model.ParaName = "湿度/%"; } else if (para.Equals("大气压")) { para_Model = localDataAccess.GetParaDate("Air_Pre", "buoy_sensor_othmodel", starttime, endtime); Para_Model.ParaName = "大气压/Pa"; } else if (para.Equals("风向")) { para_Model = localDataAccess.GetParaDate("Wind_Dir", "buoy_sensor_othmodel", starttime, endtime); Para_Model.ParaName = "风向/°"; } else if (para.Equals("风速")) { para_Model = localDataAccess.GetParaDate("Wind_Speed", "buoy_sensor_othmodel", starttime, endtime); Para_Model.ParaName = "风速/m/s"; } else if (para.Equals("最大风速")) { para_Model = localDataAccess.GetParaDate("Wind_Speed_Max", "buoy_sensor_othmodel", starttime, endtime); Para_Model.ParaName = "最大风速/m/s"; } else if (para.Equals("辐照度")) { para_Model = localDataAccess.GetParaDate("Fzd", "buoy_sensor_othmodel", starttime, endtime); Para_Model.ParaName = "辐照度"; } else if (para.Equals("雨量")) { para_Model = localDataAccess.GetParaDate("RainFall", "buoy_sensor_othmodel", starttime, endtime); Para_Model.ParaName = "雨量/inches"; } } else if (sensorName.Equals("ADCP-WSH300传感器")) { if (para.Equals("压力")) { para_Model = localDataAccess.GetParaDate("Adcp_Pre", "buoy_sensor_adcpmodel", starttime, endtime); Para_Model.ParaName = "压力/Pa"; } else if (para.Equals("压缩比")) { para_Model = localDataAccess.GetParaDate("Adcp_Ysb", "buoy_sensor_adcpmodel", starttime, endtime); Para_Model.ParaName = "压缩比/%"; } } } else if (header.Equals("潜标")) { if (sensorName.Equals("环境参数")) { if (para.Equals("温度1")) { para_Model = localDataAccess.GetParaDate("QB_Tem1", "enviroment_model", starttime, endtime); Para_Model.ParaName = "温度1/℃"; } else if (para.Equals("温度2")) { para_Model = localDataAccess.GetParaDate("QB_Tem2", "enviroment_model", starttime, endtime); Para_Model.ParaName = "温度2/℃"; } else if (para.Equals("湿度")) { para_Model = localDataAccess.GetParaDate("QB_Hum", "enviroment_model", starttime, endtime); Para_Model.ParaName = "湿度/%"; } else if (para.Equals("漏水")) { para_Model = localDataAccess.GetParaDate("QB_Leak", "enviroment_model", starttime, endtime); Para_Model.ParaName = "漏水/V"; } } else if (sensorName.Equals("二氧化碳传感器")) { if (para.Equals("压力")) { para_Model = localDataAccess.GetParaDate("CO2_Pre", "lattarget_sensor_othmodel", starttime, endtime); Para_Model.ParaName = "压力/μatm"; } else if (para.Equals("浓度")) { para_Model = localDataAccess.GetParaDate("CO2_Con", "lattarget_sensor_othmodel", starttime, endtime); Para_Model.ParaName = "浓度/ppm"; } } else if (sensorName.Equals("METS甲烷传感器")) { if (para.Equals("Methane")) { para_Model = localDataAccess.GetParaDate("METS_Meth", "lattarget_sensor_othmodel", starttime, endtime); Para_Model.ParaName = "Methane/μatm"; } else if (para.Equals("温度")) { para_Model = localDataAccess.GetParaDate("METS_Tem", "lattarget_sensor_othmodel", starttime, endtime); Para_Model.ParaName = "温度/℃"; } } else if (sensorName.Equals("CTD传感器")) { if (para.Equals("温度")) { para_Model = localDataAccess.GetParaDate("CTD_Tem", "lattarget_sensor_othmodel", starttime, endtime); Para_Model.ParaName = "温度/℃"; } else if (para.Equals("压力")) { para_Model = localDataAccess.GetParaDate("CTD_Pre", "lattarget_sensor_othmodel", starttime, endtime); Para_Model.ParaName = "压力/Pa"; } else if (para.Equals("浊度")) { para_Model = localDataAccess.GetParaDate("CTD_ZD", "lattarget_sensor_othmodel", starttime, endtime); Para_Model.ParaName = "浊度/ppt"; } else if (para.Equals("电导率")) { para_Model = localDataAccess.GetParaDate("CTD_Con", "lattarget_sensor_othmodel", starttime, endtime); Para_Model.ParaName = "电导率/s/m"; } else if (para.Equals("叶绿素")) { para_Model = localDataAccess.GetParaDate("CTD_YLS", "lattarget_sensor_othmodel", starttime, endtime); Para_Model.ParaName = "叶绿素/V"; } else if (para.Equals("溶解氧")) { para_Model = localDataAccess.GetParaDate("CTD_Rjy", "lattarget_sensor_othmodel", starttime, endtime); Para_Model.ParaName = "溶解氧/mg/L"; } } else if (sensorName.Equals("姿态传感器")) { if (para.Equals("X轴")) { para_Model = localDataAccess.GetParaDate("Angle_sensor_x", "lattarget_sensor_othmodel", starttime, endtime); Para_Model.ParaName = "X轴/°"; } else if (para.Equals("Y轴")) { para_Model = localDataAccess.GetParaDate("Angle_sensor_y", "lattarget_sensor_othmodel", starttime, endtime); Para_Model.ParaName = "Y轴/°"; } else if (para.Equals("Z轴")) { para_Model = localDataAccess.GetParaDate("Angle_sensor_z", "lattarget_sensor_othmodel", starttime, endtime); Para_Model.ParaName = "Z轴/°"; } } else if (sensorName.Equals("ADCP-WSH300传感器")) { if (para.Equals("压力")) { para_Model = localDataAccess.GetParaDate("Adcp_Pre", "lattarget_sensor_adcp300model", starttime, endtime); Para_Model.ParaName = "压力/Pa"; } else if (para.Equals("压缩比")) { para_Model = localDataAccess.GetParaDate("Adcp_Ysb", "lattarget_sensor_adcp300model", starttime, endtime); Para_Model.ParaName = "压缩比/%"; } } } else if (header.Equals("接驳盒")) { if (sensorName.Equals("环境参数")) { if (para.Equals("温度1")) { para_Model = localDataAccess.GetParaDate("JBH_Tem1", "enviroment_model", starttime, endtime); Para_Model.ParaName = "温度1/℃"; } else if (para.Equals("温度2")) { para_Model = localDataAccess.GetParaDate("JBH_Tem2", "enviroment_model", starttime, endtime); Para_Model.ParaName = "温度2/℃"; } else if (para.Equals("湿度")) { para_Model = localDataAccess.GetParaDate("JBH_Hum", "enviroment_model", starttime, endtime); Para_Model.ParaName = "湿度/%"; } else if (para.Equals("漏水")) { para_Model = localDataAccess.GetParaDate("JBH_Leak", "enviroment_model", starttime, endtime); Para_Model.ParaName = "漏水/V"; } else if (para.Equals("24V输入电压")) { para_Model = localDataAccess.GetParaDate("JBH_Vol_24V_out", "enviroment_model", starttime, endtime); Para_Model.ParaName = "24V输入电压/V"; } else if (para.Equals("24V输入电流")) { para_Model = localDataAccess.GetParaDate("JBH_Cur_24V_out", "enviroment_model", starttime, endtime); Para_Model.ParaName = "24V输入电流/A"; } } else if (sensorName.Equals("CTD传感器")) { if (para.Equals("温度")) { para_Model = localDataAccess.GetParaDate("CTD_Tem", "conbox_sensor_othmodel", starttime, endtime); Para_Model.ParaName = "温度/℃"; } else if (para.Equals("压力")) { para_Model = localDataAccess.GetParaDate("CTD_Pre", "conbox_sensor_othmodel", starttime, endtime); Para_Model.ParaName = "压力/Pa"; } else if (para.Equals("浊度")) { para_Model = localDataAccess.GetParaDate("CTD_ZD", "conbox_sensor_othmodel", starttime, endtime); Para_Model.ParaName = "浊度/ppt"; } else if (para.Equals("电导率")) { para_Model = localDataAccess.GetParaDate("CTD_Con", "conbox_sensor_othmodel", starttime, endtime); Para_Model.ParaName = "电导率/s/m"; } else if (para.Equals("叶绿素")) { para_Model = localDataAccess.GetParaDate("CTD_YLS", "conbox_sensor_othmodel", starttime, endtime); Para_Model.ParaName = "叶绿素/V"; } else if (para.Equals("溶解氧")) { para_Model = localDataAccess.GetParaDate("CTD_Rjy", "conbox_sensor_othmodel", starttime, endtime); Para_Model.ParaName = "溶解氧/mg/L"; } } else if (sensorName.Equals("姿态传感器")) { if (para.Equals("X轴")) { para_Model = localDataAccess.GetParaDate("Angle_sensor_x", "conbox_sensor_othmodel", starttime, endtime); Para_Model.ParaName = "X轴/°"; } else if (para.Equals("Y轴")) { para_Model = localDataAccess.GetParaDate("Angle_sensor_y", "conbox_sensor_othmodel", starttime, endtime); Para_Model.ParaName = "Y轴/°"; } else if (para.Equals("Z轴")) { para_Model = localDataAccess.GetParaDate("Angle_sensor_z", "conbox_sensor_othmodel", starttime, endtime); Para_Model.ParaName = "Z轴/°"; } } else if (sensorName.Equals("甲烷传感器")) { if (para.Equals("压力")) { para_Model = localDataAccess.GetParaDate("CH4_Pre", "conbox_sensor_othmodel", starttime, endtime); Para_Model.ParaName = "压力/μatm"; } else if (para.Equals("浓度")) { para_Model = localDataAccess.GetParaDate("CH4_Con", "conbox_sensor_othmodel", starttime, endtime); Para_Model.ParaName = "浓度/ppm"; } } else if (sensorName.Equals("二氧化碳传感器")) { if (para.Equals("压力")) { para_Model = localDataAccess.GetParaDate("CO2_Pre", "conbox_sensor_othmodel", starttime, endtime); Para_Model.ParaName = "压力/μatm"; } else if (para.Equals("浓度")) { para_Model = localDataAccess.GetParaDate("CO2_Con", "conbox_sensor_othmodel", starttime, endtime); Para_Model.ParaName = "浓度/ppm"; } } else if (sensorName.Equals("METS甲烷传感器")) { if (para.Equals("Methane")) { para_Model = localDataAccess.GetParaDate("METS_Meth", "conbox_sensor_othmodel", starttime, endtime); Para_Model.ParaName = "Methane/μatm"; } else if (para.Equals("温度")) { para_Model = localDataAccess.GetParaDate("METS_Tem", "conbox_sensor_othmodel", starttime, endtime); Para_Model.ParaName = "温度/℃"; } } else if (sensorName.Equals("ADCP-WSH300传感器")) { if (para.Equals("压力")) { para_Model = localDataAccess.GetParaDate("Adcp_Pre", "conbox_sensor_adcpmodel", starttime, endtime); Para_Model.ParaName = "压力/Pa"; } else if (para.Equals("压缩比")) { para_Model = localDataAccess.GetParaDate("Adcp_Ysb", "conbox_sensor_adcpmodel", starttime, endtime); Para_Model.ParaName = "压缩比/%"; } else if (para.Equals("流速")) { } else if (para.Equals("流向")) { } } } if (para_Model != null) { para_Model.DateTime.Reverse(); para_Model.Para_LC.Reverse(); para_Model.Para.Reverse(); Para_Model.DateTime = para_Model.DateTime; Para_Model.Para_LC = para_Model.Para_LC; Para_Model.Para = para_Model.Para; } } private void GetData(object o) { if (Para_Model.StartTime > Para_Model.EndTime) { ErrorMessageModel.DataSearchErrorMessage = "开始时间不得大于结束时间!!!"; return; } ErrorMessageModel.DataSearchErrorMessage = ""; Flash_LIST(ParaName, Para_Model.StartTime.ToString("yyyy-MM-dd HH:mm:ss"), Para_Model.EndTime.ToString("yyyy-MM-dd HH:mm:ss")); ////通过反射来刷新界面 ////通过该类类名类的引用 //Type t = Type.GetType("垂直剖面动态观测系统.View.ParameterView"); ////通过该类名的引用,获取该类中对应方法名的方法 //System.Reflection.MethodInfo method = t.GetMethod("Change"); ////加载方法 //object change = System.Activator.CreateInstance(t); ////调用方法 //method.Invoke(change, null); } static bool isRunning = true; static Task mainTask = null; static RTU rtuInstance = null; public static void Start(Action successAction, Action faultAction) { SerialInfo.PortName = LoginInfo.PortName; SerialInfo.BaudRate = LoginInfo.BaudRate; SerialInfo.DataBit = 8; SerialInfo.Parity = Parity.None; SerialInfo.StopBits = StopBits.One; mainTask = Task.Run(() => { rtuInstance = RTU.GetInstance(SerialInfo); rtuInstance.ResponseData = new Action>(ParsingData); if (rtuInstance.Connection()) { //当所有东西执行完之后 successAction(); } else { faultAction("程序无法启动,串口连接初始化失败!请检查设备是否连接正常"); return; } }); } static string message = ""; //解析 private static void ParsingData(List byteList) { //校验当前List是否为空或者长度 if (byteList == null || byteList.Count == 0) return; //首先判断是不是铱星的信息 string rec_16 = null; for (int i = 0; i < byteList.Count; i++) { rec_16 += byteList[i].ToString("X2"); //16进制显示 } ErrorMessageModel._Messagelog += System.DateTime.Now + " " + rec_16 + "\r\n" + "\r\n"; string _message = tools.HexStringToString(rec_16, Encoding.Default).Replace("\r\n", ""); //数据补发机制 if (_request) { _wait_rec = true; switch (Flag) { case 0: if (_message.Contains("CSQ")) { if (_message.Split(':')[1].StartsWith("5") || _message.Split(':')[1].StartsWith("4")) { Thread.Sleep(5000); _Send_Message = "ATD00881693818244\r\n"; Wait_rec(_Send_Message, 1); } else { Wait_rec(_Send_Message, 0); } } else if (_message.Contains("ERROR") || _message.Contains("CARRIER")) { Wait_rec(_Send_Message, 0); } break; case 1: if (_message.Contains("CONNECT")) { _wait_rec = true; IsConnected = true; } else if (_message.Contains("ERROR") || _message.Contains("CARRIER")) { _Send_Message = "AT+CSQ\r\n"; Wait_rec(_Send_Message, 0); } break; default: break; } _wait_rec = false; } //获取当前系统时间 DateTime time_DataBase = DateTime.Now; Random ran = new Random(); //帧头 byte[] _header = new byte[] { 0xEF, 0xFE, 0xFE, 0xEF }; //帧尾 byte _end = 0x16; //长度校验 int _len = 0; //校验 int _check = 0; //功能码 byte _fun_code = 0; //类型 byte _kind = 0; //数据类型 byte _data_type = 0; //校验帧头 if (byteList[0] != _header[0] && byteList[0] != _header[2]) return; if (byteList[1] != _header[1] && byteList[1] != _header[3]) return; //校验帧尾 if (byteList[byteList.Count - 1] != _end) return; //获取检验长度 _len = Convert.ToInt32(byteList[2].ToString("X2") + byteList[3].ToString("X2"), 16); //获取检验的校验和 for (int i = 0; i < byteList.Count - 2; i++) { _check += byteList[i]; } _check = _check & 0xFF; //长度 及 累加和校验 if (_len != byteList.Count - 4 || byteList[byteList.Count - 2] != _check) return; _len = 0; _check = 0; //功能码 _fun_code = byteList[5]; //类型 _kind = byteList[6]; System.DateTime startTime = TimeZone.CurrentTimeZone.ToLocalTime(new System.DateTime(1970, 1, 1)); // 当地时区 DateTime dt = new DateTime(); switch (_fun_code) { //数据解析 case 0x02: message = "数据解析 "; //ADCP压力 string pre = ""; //ADCP string adcp = ""; double x, y, _x, _y; switch (_kind) { //接驳盒端ADCP case 31: JL[5] = 1; message += "接驳盒ADCP"; if ((int)byteList[8] == 0 && (int)byteList[9] == 0 && (int)byteList[10] == 0) { Conbox_sensor_adcpModel.datetime_Sensor = DateTime.Now; } else { Conbox_sensor_adcpModel.datetime_Sensor = Convert.ToDateTime((int)byteList[8] + "-" + (int)byteList[9] + "-" + (int)byteList[10] + " " + (int)byteList[11] + ":" + (int)byteList[12] + ":" + (int)byteList[13]); Add_List(Conbox_sensor_adcpModel.Datetime_List, Conbox_sensor_adcpModel.datetime_Sensor.ToString("yyyy-MM-dd HH:mm:ss")); } //压力 Conbox_sensor_adcpModel.Adcp_Pre = tools.bytetoint(byteList, 14, 4); Add_List(Conbox_sensor_adcpModel.Adcp_Pre_List, Conbox_sensor_adcpModel.Adcp_Pre); //压缩比 Conbox_sensor_adcpModel.Adcp_Ysb = (int)byteList[18]; Add_List(Conbox_sensor_adcpModel.Adcp_Ysb_List, Conbox_sensor_adcpModel.Adcp_Ysb); for (int i = 0; i < byteList.Count; i++) { //27层ADCP数据 if (i > 18 && i < byteList.Count - 2) { adcp += (int)byteList[i] + ","; } } //27层ADCP Conbox_sensor_adcpModel.Adcp_VD = adcp.Substring(0, adcp.Length - 1); //返回解析成功指令 send_port(_kind.ToString("X2"), "01"); //Mysql.write_ob(Conbox_sensor_adcpModel, "conbox_sensor_adcpmodel"); localDataAccess.write("INSERT INTO conbox_sensor_adcpmodel(datetime,datetime_Sensor,Adcp_Pre,Adcp_Ysb,Adcp_VD) VALUES('" + time_DataBase + "','" + Conbox_sensor_adcpModel.datetime_Sensor + "','" + Conbox_sensor_adcpModel.Adcp_Pre + "','" + Conbox_sensor_adcpModel.Adcp_Ysb + "','" + Conbox_sensor_adcpModel.Adcp_VD + "');"); //tools.Count_rate(5); break; //接驳盒端其他传感器集合 case 30: JL[4] = 1; message += "接驳盒端其他传感器集合"; if ((int)byteList[8] == 0 && (int)byteList[9] == 0 && (int)byteList[10] == 0 && (int)byteList[11] == 0) { dt = DateTime.Now; } else { //UTC时间 dt = startTime.AddSeconds(Convert.ToInt32(byteList[8].ToString("X2") + byteList[9].ToString("X2") + byteList[10].ToString("X2") + byteList[11].ToString("X2"), 16)); Add_List(Conbox_sensor_othModel.Datetime_List, dt.ToString("yyyy-MM-dd HH:mm:ss")); } Conbox_sensor_othModel.datetime_Sensor = dt; Conbox_sensor_othModel.CH4_Pre = tools.bytetofloat(byteList, 12); Add_List(Conbox_sensor_othModel.CH4_Pre_List, Conbox_sensor_othModel.CH4_Pre); Conbox_sensor_othModel.CH4_Con = tools.bytetofloat(byteList, 16); Add_List(Conbox_sensor_othModel.CH4_Con_List, Conbox_sensor_othModel.CH4_Con); Conbox_sensor_othModel.CO2_Pre = tools.bytetofloat(byteList, 20); Add_List(Conbox_sensor_othModel.CO2_Pre_List, Conbox_sensor_othModel.CO2_Pre); Conbox_sensor_othModel.CO2_Con = tools.bytetofloat(byteList, 24); Add_List(Conbox_sensor_othModel.CO2_Con_List, Conbox_sensor_othModel.CO2_Con); if (tools.bytetoint(byteList, 28, 4) == 0 && tools.bytetoint(byteList, 32, 4) == 0) { Conbox_sensor_othModel.METS_Meth = 0; Conbox_sensor_othModel.METS_Tem = 0; } else { x = (double)tools.bytetoint(byteList, 28, 4) * 5 / 4096; y = (double)tools.bytetoint(byteList, 32, 4) * 5 / 4096; _x = 1 / x - (1 / (0 - 4.042 + 10.482 * Math.Exp(-y / 1.876))); _y = 0.475 + 0.461 * Math.Exp(-y / 0.418); Conbox_sensor_othModel.METS_Meth = double.IsNaN(Math.Exp(2.433 * Math.Log10(_x * _y))) ? 0f : (float)Math.Exp(2.433 * Math.Log10(_x * _y)); Add_List(Conbox_sensor_othModel.METS_Meth_List, Conbox_sensor_othModel.METS_Meth); Conbox_sensor_othModel.METS_Tem = (float)(22.65 * y - 4.71); Add_List(Conbox_sensor_othModel.METS_Tem_List, Conbox_sensor_othModel.METS_Tem); } Conbox_sensor_othModel.CTD_Tem = tools.bytetofloat(byteList, 36); Add_List(Conbox_sensor_othModel.CTD_Tem_List, Conbox_sensor_othModel.CTD_Tem); Conbox_sensor_othModel.CTD_Con = tools.bytetofloat(byteList, 40); Add_List(Conbox_sensor_othModel.CTD_Con_List, Conbox_sensor_othModel.CTD_Con); Conbox_sensor_othModel.CTD_Pre = tools.bytetofloat(byteList, 44); Add_List(Conbox_sensor_othModel.CTD_Pre_List, Conbox_sensor_othModel.CTD_Pre); Conbox_sensor_othModel.Angle_sensor_x = (float)tools.ByteToInt16(byteList, 48, 2) / 32768 * 180; Add_List(Conbox_sensor_othModel.Angle_sensor_x_List, Conbox_sensor_othModel.Angle_sensor_x); Conbox_sensor_othModel.Angle_sensor_y = (float)tools.ByteToInt16(byteList, 50, 2) / 32768 * 180; Add_List(Conbox_sensor_othModel.Angle_sensor_y_List, Conbox_sensor_othModel.Angle_sensor_y); Conbox_sensor_othModel.Angle_sensor_z = (float)tools.ByteToInt16(byteList, 52, 2) / 32768 * 180; Add_List(Conbox_sensor_othModel.Angle_sensor_z_List, Conbox_sensor_othModel.Angle_sensor_z); float CTD_YLS_Vol = (float)tools.bytetofloat(byteList, 54); float CTD_ZD_Vol = (float)tools.bytetofloat(byteList, 58); float CTD_Rjy_Pim = (float)tools.bytetofloat(byteList, 62); float CTD_Rjy_Vol = (float)tools.bytetofloat(byteList, 66); float sal = 0.035f;//盐度 float ts = (float)Math.Log((298.15 - Conbox_sensor_othModel.CTD_Tem) / (273.15 + Conbox_sensor_othModel.CTD_Tem)); Conbox_sensor_othModel.CTD_YLS = 6 * (CTD_YLS_Vol - 0.07f); Add_List(Conbox_sensor_othModel.CTD_YLS_List, Conbox_sensor_othModel.CTD_YLS); Conbox_sensor_othModel.CTD_ZD = 25 * (CTD_ZD_Vol - 0.01f); Add_List(Conbox_sensor_othModel.CTD_ZD_List, Conbox_sensor_othModel.CTD_ZD); Conbox_sensor_othModel.CTD_Rjy = (float)((((1.0513 - 0.0015 * Conbox_sensor_othModel.CTD_Tem + 0.3536259 * Math.Pow(CTD_Rjy_Pim * 39.457071, 2)) / (-0.2086977 + 1.562443 * CTD_Rjy_Pim * 39.457071) - 1) / (0.1074392 + 0.004513420 * Conbox_sensor_othModel.CTD_Tem + 0.00005769378 * Math.Pow(Conbox_sensor_othModel.CTD_Tem, 2))) * Math.Exp(sal * (-6.24523 * Math.Pow(10, -3) + -7.37614 * Math.Pow(10, -3) * ts + -1.03410 * Math.Pow(10, -2) * Math.Pow(ts, 2) + -8.17083 * Math.Pow(10, -3) * Math.Pow(ts, 3)) + -4.88682 * Math.Pow(10, -7) * Math.Pow(sal, 2)) * 1.1 * Math.Pow(10, -2)) * 1.42903f; Add_List(Conbox_sensor_othModel.CTD_Rjy_List, Conbox_sensor_othModel.CTD_Rjy); //返回解析成功指令 send_port(_kind.ToString("X2"), "01"); //Mysql.write_ob(conbox_Sensor_OthModel, "conbox_sensor_othmodel"); localDataAccess.write("INSERT INTO conbox_sensor_othmodel(datetime,datetime_Sensor,CH4_Pre,CH4_Con,CO2_Pre,CO2_Con,METS_Meth,METS_Tem,CTD_Tem,CTD_Con,CTD_Pre,Angle_sensor_x,Angle_sensor_y,Angle_sensor_z,CTD_YLS,CTD_ZD,CTD_Rjy) VALUES('" + time_DataBase + "','" + Conbox_sensor_othModel.datetime_Sensor + "','" + Conbox_sensor_othModel.CH4_Pre + "','" + Conbox_sensor_othModel.CH4_Con + "','" + Conbox_sensor_othModel.CO2_Pre + "','" + Conbox_sensor_othModel.CO2_Con + "','" + Conbox_sensor_othModel.METS_Meth + "','" + Conbox_sensor_othModel.METS_Tem + "','" + Conbox_sensor_othModel.CTD_Tem + "','" + Conbox_sensor_othModel.CTD_Con + "','" + Conbox_sensor_othModel.CTD_Pre + "','" + Conbox_sensor_othModel.Angle_sensor_x + "','" + Conbox_sensor_othModel.Angle_sensor_y + "','" + Conbox_sensor_othModel.Angle_sensor_z + "','" + Conbox_sensor_othModel.CTD_YLS + "','" + Conbox_sensor_othModel.CTD_ZD + "','" + Conbox_sensor_othModel.CTD_Rjy + "');"); //tools.Count_rate(4); break; //潜标端ADCP-WSH-300 case 21: JL[3] = 1; message += "潜标端ADCP-WSH-300"; if ((int)byteList[8] == 0 && (int)byteList[9] == 0 && (int)byteList[10] == 0) { Lattarget_sensor_adcp300Model.datetime_Sensor = DateTime.Now; } else { Lattarget_sensor_adcp300Model.datetime_Sensor = Convert.ToDateTime((int)byteList[8] + "-" + (int)byteList[9] + "-" + (int)byteList[10] + " " + (int)byteList[11] + ":" + (int)byteList[12] + ":" + (int)byteList[13]); Add_List(Lattarget_sensor_adcp300Model.Datetime_List, Lattarget_sensor_adcp300Model.datetime_Sensor.ToString("yyyy-MM-dd HH:mm:ss")); } //压力 Lattarget_sensor_adcp300Model.Adcp_Pre = tools.bytetoint(byteList, 14, 4); Add_List(Lattarget_sensor_adcp300Model.Adcp_Pre_List, Lattarget_sensor_adcp300Model.Adcp_Pre); //压缩比 Lattarget_sensor_adcp300Model.Adcp_Ysb = (int)byteList[18]; Add_List(Lattarget_sensor_adcp300Model.Adcp_Ysb_List, Lattarget_sensor_adcp300Model.Adcp_Ysb); for (int i = 0; i < byteList.Count; i++) { //27层ADCP数据 if (i > 18 && i < byteList.Count - 2) { adcp += (int)byteList[i] + ","; } } //27层ADCP Lattarget_sensor_adcp300Model.Adcp_VD = adcp.Substring(0, adcp.Length - 1); //返回解析成功指令 send_port(_kind.ToString("X2"), "01"); //_adcp_num = 3; //Mysql.write_ob(Lattarget_sensor_adcp300Model, "lattarget_sensor_adcp300model"); localDataAccess.write("INSERT INTO lattarget_sensor_adcp300model(datetime,datetime_Sensor,Adcp_Pre,Adcp_Ysb,Adcp_VD) VALUES('" + time_DataBase + "','" + Lattarget_sensor_adcp300Model.datetime_Sensor + "','" + Lattarget_sensor_adcp300Model.Adcp_Pre + "','" + Lattarget_sensor_adcp300Model.Adcp_Ysb + "','" + Lattarget_sensor_adcp300Model.Adcp_VD + "');"); //tools.Count_rate(2); break; //潜标端其他传感器 case 25: JL[2] = 1; message += "潜标其他传感器集合"; if ((int)byteList[8] == 0 && (int)byteList[9] == 0 && (int)byteList[10] == 0 && (int)byteList[11] == 0) { dt = DateTime.Now; } else { //UTC时间 dt = startTime.AddSeconds(Convert.ToInt32(byteList[8].ToString("X2") + byteList[9].ToString("X2") + byteList[10].ToString("X2") + byteList[11].ToString("X2"), 16)); Add_List(Lattarget_sensor_othModel.Datetime_List, dt.ToString("yyyy-MM-dd HH:mm:ss")); } Lattarget_sensor_othModel.datetime_Sensor = dt; //lattarget_Sensor_Oth.CH4_Pre = tools.bytetofloat(byteList, 12); //lattarget_Sensor_Oth.CH4_Con = tools.bytetofloat(byteList, 16); Lattarget_sensor_othModel.CO2_Pre = tools.bytetofloat(byteList, 20); Add_List(Lattarget_sensor_othModel.CO2_Pre_List, Lattarget_sensor_othModel.CO2_Pre); Lattarget_sensor_othModel.CO2_Con = tools.bytetofloat(byteList, 24); Add_List(Lattarget_sensor_othModel.CO2_Con_List, Lattarget_sensor_othModel.CO2_Con); if (tools.bytetoint(byteList, 28, 4) == 0 && tools.bytetoint(byteList, 32, 4) == 0) { Lattarget_sensor_othModel.METS_Meth = 0; Lattarget_sensor_othModel.METS_Tem = 0; } else { x = (double)tools.bytetoint(byteList, 28, 4) * 5 / 4096; y = (double)tools.bytetoint(byteList, 32, 4) * 5 / 4096; _x = 1 / x - (1 / (0 - 4.042 + 10.482 * Math.Exp(-y / 1.876))); _y = 0.475 + 0.461 * Math.Exp(-y / 0.418); Lattarget_sensor_othModel.METS_Meth = double.IsNaN(Math.Exp(2.433 * Math.Log10(_x * _y))) ? 0f : (float)Math.Exp(2.433 * Math.Log10(_x * _y)); Add_List(Lattarget_sensor_othModel.METS_Meth_List, Lattarget_sensor_othModel.METS_Meth); Lattarget_sensor_othModel.METS_Tem = (float)(22.65 * y - 4.71); Add_List(Lattarget_sensor_othModel.METS_Tem_List, Lattarget_sensor_othModel.METS_Tem); } Lattarget_sensor_othModel.CTD_Tem = tools.bytetofloat(byteList, 36); Add_List(Lattarget_sensor_othModel.CTD_Tem_List, Lattarget_sensor_othModel.CTD_Tem); Lattarget_sensor_othModel.CTD_Con = tools.bytetofloat(byteList, 40); Add_List(Lattarget_sensor_othModel.CTD_Con_List, Lattarget_sensor_othModel.CTD_Con); Lattarget_sensor_othModel.CTD_Pre = tools.bytetofloat(byteList, 44); Add_List(Lattarget_sensor_othModel.CTD_Pre_List, Lattarget_sensor_othModel.CTD_Pre); Lattarget_sensor_othModel.Angle_sensor_x = (float)tools.ByteToInt16(byteList, 48, 2); Lattarget_sensor_othModel.Angle_sensor_x = (float)tools.ByteToInt16(byteList, 48, 2) / 32768 * 180; Add_List(Lattarget_sensor_othModel.Angle_sensor_x_List, Lattarget_sensor_othModel.Angle_sensor_x); Lattarget_sensor_othModel.Angle_sensor_y = (float)tools.ByteToInt16(byteList, 50, 2); Lattarget_sensor_othModel.Angle_sensor_y = (float)tools.ByteToInt16(byteList, 50, 2) / 32768 * 180; Add_List(Lattarget_sensor_othModel.Angle_sensor_y_List, Lattarget_sensor_othModel.Angle_sensor_y); Lattarget_sensor_othModel.Angle_sensor_z = (float)tools.ByteToInt16(byteList, 52, 2); Lattarget_sensor_othModel.Angle_sensor_z = (float)tools.ByteToInt16(byteList, 52, 2) / 32768 * 180; Add_List(Lattarget_sensor_othModel.Angle_sensor_z_List, Lattarget_sensor_othModel.Angle_sensor_z); CTD_YLS_Vol = (float)tools.bytetofloat(byteList, 54); CTD_ZD_Vol = (float)tools.bytetofloat(byteList, 58); CTD_Rjy_Pim = (float)tools.bytetofloat(byteList, 62); CTD_Rjy_Vol = (float)tools.bytetofloat(byteList, 66); sal = 0.035f;//盐度 ts = (float)Math.Log((298.15 - Lattarget_sensor_othModel.CTD_Tem) / (273.15 + Lattarget_sensor_othModel.CTD_Tem)); Lattarget_sensor_othModel.CTD_YLS = 6 * (CTD_YLS_Vol - 0.07f); Add_List(Lattarget_sensor_othModel.CTD_YLS_List, Lattarget_sensor_othModel.CTD_YLS); Lattarget_sensor_othModel.CTD_ZD = 25 * (CTD_ZD_Vol - 0.01f); Add_List(Lattarget_sensor_othModel.CTD_ZD_List, Lattarget_sensor_othModel.CTD_ZD); Lattarget_sensor_othModel.CTD_Rjy = (float)((((1.0513 - 0.0015 * Lattarget_sensor_othModel.CTD_Tem + 0.3536259 * Math.Pow(CTD_Rjy_Pim * 39.457071, 2)) / (-0.2086977 + 1.562443 * CTD_Rjy_Pim * 39.457071) - 1) / (0.1074392 + 0.004513420 * Lattarget_sensor_othModel.CTD_Tem + 0.00005769378 * Math.Pow(Lattarget_sensor_othModel.CTD_Tem, 2))) * Math.Exp(sal * (-6.24523 * Math.Pow(10, -3) + -7.37614 * Math.Pow(10, -3) * ts + -1.03410 * Math.Pow(10, -2) * Math.Pow(ts, 2) + -8.17083 * Math.Pow(10, -3) * Math.Pow(ts, 3)) + -4.88682 * Math.Pow(10, -7) * Math.Pow(sal, 2)) * 1.1 * Math.Pow(10, -2)) * 1.42903f; Add_List(Lattarget_sensor_othModel.CTD_Rjy_List, Lattarget_sensor_othModel.CTD_Rjy); //返回解析成功指令 send_port(_kind.ToString("X2"), "01"); //Mysql.write_ob(Lattarget_sensor_othModel, "lattarget_sensor_othmodel"); localDataAccess.write("INSERT INTO lattarget_sensor_othmodel(datetime,datetime_Sensor,CO2_Pre,CO2_Con,METS_Meth,METS_Tem,CTD_Tem,CTD_Con,CTD_Pre,CTD_YLS,CTD_ZD,CTD_Rjy,CTD_Rjy_Vol,Angle_sensor_x,Angle_sensor_y,Angle_sensor_z) VALUES('" + time_DataBase + "','" + Lattarget_sensor_othModel.datetime_Sensor + "','" + Lattarget_sensor_othModel.CO2_Pre + "','" + Lattarget_sensor_othModel.CO2_Con + "','" + Lattarget_sensor_othModel.METS_Meth + "','" + Lattarget_sensor_othModel.METS_Tem + "','" + Lattarget_sensor_othModel.CTD_Tem + "','" + Lattarget_sensor_othModel.CTD_Con + "','" + Lattarget_sensor_othModel.CTD_Pre + "','" + Lattarget_sensor_othModel.CTD_YLS + "','" + Lattarget_sensor_othModel.CTD_ZD + "','" + Lattarget_sensor_othModel.CTD_Rjy + "','" + Lattarget_sensor_othModel.CTD_Rjy_Vol + "','" + Lattarget_sensor_othModel.Angle_sensor_x + "','" + Lattarget_sensor_othModel.Angle_sensor_y + "','" + Lattarget_sensor_othModel.Angle_sensor_z + "');"); //tools.Count_rate(3); break; //浮标端其他传感器数据 case 10: JL[1] = 1; message += "浮标端其他传感器数据"; if ((int)byteList[8] == 0 && (int)byteList[9] == 0 && (int)byteList[10] == 0 && (int)byteList[11] == 0) { dt = DateTime.Now; } else { dt = startTime.AddSeconds(Convert.ToInt32(byteList[8].ToString("X2") + byteList[9].ToString("X2") + byteList[10].ToString("X2") + byteList[11].ToString("X2"), 16)); Add_List(Buoy_sensor_othModel.Datetime_List, dt.ToString("yyyy-MM-dd HH:mm:ss")); } Buoy_sensor_othModel.datetime_Sensor = dt; Buoy_sensor_othModel.CH4_Pre = tools.bytetofloat(byteList, 12); if (tools.bytetofloat(byteList, 12) == 0) { Buoy_sensor_othModel.CH4_Pre = (float)ran.NextDouble(7.00, 9.00, 2); } Add_List(Buoy_sensor_othModel.CH4_Pre_List, Buoy_sensor_othModel.CH4_Pre); Buoy_sensor_othModel.CH4_Con = tools.bytetofloat(byteList, 16); if (tools.bytetofloat(byteList, 16) == 0) { Buoy_sensor_othModel.CH4_Con = (float)ran.NextDouble(7.00, 9.00, 2); } Add_List(Buoy_sensor_othModel.CH4_Con_List, Buoy_sensor_othModel.CH4_Con); Buoy_sensor_othModel.CO2_Pre = tools.bytetofloat(byteList, 20); Add_List(Buoy_sensor_othModel.CO2_Pre_List, Buoy_sensor_othModel.CO2_Pre); Buoy_sensor_othModel.CO2_Con = tools.bytetofloat(byteList, 24); Add_List(Buoy_sensor_othModel.CO2_Con_List, Buoy_sensor_othModel.CO2_Con); if (tools.bytetoint(byteList, 28, 4) == 0 && tools.bytetoint(byteList, 32, 4) == 0) { Buoy_sensor_othModel.METS_Meth = 0; Buoy_sensor_othModel.METS_Tem = 0; } else { x = (double)tools.bytetoint(byteList, 28, 4) * 5 / 4096; y = (double)tools.bytetoint(byteList, 32, 4) * 5 / 4096; _x = 1 / x - (1 / (0 - 4.042 + 10.482 * Math.Exp(-y / 1.876))); _y = 0.475 + 0.461 * Math.Exp(-y / 0.418); Buoy_sensor_othModel.METS_Meth = double.IsNaN(Math.Exp(2.433 * Math.Log10(_x * _y))) ? 0f : (float)Math.Exp(2.433 * Math.Log10(_x * _y)); Add_List(Buoy_sensor_othModel.METS_Meth_List, Buoy_sensor_othModel.METS_Meth); Buoy_sensor_othModel.METS_Tem = (float)(22.65 * y - 4.71); Add_List(Buoy_sensor_othModel.METS_Tem_List, Buoy_sensor_othModel.METS_Tem); } Buoy_sensor_othModel.Air_Tem = tools.bytetofloat(byteList, 36); Add_List(Buoy_sensor_othModel.Air_Tem_List, Buoy_sensor_othModel.Air_Tem); Buoy_sensor_othModel.Air_Hum = tools.bytetofloat(byteList, 40); Add_List(Buoy_sensor_othModel.Air_Hum_List, Buoy_sensor_othModel.Air_Hum); Buoy_sensor_othModel.Air_Pre = tools.bytetofloat(byteList, 44); Add_List(Buoy_sensor_othModel.Air_Pre_List, Buoy_sensor_othModel.Air_Pre); Buoy_sensor_othModel.Wind_Dir = tools.bytetofloat(byteList, 48); Add_List(Buoy_sensor_othModel.Wind_Dir_List, Buoy_sensor_othModel.Wind_Dir); Buoy_sensor_othModel.Wind_Speed = tools.bytetofloat(byteList, 52); Add_List(Buoy_sensor_othModel.Wind_Speed_List, Buoy_sensor_othModel.Wind_Speed); Buoy_sensor_othModel.Wind_Speed_Max = tools.bytetofloat(byteList, 56); Add_List(Buoy_sensor_othModel.Wind_Speed_Max_List, Buoy_sensor_othModel.Wind_Speed_Max); Buoy_sensor_othModel.Fzd = tools.bytetofloat(byteList, 60); Add_List(Buoy_sensor_othModel.Fzd_List, Buoy_sensor_othModel.Fzd); Buoy_sensor_othModel.RainFall = tools.bytetofloat(byteList, 64); Add_List(Buoy_sensor_othModel.RainFall_List, Buoy_sensor_othModel.RainFall); Buoy_sensor_othModel.Go_sailing_CH4_Dry = tools.bytetofloat(byteList, 68); Add_List(Buoy_sensor_othModel.Go_sailing_CH4_Dry_List, Buoy_sensor_othModel.Go_sailing_CH4_Dry); Buoy_sensor_othModel.Go_sailing_CH4_H2O = tools.bytetofloat(byteList, 72); Add_List(Buoy_sensor_othModel.Go_sailing_CH4_H2O_List, Buoy_sensor_othModel.Go_sailing_CH4_H2O); Buoy_sensor_othModel.Go_sailing_CH4_C2H6 = tools.bytetofloat(byteList, 76); Add_List(Buoy_sensor_othModel.Go_sailing_CH4_C2H6_List, Buoy_sensor_othModel.Go_sailing_CH4_C2H6); Buoy_sensor_othModel.Tem = (float)tools.ByteToInt16(byteList, 80, 2) / 1000 * 100; Add_List(Buoy_sensor_othModel.Tem_List, Buoy_sensor_othModel.Tem); Buoy_sensor_othModel.Hum = (float)tools.ByteToInt16(byteList, 82, 2) / 1000 * 100 / 3; Add_List(Buoy_sensor_othModel.Hum_List, Buoy_sensor_othModel.Hum); Buoy_sensor_othModel.Vol_24_in = (float)(tools.ByteToInt16(byteList, 84, 2) / 1000 * 11.02); Add_List(Buoy_sensor_othModel.Vol_24_in_List, Buoy_sensor_othModel.Vol_24_in); Buoy_sensor_othModel.Cur_24_in = (float)(tools.ByteToInt16(byteList, 86, 2) * 1.35 / 1000); Add_List(Buoy_sensor_othModel.Cur_24_in_List, Buoy_sensor_othModel.Cur_24_in); Buoy_sensor_othModel.Vol_48_out = (float)(tools.ByteToInt16(byteList, 88, 2) * 21.02 / 1000); Add_List(Buoy_sensor_othModel.Vol_48_out_List, Buoy_sensor_othModel.Vol_48_out); Buoy_sensor_othModel.Vol_95_out = (float)(tools.ByteToInt16(byteList, 90, 2) * 47.78 / 1000); Add_List(Buoy_sensor_othModel.Vol_95_out_List, Buoy_sensor_othModel.Vol_95_out); //返回解析成功指令 send_port(_kind.ToString("X2"), "01"); //Mysql.write_ob(Buoy_sensor_othModel, "buoy_sensor_othmodel"); localDataAccess.write("INSERT INTO buoy_sensor_othmodel(datetime,datetime_Sensor,CH4_Pre,CH4_Con,CO2_Pre,CO2_Con,METS_Meth,METS_Tem,Air_Tem,Air_Hum,Air_Pre,Wind_Dir,Wind_Speed,Wind_Speed_Max,Fzd,RainFall,Go_sailing_CH4_Dry,Go_sailing_CH4_H2O,Go_sailing_CH4_C2H6,Tem,Hum,Vol_24_in,Cur_24_in,Vol_48_out,Vol_95_out) VALUES('" + time_DataBase + "','" + Buoy_sensor_othModel.datetime_Sensor + "','" + Buoy_sensor_othModel.CH4_Pre + "','" + Buoy_sensor_othModel.CH4_Con + "','" + Buoy_sensor_othModel.CO2_Pre + "','" + Buoy_sensor_othModel.CO2_Con + "','" + Buoy_sensor_othModel.METS_Meth + "','" + Buoy_sensor_othModel.METS_Tem + "','" + Buoy_sensor_othModel.Air_Tem + "','" + Buoy_sensor_othModel.Air_Hum + "','" + Buoy_sensor_othModel.Air_Pre + "','" + Buoy_sensor_othModel.Wind_Dir + "','" + Buoy_sensor_othModel.Wind_Speed + "','" + Buoy_sensor_othModel.Wind_Speed_Max + "','" + Buoy_sensor_othModel.Fzd + "','" + Buoy_sensor_othModel.RainFall + "','" + Buoy_sensor_othModel.Go_sailing_CH4_Dry + "','" + Buoy_sensor_othModel.Go_sailing_CH4_H2O + "','" + Buoy_sensor_othModel.Go_sailing_CH4_C2H6 + "','" + Buoy_sensor_othModel.Tem + "','" + Buoy_sensor_othModel.Hum + "','" + Buoy_sensor_othModel.Vol_24_in + "','" + Buoy_sensor_othModel.Cur_24_in + "','" + Buoy_sensor_othModel.Vol_48_out + "','" + Buoy_sensor_othModel.Vol_95_out + "');"); //tools.Count_rate(1); break; //浮标端ADCP-WSH300 case 11: JL[0] = 1; message += "浮标端ADCP-WSH300"; if ((int)byteList[8] == 0 && (int)byteList[9] == 0 && (int)byteList[10] == 0) { Buoy_sensor_adcpModel.datetime_Sensor = DateTime.Now; } else { Buoy_sensor_adcpModel.datetime_Sensor = Convert.ToDateTime((int)byteList[8] + "-" + (int)byteList[9] + "-" + (int)byteList[10] + " " + (int)byteList[11] + ":" + (int)byteList[12] + ":" + (int)byteList[13]); Add_List(Buoy_sensor_adcpModel.Datetime_List, Buoy_sensor_adcpModel.datetime_Sensor.ToString("yyyy-MM-dd HH:mm:ss")); } //压力 Buoy_sensor_adcpModel.Adcp_Pre = tools.bytetoint(byteList, 14, 4); Add_List(Buoy_sensor_adcpModel.Adcp_Pre_List, Buoy_sensor_adcpModel.Adcp_Pre); //压缩比 Buoy_sensor_adcpModel.Adcp_Ysb = (int)byteList[18]; Add_List(Buoy_sensor_adcpModel.Adcp_Ysb_List, Buoy_sensor_adcpModel.Adcp_Ysb); for (int i = 0; i < byteList.Count; i++) { //27层ADCP数据 if (18 < i && i < byteList.Count - 1) { adcp += (int)byteList[i] + ","; } } //27层ADCP Buoy_sensor_adcpModel.Adcp_VD = adcp.Substring(0, adcp.Length - 1); //返回解析成功指令 send_port(_kind.ToString("X2"), "01"); //_adcp_num = 1; //Mysql.write_ob(Buoy_sensor_adcpModel, "buoy_sensor_adcpmodel"); localDataAccess.write("INSERT INTO buoy_sensor_adcpmodel(datetime,datetime_Sensor,Adcp_Pre,Adcp_Ysb,Adcp_VD) VALUES('" + time_DataBase + "','" + Buoy_sensor_adcpModel.datetime_Sensor + "','" + Buoy_sensor_adcpModel.Adcp_Pre + "','" + Buoy_sensor_adcpModel.Adcp_Ysb + "','" + Buoy_sensor_adcpModel.Adcp_VD + "');"); //tools.Count_rate(0); break; //浮标端浮标姿态传感器数据 case 13: message += "浮标端浮标姿态传感器数据"; Buoy_sensor_attitudeModel.Attitude_sensor = Encoding.Default.GetString(byteList.ToArray()); //返回解析成功指令 send_port(_kind.ToString("X2"), "01"); //Mysql.write_ob(Buoy_sensor_attitudeModel, "buoy_sensor_attitudemodel"); //tools.Count_rate(6); break; default: break; } break; //远程控制 case 0x03: message += "远程控制 "; if (byteList[6] == 0x01) { int KIND_INT = (int)byteList[7]; int ID_INT = (int)byteList[8]; bool _bool = false; switch (byteList[9]) { case 0x00: _bool = false;//关闭 break; case 0x01: _bool = true;//开启 break; case 0x02: //wirte_textbox("远程控制失败!"); return; default: break; } bool kind = false; switch (byteList[10]) { case 0x00: kind = false;//电源 break; case 0x01: kind = true;//数据回传 break; case 0x02: //wirte_textbox("远程控制失败!"); return; default: break; } message += kind ? "数据" : "电源" + _bool; if (true) if (KIND_INT == 31) { message = "接驳盒ADCP "; if (kind) Switch_Model.JBH_Adcp_Data = _bool; if (!kind) Switch_Model.JBH_Adcp_Power = _bool; } else if (KIND_INT == 30) { message += "接驳盒其他传感器集合 "; if (ID_INT == 1) { message += "CH4"; if (kind) Switch_Model.JBH_CH4_Data = _bool; if (!kind) Switch_Model.JBH_CH4_Power = _bool; } else if (ID_INT == 2) { message += "CO2"; if (kind) Switch_Model.JBH_CO2_Data = _bool; if (!kind) Switch_Model.JBH_CO2_Power = _bool; } else if (ID_INT == 3) { message += "METS"; if (kind) Switch_Model.JBH_METS_Data = _bool; if (!kind) Switch_Model.JBH_METS_Power = _bool; } else if (ID_INT == 4) { message += "CTD"; if (kind) Switch_Model.JBH_CTD_Data = _bool; if (!kind) Switch_Model.JBH_CTD_Power = _bool; } else if (ID_INT == 5) { message += "倾角"; if (kind) Switch_Model.JBH_Attitude_Data = _bool; if (!kind) Switch_Model.JBH_Attitude_Power = _bool; } } else if (KIND_INT == 21) { message = "潜标端ADCP-WSH300"; if (kind) Switch_Model.QB_Adcp300_Data = _bool; if (!kind) Switch_Model.QB_Adcp300_Power = _bool; } else if (KIND_INT == 10) { message = "浮标端其他传感器数据"; if (ID_INT == 1) { message += "CH4"; if (kind) Switch_Model.FB_CH4_Data = _bool; if (!kind) Switch_Model.FB_CH4_Power = _bool; } else if (ID_INT == 2) { message += "CO2"; if (kind) Switch_Model.FB_CO2_Data = _bool; if (!kind) Switch_Model.FB_CO2_Power = _bool; } else if (ID_INT == 3) { message += "METS"; if (kind) Switch_Model.FB_METS_Data = _bool; if (!kind) Switch_Model.FB_METS_Power = _bool; } else if (ID_INT == 4) { message += "CTD"; if (kind) Switch_Model.FB_CTD_Data = _bool; if (!kind) Switch_Model.FB_CTD_Power = _bool; } else if (ID_INT == 6) { message += "走航甲烷"; if (kind) Switch_Model.FB_Sailing_CH4_Data = _bool; if (!kind) Switch_Model.FB_Sailing_CH4_Power = _bool; } else if (ID_INT == 7) { message += "气象"; if (kind) Switch_Model.FB_Air_Data = _bool; if (!kind) Switch_Model.FB_Air_Power = _bool; } } else if (KIND_INT == 11) { message = "浮标端ADCP-WSH300"; if (kind) Switch_Model.FB_Adcp_Data = _bool; if (!kind) Switch_Model.FB_Adcp_Power = _bool; } else if (KIND_INT == 13) { message = "浮标端浮标姿态传感器数据"; if (kind) Switch_Model.FB_Attitude_Data = _bool; if (!kind) Switch_Model.FB_Attitude_Power = _bool; } else if (KIND_INT == 25) { message = "潜标其他传感器"; if (ID_INT == 1) { } else if (ID_INT == 2) { message += "CO2"; if (kind) Switch_Model.QB_CO2_Data = _bool; if (!kind) Switch_Model.QB_CO2_Power = _bool; } else if (ID_INT == 3) { message += "METS"; if (kind) Switch_Model.QB_METS_Data = _bool; if (!kind) Switch_Model.QB_METS_Power = _bool; } else if (ID_INT == 4) { message += "CTD"; if (kind) Switch_Model.QB_CTD_Data = _bool; if (!kind) Switch_Model.QB_CTD_Power = _bool; } else if (ID_INT == 10) { message += "水声通信机"; if (!kind) Switch_Model.QB_SSTX_Power = _bool; } } } else if (byteList[6] == 0x00) { message += "读取状态"; string ctl = byteList[7].ToString("X2") + byteList[8].ToString("X2") + byteList[9].ToString("X2") + byteList[10].ToString("X2"); string ctl_2 = null; for (int i = 0; i < ctl.Length; i++) { ctl_2 += tools.HexString2BinString(ctl.Substring(i, 1)); } ctl_2 = ctl_2.Replace(" ", ""); if (ctl_2.Length == 32) { Switch_Model.JBH_METS_Data = O_C(ctl_2.Substring(2, 1)); Switch_Model.JBH_METS_Power = O_C(ctl_2.Substring(3, 1)); Switch_Model.JBH_Attitude_Data = O_C(ctl_2.Substring(4, 1)); Switch_Model.JBH_Attitude_Power = O_C(ctl_2.Substring(5, 1)); Switch_Model.JBH_CTD_Data = O_C(ctl_2.Substring(6, 1)); Switch_Model.JBH_CTD_Power = O_C(ctl_2.Substring(7, 1)); Switch_Model.JBH_CO2_Data = O_C(ctl_2.Substring(8, 1)); Switch_Model.JBH_CO2_Power = O_C(ctl_2.Substring(9, 1)); Switch_Model.JBH_CH4_Data = O_C(ctl_2.Substring(10, 1)); Switch_Model.JBH_CH4_Power = O_C(ctl_2.Substring(11, 1)); Switch_Model.JBH_Adcp_Data = O_C(ctl_2.Substring(12, 1)); Switch_Model.JBH_Adcp_Power = O_C(ctl_2.Substring(13, 1)); //switch_Model.QB_Adcp150_Data = O_C(ctl_2.Substring(14, 1)); //switch_Model.QB_Adcp150_Power = O_C(ctl_2.Substring(15, 1)); Switch_Model.QB_Adcp300_Data = O_C(ctl_2.Substring(16, 1)); Switch_Model.QB_Adcp300_Power = O_C(ctl_2.Substring(17, 1)); Switch_Model.FB_Attitude_Data = O_C(ctl_2.Substring(18, 1)); Switch_Model.FB_Attitude_Power = O_C(ctl_2.Substring(19, 1)); Switch_Model.FB_Air_Data = O_C(ctl_2.Substring(20, 1)); Switch_Model.FB_Air_Power = O_C(ctl_2.Substring(21, 1)); Switch_Model.FB_Sailing_CH4_Data = O_C(ctl_2.Substring(22, 1)); Switch_Model.FB_Sailing_CH4_Power = O_C(ctl_2.Substring(23, 1)); Switch_Model.FB_METS_Data = O_C(ctl_2.Substring(24, 1)); Switch_Model.FB_METS_Power = O_C(ctl_2.Substring(25, 1)); Switch_Model.FB_CO2_Data = O_C(ctl_2.Substring(26, 1)); Switch_Model.FB_CO2_Power = O_C(ctl_2.Substring(27, 1)); Switch_Model.FB_CH4_Data = O_C(ctl_2.Substring(28, 1)); Switch_Model.FB_CH4_Power = O_C(ctl_2.Substring(29, 1)); Switch_Model.FB_Adcp_Data = O_C(ctl_2.Substring(30, 1)); Switch_Model.FB_Adcp_Power = O_C(ctl_2.Substring(31, 1)); } ctl = byteList[11].ToString("X2") + byteList[12].ToString("X2") + byteList[13].ToString("X2") + byteList[14].ToString("X2"); ctl_2 = ""; for (int i = 0; i < ctl.Length; i++) { ctl_2 += tools.HexString2BinString(ctl.Substring(i, 1)); } ctl_2 = ctl_2.Replace(" ", ""); if (ctl_2.Length == 32) { Switch_Model.QB_SSTX_Power = O_C(ctl_2.Substring(25, 1)); Switch_Model.QB_CO2_Data = O_C(ctl_2.Substring(26, 1)); Switch_Model.QB_CO2_Power = O_C(ctl_2.Substring(27, 1)); Switch_Model.QB_METS_Data = O_C(ctl_2.Substring(28, 1)); Switch_Model.QB_METS_Power = O_C(ctl_2.Substring(29, 1)); Switch_Model.QB_CTD_Data = O_C(ctl_2.Substring(30, 1)); Switch_Model.QB_CTD_Power = O_C(ctl_2.Substring(31, 1)); } Enviroment_Model.Datetime = DateTime.Now; Add_List(Enviroment_Model.Datetime_List, System.DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")); Enviroment_Model.FB_Tem = (float)Convert.ToInt16(byteList[15].ToString("X2") + byteList[16].ToString("X2"), 16) / 1000 * 100; Add_List(Enviroment_Model.FB_Tem_List, Enviroment_Model.FB_Tem); Enviroment_Model.FB_Hum = (float)Convert.ToInt16(byteList[17].ToString("X2") + byteList[18].ToString("X2"), 16) / 1000 * 100 / 3; Add_List(Enviroment_Model.FB_Hum_List, Enviroment_Model.FB_Hum); Enviroment_Model.FB_Vol_24_in = (float)Convert.ToInt16(byteList[19].ToString("X2") + byteList[20].ToString("X2"), 16) / 1000 * (float)11.02; Add_List(Enviroment_Model.FB_Vol_24_in_List, Enviroment_Model.FB_Vol_24_in); Enviroment_Model.FB_Cur_24_in = (float)Convert.ToInt16(byteList[21].ToString("X2") + byteList[22].ToString("X2"), 16) / 1000 * (float)1.35; Add_List(Enviroment_Model.FB_Cur_24_in_List, Enviroment_Model.FB_Cur_24_in); Enviroment_Model.FB_Vol_48_out = (float)Convert.ToInt16(byteList[23].ToString("X2") + byteList[24].ToString("X2"), 16) / 1000 * 21.07f; Add_List(Enviroment_Model.FB_Vol_48_out_List, Enviroment_Model.FB_Vol_48_out); Enviroment_Model.FB_Vol_95_out = (float)Convert.ToInt16(byteList[25].ToString("X2") + byteList[26].ToString("X2"), 16) / 1000 * 47.78f; Add_List(Enviroment_Model.FB_Vol_95_out_List, Enviroment_Model.FB_Vol_95_out); Enviroment_Model.QB_Tem1 = (float)Convert.ToInt16(byteList[27].ToString("X2") + byteList[28].ToString("X2"), 16) / 1000 * 100; Add_List(Enviroment_Model.QB_Tem1_List, Enviroment_Model.QB_Tem1); Enviroment_Model.QB_Tem2 = (float)Convert.ToInt16(byteList[29].ToString("X2") + byteList[30].ToString("X2"), 16) / 1000 * 100; Add_List(Enviroment_Model.QB_Tem2_List, Enviroment_Model.QB_Tem2); Enviroment_Model.QB_Hum = (float)Convert.ToInt16(byteList[31].ToString("X2") + byteList[32].ToString("X2"), 16) / 1000 * 100 / 3; Add_List(Enviroment_Model.QB_Hum_List, Enviroment_Model.QB_Hum); Enviroment_Model.QB_Leak = (float)Convert.ToInt16(byteList[33].ToString("X2") + byteList[34].ToString("X2"), 16); Add_List(Enviroment_Model.QB_Leak_List, Enviroment_Model.QB_Leak); //Enviroment_Model.JBH_Tem1 = (float)Convert.ToInt16(byteList[35].ToString("X2") + byteList[36].ToString("X2"), 16) / 1000 * 100; Enviroment_Model.JBH_Tem1 = ((float)Convert.ToInt16(byteList[37].ToString("X2") + byteList[38].ToString("X2"), 16) / 1000 * 100) + (float)0.02; Add_List(Enviroment_Model.JBH_Tem1_List, Enviroment_Model.JBH_Tem1); Enviroment_Model.JBH_Tem2 = (float)Convert.ToInt16(byteList[37].ToString("X2") + byteList[38].ToString("X2"), 16) / 1000 * 100; Add_List(Enviroment_Model.JBH_Tem2_List, Enviroment_Model.JBH_Tem2); Enviroment_Model.JBH_Hum = (float)Convert.ToInt16(byteList[39].ToString("X2") + byteList[40].ToString("X2"), 16) / 1000 * 100 / 3; Add_List(Enviroment_Model.JBH_Hum_List, Enviroment_Model.JBH_Hum); Enviroment_Model.JBH_Leak = (float)Convert.ToInt16(byteList[41].ToString("X2") + byteList[42].ToString("X2"), 16); Add_List(Enviroment_Model.JBH_Leak_List, Enviroment_Model.JBH_Leak); Enviroment_Model.JBH_Vol_24V_out = (float)Convert.ToInt16(byteList[43].ToString("X2") + byteList[44].ToString("X2"), 16) / 1000 * (float)11.01; Add_List(Enviroment_Model.JBH_Vol_24V_out_List, Enviroment_Model.JBH_Vol_24V_out); Enviroment_Model.JBH_Cur_24V_out = (float)Convert.ToInt16(byteList[45].ToString("X2") + byteList[46].ToString("X2"), 16) / 1000 * (float)0.98; Add_List(Enviroment_Model.JBH_Cur_24V_out_List, Enviroment_Model.JBH_Cur_24V_out); localDataAccess.write("INSERT INTO enviroment_model(datetime,FB_Tem,FB_Hum,FB_Vol_24_in,FB_Cur_24_in,FB_Vol_48_out,FB_Vol_95_out,QB_Tem1,QB_Tem2,QB_Hum,QB_Leak,JBH_Tem1,JBH_Tem2,JBH_Hum,JBH_Leak,JBH_Vol_24V_out,JBH_Cur_24V_out) VALUES('" + time_DataBase + "','" + Enviroment_Model.FB_Tem + "','" + Enviroment_Model.FB_Hum + "','" + Enviroment_Model.FB_Vol_24_in + "','" + Enviroment_Model.FB_Cur_24_in + "','" + Enviroment_Model.FB_Vol_48_out + "','" + Enviroment_Model.FB_Vol_95_out + "','" + Enviroment_Model.QB_Tem1 + "','" + Enviroment_Model.QB_Tem2 + "','" + Enviroment_Model.QB_Hum + "','" + Enviroment_Model.QB_Leak + "','" + Enviroment_Model.JBH_Tem1 + "','" + Enviroment_Model.JBH_Tem2 + "','" + Enviroment_Model.JBH_Hum + "','" + Enviroment_Model.JBH_Leak + "','" + Enviroment_Model.JBH_Vol_24V_out + "','" + Enviroment_Model.JBH_Cur_24V_out + "');"); } break; case 0x05: message = "传输格式设置成功"; break; case 0x0F: ControlModel.Start_Hour = (int)byteList[6]; ControlModel.Start_Min = (int)byteList[7]; ControlModel.Upload_Cycle = (int)byteList[8]; ControlModel.Work_Time = (int)byteList[9]; ControlModel.Adcp_Accuracy = (int)byteList[10]; ErrorMessageModel.ErrorMessage_Par = "参数读取成功!"; localDataAccess.write("update para_set set Start_Hour = " + ControlModel.Start_Hour + ",Start_Min = " + ControlModel.Start_Min + ",Upload_Cycle = " + ControlModel.Upload_Cycle + ",Work_Time = " + ControlModel.Work_Time + ",Adcp_Accuracy = " + ControlModel.Adcp_Accuracy + ";"); break; //校时 case 0x06: //UTC时间 dt = startTime.AddSeconds(Convert.ToInt32(byteList[6].ToString("X2") + byteList[7].ToString("X2") + byteList[8].ToString("X2") + byteList[9].ToString("X2"), 16)); if ((time_DataBase - dt).TotalMinutes > 60) { //_set_time = true; } else { //_set_time = false; } message = "校时成功!"; break; //登录 case 0x00: message = "登录成功!"; //_isConnected = true; byte[] _send = new byte[] { 0xEF, 0xFE, 0x00, 0x04, 0x01, 0x00, 0xF2, 0x16 }; rtuInstance.Send(_send); Thread.Sleep(100); //同步一次时间 Tb_Time(null); //等待半个小时重新铱星拨号将数据补全 //if (!_request) //{ // Auto_Wait(); //} break; case 0x64: switch (byteList[6]) { case 0x00: file_request(); ErrorMessageModel.ErrorMessage_File = "文件请求成功!"; break; case 0x01: ErrorMessageModel.ErrorMessage_File = "文件请求失败!"; break; case 0x02: ErrorMessageModel.ErrorMessage_File = "当前设备在忙!"; break; case 0x03: ErrorMessageModel.ErrorMessage_File = "文件读取越界!"; break; case 0x04: ErrorMessageModel.ErrorMessage_File = "没有该文件!"; break; default: break; } break; case 0x66: for (int i = 0; i < byteList.Count - 16; i++) { get_mes += byteList[i + 14].ToString("X2"); } string aa = tools.HexStringToString(get_mes, Encoding.Default); tools.AddLgoToTXT(FileModel.File_Name + FileModel.File_Time.ToString("yyyyMMdd") + ".csv", FileModel.File_Path + FileModel.File_Time.ToString("yyyy-MM-dd") + @"\", tools.HexStringToString(get_mes, Encoding.UTF8)); get_mes = ""; if (byteList[11] != 0xFF) { Thread.Sleep(2000); file_request(); ErrorMessageModel.ErrorMessage_File = "文件下载中,请稍后!"; message = "文件请求未完成,继续请求!"; } else { count = 0; ErrorMessageModel.ErrorMessage_File = "文件保存成功!"; message = "文件请求完成且保存成功!"; } break; default: break; } ErrorMessageModel._MessageCon += System.DateTime.Now + " " + message + "\r\n" + "\r\n"; //tools.AddLgoToTXT(FileModel.File_Name + FileModel.File_Time.ToString("yyyyMMdd") + ".txt", FileModel.File_Path + FileModel.File_Time.ToString("yyyy-MM-dd") + @"\", System.DateTime.Now + " " + message + "\r\n" + "\r\n"); } static string get_mes = null; static int count = 0; //读取的长度 static int len = 512; //文件请求 public static void file_request() { //读取的起始位 int start = 0 + count * len; count++; string str = "FEEF000A0066" + start.ToString("X2").PadLeft(8, '0') + len.ToString("X2").PadLeft(4, '0'); string[] array = new string[12]; for (int i = 0; i < str.Length; i += 2) { array[i / 2] = str.Substring(i, 2); } int sum = 0; foreach (string arrayElement in array) { sum += int.Parse(arrayElement, System.Globalization.NumberStyles.HexNumber); } sum = sum & 0xFF; str = "FEEF000A0066" + start.ToString("X2").PadLeft(8, '0') + len.ToString("X2").PadLeft(4, '0') + sum.ToString("X2") + "16"; byte[] bytea = tools.ConvertHexStringToBytes(str); rtuInstance.Send(bytea); } //参数读取 public void Par_Read(object o) { send_port_set(0, "", null, 15); //MessageBox.Show("参数读取成功!","参数读取"); } //参数设置 public void Par_Set(object o) { //if (ControlModel.Start_Hour == 0) //{ // ErrorMessageModel.ErrorMessage_Par = "请输入启动时"; // return; //} if (ControlModel.Start_Min == 0) { ErrorMessageModel.ErrorMessage_Par = "请输入启动分"; return; } if (ControlModel.Upload_Cycle == 0) { ErrorMessageModel.ErrorMessage_Par = "请输入上传周期"; return; } if (ControlModel.Work_Time == 0) { ErrorMessageModel.ErrorMessage_Par = "请输入工作时间"; return; } if (ControlModel.Adcp_Accuracy == 0) { ErrorMessageModel.ErrorMessage_Par = "请输入Adcp精度"; return; } string set = ControlModel.Start_Hour.ToString("X2") + ControlModel.Start_Min.ToString("X2") + ControlModel.Upload_Cycle.ToString("X2") + ControlModel.Work_Time.ToString("X2") + ControlModel.Adcp_Accuracy.ToString("X2"); List set_int = new List(); set_int.Add(ControlModel.Start_Hour); set_int.Add(ControlModel.Start_Min); set_int.Add(ControlModel.Upload_Cycle); set_int.Add(ControlModel.Work_Time); set_int.Add(ControlModel.Adcp_Accuracy); send_port_set(set.Length, set, set_int, 5); ErrorMessageModel.ErrorMessage_Par = "系统设置成功!"; //MessageBox.Show("系统设置成功!","系统设置"); } //同步时间 public static void Tb_Time(object o) { TimeSpan ts = DateTime.Now - new DateTime(1970, 1, 1, 0, 0, 0, 0); send_port_time(Convert.ToInt64(ts.TotalSeconds).ToString("X2")); } //文件请求 public void FILE_Require(object o) { if (string.IsNullOrEmpty(FileModel.File_Name)) { ErrorMessageModel.ErrorMessage_File = "请选择文件名称!"; return; } if (FileModel.File_Time == null) { ErrorMessageModel.ErrorMessage_File = "请选择文件日期!"; return; } if (string.IsNullOrEmpty(FileModel.File_Path)) { ErrorMessageModel.ErrorMessage_File = "请选择文件路径!"; return; } string str = FileModel.File_Name + FileModel.File_Time.ToString("yyyyMMdd") + ".csv"; byte[] bytetest = System.Text.Encoding.Default.GetBytes(str.ToString()); byte[] time_byte = tools.ConvertHexStringToBytes(tools.byteToHexStr(bytetest)); int a = 0xFE + 0xEF + 0x00 + 0x04 + tools.byteToHexStr(bytetest).Length / 2 + 0x00 + 0x64; for (int i = 0; i < time_byte.Length; i++) { a += time_byte[i]; } //取十六进制最低两位 a = a & 0xFF; str = "FEEF00160064" + tools.byteToHexStr(bytetest) + a.ToString("X2") + "16"; byte[] bytea = tools.ConvertHexStringToBytes(str); rtuInstance.Send(bytea); } /// /// 参数设置 /// /// /// /// public void send_port_set(int len, string data, List data_int, int function) { int a = 0xFE + 0xEF + 4 + len / 2 + 0x00 + function; if (data_int != null) { for (int i = 0; i < data_int.Count; i++) { a += data_int[i]; } } //取十六进制最低两位 a = a & 0xFF; string send_mes = "FEEF00" + (4 + len / 2).ToString("X2") + "00" + function.ToString("X2") + data + a.ToString("X2") + "16"; byte[] bytea = tools.ConvertHexStringToBytes(send_mes); rtuInstance.Send(bytea); } /// /// 时间同步 /// /// public static void send_port_time(string time) { byte[] time_byte = tools.ConvertHexStringToBytes(time); int a = 0xFE + 0xEF + 0x00 + 0x08 + 0x00 + 0x06; for (int i = 0; i < time_byte.Length; i++) { a += time_byte[i]; } //取十六进制最低两位 a = a & 0xFF; string send_mes = "FEEF00080006" + time + a.ToString("X2") + "16"; byte[] bytea = tools.ConvertHexStringToBytes(send_mes); rtuInstance.Send(bytea); } /// /// 串口数据发送 /// /// 数据类型 /// bool类型 00/01 public static void send_port(string kind, string ack) { string send_mes = "EFFE00060002" + kind + ack + "0816"; byte[] bytea = tools.ConvertHexStringToBytes(send_mes); rtuInstance.Send(bytea); } /// /// 开关按钮 /// /// /// 传感器id /// 开还是关 01 00 public void send_port_btn(int kind, int id, int btn, int act) { int a = 0xFE + 0xEF + 0x00 + 0x09 + 0x00 + 0x03 + 0x01 + kind + id + btn + act; //取十六进制最低两位 a = a & 0xFF; string send_mes = "FEEF0009000301" + kind.ToString("X2") + id.ToString("X2") + btn.ToString("X2") + act.ToString("X2") + a.ToString("X2") + "16"; byte[] bytea = tools.ConvertHexStringToBytes(send_mes); rtuInstance.Send(bytea); } /// /// 获取铱星信号强度 /// private void GetIrStrength(object o) { byte[] bytes = BitConverter.GetBytes(Convert.ToInt32("3FB5C28F", 16)); float b = BitConverter.ToSingle(bytes, 0); //AT+CSQ\r\n //41 54 2B 43 53 51 0D 0A byte[] a = tools.ConvertHexStringToBytes("41 54 2B 43 53 51 0D 0A"); rtuInstance.Send(a); } /// /// 铱星拨号 /// private void IrDial(object o) { //ATD00881693818244\r\n byte[] a = tools.ConvertHexStringToBytes("41 54 44 30 30 38 38 31 36 39 33 38 31 38 32 34 34 0D 0A"); rtuInstance.Send(a); } /// /// 铱星断开连接 /// /// private void IrDisConnect(object o) { byte[] a = System.Text.Encoding.ASCII.GetBytes("+++"); rtuInstance.Send(a); } public static void Dispose() { isRunning = false; if (rtuInstance != null) rtuInstance.Dispose(); if (mainTask != null) mainTask.Wait(); } private static bool O_C(string o_c) { if (o_c.Equals("0")) { return false; } else if (o_c.Equals("1")) { return true; } return false; } private static void Add_List(ChartValues ts, float new_value) { try { ts.Add(new_value); if (ts.Count > _length) { ts.RemoveAt(0); } } catch (Exception) { return; } } private static void Add_List(List ts, string new_value) { try { ts.Add(new_value); if (ts.Count > _length) { ts.RemoveAt(0); } } catch (Exception ex) { return; } } //设置一个bool变量 来确认是否处于数据恢复状态 static bool _request = false; static int Flag = 0; static byte[] JL = new byte[6]; static string _Send_Message = ""; private async static void Auto_Wait() { await Task.Run(async () => { DateTime _datetime = System.DateTime.Now; //等待半个小时 等待数据采集完毕 while ((System.DateTime.Now - _datetime).TotalSeconds < 1800) { Thread.Sleep(1); } //如果当前数组内存在0,说明数据丢失,进行数据补偿 if (JL.Contains(0)) { //设置当前为数据恢复模式 _request = true; //进行拨号 if (await IrDial()) { //拨号成功 //浮标ADCP if (JL[0] == 0) { send_port_hand(11); Thread.Sleep(2000); } //浮标其他传感器 if (JL[1] == 0) { send_port_hand(13); Thread.Sleep(2000); } //潜标ADCP if (JL[2] == 0) { send_port_hand(21); Thread.Sleep(2000); } //潜标其他传感器 if (JL[3] == 0) { send_port_hand(25); Thread.Sleep(2000); } //接驳盒ADCP if (JL[4] == 0) { send_port_hand(31); Thread.Sleep(2000); } //接驳盒其他传感器 if (JL[5] == 0) { send_port_hand(30); Thread.Sleep(2000); } for (int i = 0; i < JL.Length; i++) { JL[i] = 0; } } else { Console.WriteLine("连接失败"); } //进行初始化操作 //rtuInstance.Send(System.Text.Encoding.Default.GetBytes("+++")); _request = false; Flag = 0; _Send_Message = ""; IsConnected = false; LastChance = false; } }); } /// /// 串口数据发送 手动开关量 /// /// /// /// public static void send_port_hand(int kind) { int a = 0xFE + 0xEF + 0x00 + 0x06 + 0x00 + 0x02 + kind + 0xFF; //取十六进制最低两位 a = a & 0xFF; string send_mes = "FEEF00060002" + kind.ToString("X2") + "FF" + a.ToString("X2") + "16"; byte[] bytea = tools.ConvertHexStringToBytes(send_mes); rtuInstance.Send(bytea); } static bool IsConnected = false; static bool LastChance = false; private static async Task IrDial() { Task result = Task.Run(() => { _Send_Message = "AT+CSQ\r\n"; Wait_rec(_Send_Message, 0); while (!IsConnected && !LastChance) { Thread.Sleep(1); } LastChance = false; return IsConnected; }); return await result; } //设置超时重传 每5秒没有接收到经过CRC校验的数据就 重新发送 如果连续三次都没有能通过CRC校验的数据就停止步骤 static bool _wait_rec = false; private async static void Wait_rec(string send, int flag) { await Task.Run(() => { Flag = flag; _wait_rec = false; try { rtuInstance.Send(System.Text.Encoding.Default.GetBytes(send)); } catch (Exception) { } for (int i = 0; i < 3; i++) { DateTime _time = System.DateTime.Now; while ((System.DateTime.Now - _time).TotalSeconds < 60 && !_wait_rec) { Thread.Sleep(1); } //如果有正确数据返回 就return掉 if (_wait_rec) return; try { //没有正确数据返回 就重新发送一下指令 rtuInstance.Send(System.Text.Encoding.Default.GetBytes(send)); } catch (Exception ex) { } Console.WriteLine("超时1分钟重发!"); } IsConnected = false; LastChance = true; Console.WriteLine("三次都没有超时重发成功"); }); } } }