private List <DeviceDTO> getOnlineWSDev() { List <DeviceDTO> devices = new List <DeviceDTO>(); var server = bootstrap.GetServerByName(WS_SERVER); if (server == null) { return(devices); } WSServer casicServer = server as WSServer; // CasicSession session = casicServer.GetAllSessions() as CasicSession; foreach (WSSession session in casicServer.GetAllSessions()) { String sessionId = session.SessionID; if (session.MacID != null) { DeviceDTO devDto = new DeviceDTO(); devDto.SessionId = sessionId; devDto.Company = "203所"; devDto.TypeName = "有害气体监测仪"; devDto.Name = session.MacID; devDto.Tag = ""; devDto.Status = "在线"; devDto.ServerName = "WSServer"; devices.Add(devDto); } } return(devices); }
/** * 发送雨量计校时信息 **/ private bool sendYLConfig(DeviceDTO dto, Dictionary <String, String> settings) { var server = bootstrap.GetServerByName(YL_SERVER); YLServer casicServer = server as YLServer; YLSession session = casicServer.GetSessionByID(dto.SessionId) as YLSession; byte[] set = ApplicationContext.getInstance().getUpdateTime(); //更新session中devID的编号 String devName = settings["yw_deviceId"]; session.DeviceID = devName; byte[] devCodes = new byte[2]; devCodes[0] = byte.Parse(devName.Substring(0, 2), System.Globalization.NumberStyles.HexNumber); devCodes[1] = byte.Parse(devName.Substring(2, 2), System.Globalization.NumberStyles.HexNumber); set[2] = devCodes[0]; set[3] = devCodes[1]; byte[] sendCode = CodeUtils.yl_addCrc(set); //TODO LIST:获取会话信息,发送数据 //session.Send(set, 0, set.Length); session.Send(sendCode, 0, sendCode.Length); session.Logger.Info("雨量计配置信息下发成功:" + BitConverter.ToString(sendCode)); return(true); }
/** *发送前端设备配置信息 * **/ public bool sendDeviceInfo(DeviceDTO deviceDto, Dictionary <String, String> settings) { String serverName = deviceDto.ServerName; String sessionID = deviceDto.SessionId; bool reuslt = false; switch (serverName) { case CASIC_SERVER_NAME: //TODO LIST:根据传感器类型,发送对应的配置信息 reuslt = this.sendCasicConfig(deviceDto, settings); break; case YL_SERVER: //TODO LIST:进行雨量计的校时操作 reuslt = this.sendYLConfig(deviceDto, settings); break; case WS_SERVER: reuslt = this.sendWSConfig(deviceDto, settings); break; default: break; } return(reuslt); }
private void timer1_Tick(object sender, EventArgs e) { List <DeviceDTO> devices = ds.getAllOnlineDev(); if (devices.Count == 0) { return; } DataTable dt = DeviceDTO.ConvertToTables(devices); winGridViewPager1.DataSource = devices; winGridViewPager1.dataGridView1.Refresh(); }
//甄玉龙增加燃气校时配置帧 public void calibraRQ(DeviceDTO dto) { var server = bootstrap.GetServerByName(WS_SERVER); WSServer casicServer = server as WSServer; WSSession session = casicServer.GetSessionByID(dto.SessionId) as WSSession; //下发校时信息 String preTimeCal = "SewTiming:" + session.MacID + ","; String postTime = DateTime.Now.ToString("yyyyMMddHHmmss"); String timeCal = preTimeCal + postTime; byte[] data1 = new byte[timeCal.Length + 2]; Encoding.ASCII.GetBytes(timeCal, 0, timeCal.Length, data1, 0); data1[timeCal.Length] = 0x0D; data1[timeCal.Length + 1] = 0x0A; session.Send(data1, 0, data1.Length); session.Logger.Info("校时信息:" + timeCal); }
//TODO LIST:获取所有在线的设备列表 private List <DeviceDTO> getOnlineCasicDev() { List <DeviceDTO> devices = new List <DeviceDTO>(); var server = bootstrap.GetServerByName(CASIC_SERVER_NAME); if (server == null) { return(devices); } CasicServer casicServer = server as CasicServer; // CasicSession session = casicServer.GetAllSessions() as CasicSession; foreach (CasicSession session in casicServer.GetAllSessions()) { String sessionId = session.SessionID; //casic的设备一个session中,可能存在集中器,噪声、液位传感器都多种数据信息 foreach (KeyValuePair <string, CasicSession.DeviceDTO> kvp in session.devMaps) { String devInfo = kvp.Key; CasicSession.DeviceDTO dto = kvp.Value; String devType = dto.DevType; String devID = dto.DevCode; DeviceDTO devDto = new DeviceDTO(); devDto.SessionId = sessionId; devDto.Company = "203所"; devDto.TypeName = devType; devDto.Name = devID; devDto.Tag = dto.Detail; devDto.Status = "在线"; devDto.ServerName = "CasicServer"; devices.Add(devDto); } } return(devices); }
private bool sendWSConfig(DeviceDTO dto, Dictionary <String, String> settings) { var server = bootstrap.GetServerByName(WS_SERVER); WSServer casicServer = server as WSServer; WSSession session = casicServer.GetSessionByID(dto.SessionId) as WSSession; String period = settings["ws_period"]; if (period == "") { return(false); } String sdata0 = "SewAcquireInterval:" + session.MacID + "," + period; byte[] data0 = new byte[sdata0.Length + 2]; Encoding.ASCII.GetBytes(sdata0, 0, sdata0.Length, data0, 0); data0[sdata0.Length] = 0x0D; data0[sdata0.Length + 1] = 0x0A; session.Send(data0, 0, data0.Length); session.Logger.Info("有害气体配置信息:" + sdata0); //下发校时信息 /* * String preTimeCal = "SewTiming:" + session.MacID + ","; * String postTime = DateTime.Now.ToString("yyyyMMddHHmmss"); * String timeCal = preTimeCal + postTime; * * byte[] data1 = new byte[timeCal.Length + 2]; * Encoding.ASCII.GetBytes(timeCal, 0, timeCal.Length, data1, 0); * data1[timeCal.Length] = 0x0D; * data1[timeCal.Length + 1] = 0x0A; * session.Send(data1, 0, data1.Length); * session.Logger.Info("校时信息:" + timeCal); * */ return(true); }
/** * 发送203所自研设备:渗漏预警仪、液位监测仪、井盖传感器的配置信息 * **/ private bool sendCasicConfig(DeviceDTO dto, Dictionary <String, String> settings) { //判断设备是否已经唤醒 //TODO LIST:获取会话信息,发送数据 /* * var server0 = bootstrap.GetServerByName(CASIC_SERVER_NAME); * CasicServer casicServer0 = server0 as CasicServer; * CasicSession session0 = casicServer0.GetSessionByID(dto.SessionId) as CasicSession; * CasicSession.DeviceDTO dev = session0.devMaps[dto.Name]; * if (!dev.IsWakeUp && dev.DevType!="集中器") * { * return false; * } * */ String[] parameters = dto.Tag.Split(','); //TODO: construct the receving casic data String preamble = parameters[0]; byte btpreamble = byte.Parse(preamble, System.Globalization.NumberStyles.HexNumber); String version = parameters[1]; byte btVersion = byte.Parse(version, System.Globalization.NumberStyles.HexNumber); String deviceId = parameters[3];//6个字节 byte[] btDevId = new byte[6]; btDevId[0] = byte.Parse(deviceId.Substring(0, 2), System.Globalization.NumberStyles.HexNumber); btDevId[1] = byte.Parse(deviceId.Substring(2, 2), System.Globalization.NumberStyles.HexNumber); btDevId[2] = byte.Parse(deviceId.Substring(4, 2), System.Globalization.NumberStyles.HexNumber); btDevId[3] = byte.Parse(deviceId.Substring(6, 2), System.Globalization.NumberStyles.HexNumber); btDevId[4] = byte.Parse(deviceId.Substring(8, 2), System.Globalization.NumberStyles.HexNumber); btDevId[5] = byte.Parse(deviceId.Substring(10, 2), System.Globalization.NumberStyles.HexNumber); String routeFlag = parameters[4]; byte btRouteFlag = byte.Parse(routeFlag, System.Globalization.NumberStyles.HexNumber); String dstNodeAddr = parameters[5];//2个字节 byte[] btDstNode = new byte[2]; btDstNode[0] = byte.Parse(dstNodeAddr.Substring(0, 2), System.Globalization.NumberStyles.HexNumber); btDstNode[1] = byte.Parse(dstNodeAddr.Substring(2, 2), System.Globalization.NumberStyles.HexNumber); String seq = parameters[7]; byte btSeq = byte.Parse(seq, System.Globalization.NumberStyles.HexNumber); byte[] btPdu = new byte[2];; //2个字节 byte[] tag = null; switch (dto.TypeName) { case "渗漏预警仪": btPdu[0] = 0x03; btPdu[1] = 0x82; tag = this.getNosieTag(settings); break; case "液位监测仪": btPdu[0] = 0x03; btPdu[1] = 0x87; tag = this.getYWTag(settings); break; case "集中器": btPdu[0] = 0x03; btPdu[1] = 0x85; tag = this.getHubTag(settings); break; case "温度压力监测仪": btPdu[0] = 0x03; btPdu[1] = 0x88; tag = this.getTempTag(settings); break; /* * case "压力计": * btPdu[0] = 0x03; * btPdu[1] = 0x89; * tag = this.getPressTag(settings); * break; * */ case "远传水表": btPdu[0] = 0x03; btPdu[1] = 0x8A; tag = this.getWaterMeterTag(settings); break; case "井盖传感器": btPdu[0] = 0x03; btPdu[1] = 0x86; break; default: break; } int totalLen = 6 + 1 + 2 + 2 + 1 + tag.Length; byte[] btLens = new byte[2]; byte[] btlens0 = BitConverter.GetBytes(totalLen); btLens[0] = btlens0[1]; btLens[1] = btlens0[0]; //wrap the whole data byte[] result = new byte[1 + 1 + 2 + 6 + 1 + 2 + 2 + 1 + tag.Length]; result[0] = btpreamble; result[1] = btVersion; btLens.CopyTo(result, 2); btDevId.CopyTo(result, 4); result[10] = btRouteFlag; btDstNode.CopyTo(result, 11); btPdu.CopyTo(result, 13); result[15] = btSeq; tag.CopyTo(result, 16); // session.Logger.Info("CRC校验前数据:" + BitConverter.ToString(result)); //增加CRC校验 String strCrc = StringUtil.To16HexString(String.Format("{0:X}", (int)CodeUtils.CRC16_AD(result))); byte[] btcrc = { CodeUtils.String2Byte(strCrc.Substring(0, 2)), CodeUtils.String2Byte(strCrc.Substring(2, 2)) }; byte[] afcrc = new byte[result.Length + 2]; result.CopyTo(afcrc, 0); btcrc.CopyTo(afcrc, result.Length); //TODO LIST:获取会话信息,发送数据 var server = bootstrap.GetServerByName(CASIC_SERVER_NAME); CasicServer casicServer = server as CasicServer; CasicSession session = casicServer.GetSessionByID(dto.SessionId) as CasicSession; session.Logger.Info("手动下发渗漏噪声配置信息:" + BitConverter.ToString(afcrc)); session.Send(afcrc, 0, afcrc.Length); return(true); }
public void wakeUpCasicDev(DeviceDTO dto) { //判断当前是够已经唤醒,如果已经唤醒则不再下发配置信息 //判断设备是否已经唤醒 //TODO LIST:获取会话信息,发送数据 var server0 = bootstrap.GetServerByName(CASIC_SERVER_NAME); CasicServer casicServer0 = server0 as CasicServer; CasicSession session0 = casicServer0.GetSessionByID(dto.SessionId) as CasicSession; CasicSession.DeviceDTO dev = session0.devMaps[dto.Name]; if (dev.IsWakeUp || dev.DevType == "集中器") { return; } String[] parameters = dto.Tag.Split(','); //TODO: construct the receving casic data String preamble = parameters[0]; byte btpreamble = byte.Parse(preamble, System.Globalization.NumberStyles.HexNumber); String version = parameters[1]; byte btVersion = byte.Parse(version, System.Globalization.NumberStyles.HexNumber); String deviceId = parameters[3];//6个字节 byte[] btDevId = new byte[6]; btDevId[0] = byte.Parse(deviceId.Substring(0, 2), System.Globalization.NumberStyles.HexNumber); btDevId[1] = byte.Parse(deviceId.Substring(2, 2), System.Globalization.NumberStyles.HexNumber); btDevId[2] = byte.Parse(deviceId.Substring(4, 2), System.Globalization.NumberStyles.HexNumber); btDevId[3] = byte.Parse(deviceId.Substring(6, 2), System.Globalization.NumberStyles.HexNumber); btDevId[4] = byte.Parse(deviceId.Substring(8, 2), System.Globalization.NumberStyles.HexNumber); btDevId[5] = byte.Parse(deviceId.Substring(10, 2), System.Globalization.NumberStyles.HexNumber); String routeFlag = parameters[4]; byte btRouteFlag = byte.Parse(routeFlag, System.Globalization.NumberStyles.HexNumber); String dstNodeAddr = parameters[5];//2个字节 byte[] btDstNode = new byte[2]; btDstNode[0] = byte.Parse(dstNodeAddr.Substring(0, 2), System.Globalization.NumberStyles.HexNumber); btDstNode[1] = byte.Parse(dstNodeAddr.Substring(2, 2), System.Globalization.NumberStyles.HexNumber); String sPtuType = parameters[6];//2个字节 Int16 btpduType = Int16.Parse(sPtuType, System.Globalization.NumberStyles.HexNumber); Int16 opearType = (Int16)(btpduType & 0x7F); Int16 pdu = (Int16)(2688 + opearType); //0X0A80 byte[] btPdu0 = BitConverter.GetBytes(pdu); byte[] btPdu = { btPdu0[1], btPdu0[0] }; // btDstNode[0] = byte.Parse(dstNodeAddr.Substring(0, 2), System.Globalization.NumberStyles.HexNumber); // btDstNode[1] = byte.Parse(dstNodeAddr.Substring(2, 2), System.Globalization.NumberStyles.HexNumber); String seq = parameters[7]; byte btSeq = byte.Parse(seq, System.Globalization.NumberStyles.HexNumber); byte[] tag = { 0x60, 0x00, 0x02, 0x00, 0x00, 0x01, 0x00 }; byte[] totoalLen = { 0x00, 0x13 }; //wrap the whole data byte[] result = new byte[1 + 1 + 2 + 6 + 1 + 2 + 2 + 1 + 7]; result[0] = btpreamble; result[1] = btVersion; totoalLen.CopyTo(result, 2); btDevId.CopyTo(result, 4); result[10] = btRouteFlag; btDstNode.CopyTo(result, 11); btPdu.CopyTo(result, 13); result[15] = btSeq; tag.CopyTo(result, 16); //增加CRC校验 String strCrc = StringUtil.To16HexString(String.Format("{0:X}", (int)CodeUtils.CRC16_AD(result))); byte[] btcrc = { CodeUtils.String2Byte(strCrc.Substring(0, 2)), CodeUtils.String2Byte(strCrc.Substring(2, 2)) }; byte[] afcrc = new byte[result.Length + 2]; result.CopyTo(afcrc, 0); btcrc.CopyTo(afcrc, result.Length); //TODO LIST:获取会话信息,发送数据 var server = bootstrap.GetServerByName(CASIC_SERVER_NAME); CasicServer casicServer = server as CasicServer; CasicSession session = casicServer.GetSessionByID(dto.SessionId) as CasicSession; session.Logger.Info("下发唤醒信息:" + "设备编号:" + deviceId + "" + BitConverter.ToString(afcrc)); session.Send(afcrc, 0, afcrc.Length); }
public TempFrm(DeviceDTO dev, DeviceService ds) { InitializeComponent(); this.dev = dev; this.ds = ds; }
private void winGridViewPager1_OnEditSelected(object sender, EventArgs e) { DataGridView grid = sender as DataGridView; if (grid != null) { string name = grid.SelectedRows[0].Cells["Name"].Value.ToString(); string company = grid.SelectedRows[0].Cells["Company"].Value.ToString(); string typeName = grid.SelectedRows[0].Cells["TypeName"].Value.ToString(); string tag = grid.SelectedRows[0].Cells["Tag"].Value.ToString(); string sessionId = grid.SelectedRows[0].Cells["SessionId"].Value.ToString(); string status = grid.SelectedRows[0].Cells["Status"].Value.ToString(); string serverName = grid.SelectedRows[0].Cells["ServerName"].Value.ToString(); DeviceDTO dto = new DeviceDTO(); dto.Name = name; dto.Company = company; dto.TypeName = typeName; dto.Tag = tag; dto.SessionId = sessionId; //dto.Status = status; dto.ServerName = serverName; switch (dto.TypeName) { case "渗漏预警仪": SLSettingFrm f1 = new SLSettingFrm(dto, ds); f1.Show(); break; case "液位监测仪": YWSettingFrm f2 = new YWSettingFrm(dto, ds); f2.Show(); break; case "集中器": HubSettingFrm f3 = new HubSettingFrm(dto, ds); f3.Show(); break; case "雨量计": YLSettingFrm f4 = new YLSettingFrm(dto, ds); f4.Show(); break; case "有害气体监测仪": WSFrm f5 = new WSFrm(dto, ds); f5.Show(); break; case "温度压力监测仪": TempFrm f6 = new TempFrm(dto, ds); f6.Show(); break; case "远传水表": WaterMeterFrm f7 = new WaterMeterFrm(dto, ds); f7.Show(); break; default: break; } } }
public HubSettingFrm(DeviceDTO dev, DeviceService ds) { InitializeComponent(); this.dev = dev; this.ds = ds; }