public override void execute(Tag tag, String devCode, CellTag cellTag, SystemDateTag systemDateTag0, CasicSession session) { SensorException0Tag sensorException0 = tag as SensorException0Tag; String state = sensorException0.state; int type = getPduType(devCode);//获取设备类型 //todo list:根据设备类型来进行存储 switch (type) { case 7: //液位监测仪 探测0 new BLL.DjLiquid().setDeviceStatus(devCode, state); break; case 2: //噪声记录仪 new BLL.SlNoise().setDeviceStatus(devCode, state); break; default: break; } }
//0000 0071 前四个字节暂时不用 public override void execute(Tag tag, String devCode, CellTag cellTag, SystemDateTag systemDateTag, CasicSession session) { //TODO LIST:解析井盖传感器数据并保存 UploadTag wellTag = tag as UploadTag; int itv = wellTag.CollectInter; String collecTime = wellTag.CollectTime; int len = wellTag.Len; String dataValue = wellTag.DataValue; session.Logger.Info("井盖数据上传TAG:oid:" + wellTag.Oid + " 采集间隔: " + itv + "采集时间:" + collecTime + "上传数值:" + dataValue); int num = len / 1; //上传的井盖数据个数 List <Model.WellSensorInfo> djs = new List <WellSensorInfo>(); //井盖数据tag之前,无系统日期tag数据 // DateTime baseTime = Convert.ToDateTime(CasicCmd.currentSystemDate + " " + collecTime); for (int i = 0; i < num; i++) { //上传的有状态数据、设备ID、可能有电池电量等数据 WellSensorInfo wellInfo = new WellSensorInfo(); wellInfo.DEVID = devCode; wellInfo.LOGTIME = DateTime.Now; byte btStatus = byte.Parse(dataValue, System.Globalization.NumberStyles.HexNumber); string descn = ""; switch (btStatus) { case 0: descn = "状态正常"; new BLL.WellInfo().saveDeviceStatus(wellInfo.DEVID, WellAlarmEnum.NORMAL); break; case 1: descn = "井盖开启"; saveWellAlarm(wellInfo.DEVID, session); break; case 2: descn = "时钟故障"; new BLL.WellInfo().saveDeviceStatus(wellInfo.DEVID, WellAlarmEnum.SYS_ERROR); break; case 3: descn = "低电压"; new BLL.WellInfo().saveDeviceStatus(wellInfo.DEVID, WellAlarmEnum.BATTERY_LOW); break; default: descn = "未知状态"; break; } wellInfo.DESCN = descn; wellInfo.STATUS = btStatus + ""; djs.Add(wellInfo); } new BLL.WellInfo().insert(djs); session.Logger.Info("井盖数据保存成功"); }
public override void execute(Tag tag, String devCode, CellTag cellTag, SystemDateTag systemDateTag, CasicSession session) { SystemTimeTag sysTag = tag as SystemTimeTag; session.Logger.Info("系统时间TAG:oid:" + sysTag.Oid + "系统时间:" + sysTag.SysTime); }
public override void execute(Tag tag, String devCode, CellTag cellTag, SystemDateTag systemDateTag0, CasicSession session) { //更新系统日期 SystemDateTag systemDateTag = tag as SystemDateTag; //CasicCmd.currentSystemDate = systemDateTag.CollectDate; session.Logger.Info("系统日期TAG:oid:" + systemDateTag.Oid + "系统日期:" + systemDateTag.CollectDate); }
public override void execute(Tag tag, String devCode, CellTag cellTag, SystemDateTag systemDateTag, CasicSession session) { //TODO LIST:解析腐蚀速率数据,保存腐蚀速率 UploadTag fsslTag = tag as UploadTag; int itv = fsslTag.CollectInter; String collecTime = fsslTag.CollectTime; int len = fsslTag.Len; String dataValue = fsslTag.DataValue; session.Logger.Info("腐蚀速率数据上传TAG:oid:" + fsslTag.Oid + " 采集间隔: " + itv + "采集时间:" + collecTime + "上传数值:" + dataValue); int num = len / 20; //上传的腐蚀速率的组数,1组5个数据,1个数据4个字节 /* * 开路电位OCP:单位V * 溶液电阻Rs:单位Ω.cm2 * 极化电阻Rp:单位Ω.cm2 * 腐蚀电流密度Icorr:单位mA/cm2 * 腐蚀速率Vcorr:单位mm/a * */ List <Model.AKFSSLInfo> djs = new List <Model.AKFSSLInfo>(); DateTime baseTime = Convert.ToDateTime(systemDateTag.CollectDate + " " + collecTime); for (int i = 0; i < num; i++) { Model.AKFSSLInfo fssl = new Model.AKFSSLInfo(); String openCircultVol = strHexToFloat(dataValue.Substring(i * 40, 8)).ToString("f4"); String ryResist = strHexToFloat(dataValue.Substring(i * 40 + 8, 8)).ToString("f4"); String jhResist = strHexToFloat(dataValue.Substring(i * 40 + 16, 8)).ToString("f4"); String concurDen = strHexToFloat(dataValue.Substring(i * 40 + 24, 8)).ToString("f4"); String errosionRate = strHexToFloat(dataValue.Substring(i * 40 + 32, 8)).ToString("f4"); fssl.Cell = (cellTag == null ? "" : cellTag.Cell); fssl.OpenCir = openCircultVol; fssl.RyResist = ryResist; fssl.JhResist = jhResist; fssl.CurrentDen = concurDen; fssl.ErrosionRat = errosionRate; fssl.LogTime = DateTime.Now; fssl.UpTime = baseTime.AddMinutes(i * itv); fssl.DEVCODE = devCode; djs.Add(fssl); } new BLL.AKFSSL().insert(djs); new BLL.AKFSSL().saveAlarmInfo(djs); // new BLL.DjLiquid().updateDevStatus(CasicCmd.devCode); session.Logger.Info("腐蚀速率数据保存成功"); }
public override void execute(Tag tag, String devCode, CellTag cellTag, SystemDateTag systemDateTag, CasicSession session) { //TODO LIST:处理对应的心跳上传数据 UploadTag heartBeatTag = tag as UploadTag; int itv = heartBeatTag.CollectInter; String collecTime = heartBeatTag.CollectTime; int len = heartBeatTag.Len; String dataValue = heartBeatTag.DataValue; session.Logger.Info("心跳上传TAG:oid:" + heartBeatTag.Oid + " 采集间隔: " + itv + "采集时间:" + collecTime + "上传数值:" + dataValue); }
public override void execute(Tag tag, String devCode, CellTag cellTag, SystemDateTag systemDateTag, CasicSession session) { WakeUpTag wakeUpTag = tag as WakeUpTag; if (session.devMaps.ContainsKey(devCode)) { CasicSession.DeviceDTO dev = session.devMaps[devCode]; byte flag = byte.Parse(wakeUpTag.DataValue, System.Globalization.NumberStyles.HexNumber); dev.IsWakeUp = flag == 0?true:false; //上传0代表已经唤醒 session.devMaps[devCode] = dev; session.Logger.Info("设备唤醒" + devCode); session.Logger.Info("唤醒TAG:oid:" + wakeUpTag.Oid + "唤醒状态:" + wakeUpTag.IsWAkeUp); } }
//0000 0071 前四个字节暂时不用 public override void execute(Tag tag, String devCode, CellTag cellTag, SystemDateTag systemDateTag, CasicSession session) { //TODO LIST:解析流量数据保存流量数据 UploadTag noiseTag = tag as UploadTag; int itv = noiseTag.CollectInter; String collecTime = noiseTag.CollectTime; int len = noiseTag.Len; String dataValue = noiseTag.DataValue; session.Logger.Info("噪声数据上传TAG:oid:" + noiseTag.Oid + " 采集间隔: " + itv + "采集时间:" + collecTime + "上传数值:" + dataValue); int num = len / 4; //上传的流量数据个数,修改未2个字节//yxw修改为4个字节,加频率 List <Model.SlNoiseInfo> djs = new List <SlNoiseInfo>(); DateTime baseTime = Convert.ToDateTime(systemDateTag.CollectDate + " " + collecTime); for (int i = 0; i < num; i++) { // DjNoiseInfo noiseInfo = new DjNoiseInfo(); SlNoiseInfo slNoiseInfo = new SlNoiseInfo(); //TODO LIST:密集开始时间、密集间隔、密集样本数、无线开启时间、 //无线关闭时间、密集噪声、电池电量 slNoiseInfo.CELL = (cellTag == null ? "" : cellTag.Cell); slNoiseInfo.LOGTIME = DateTime.Now; slNoiseInfo.UPTIME = baseTime.AddMinutes(i * itv); slNoiseInfo.SRCID = devCode; slNoiseInfo.DSTID = "FFFF"; String dStr = dataValue.Substring(i * 8 + 0, 4); String frequency = dataValue.Substring(i * 8 + 4, 4); slNoiseInfo.DENSEDATA = int.Parse(dStr.Substring(0, 2) + dStr.Substring(2, 2), System.Globalization.NumberStyles.HexNumber).ToString(); slNoiseInfo.FREQUENCY = int.Parse(frequency.Substring(0, 2) + frequency.Substring(2, 2), System.Globalization.NumberStyles.HexNumber).ToString(); djs.Add(slNoiseInfo); } new BLL.SlNoise().insert(djs); new BLL.SlNoise().SaveZZAlarmInfo(djs); new BLL.SlNoise().updateDevStatus(devCode); session.Logger.Info("噪声数据保存成功"); }
private void saveWellAlarm(String devCode, CasicSession session) { try { List <Model.AlarmRecordInfo> alarms = new List <Model.AlarmRecordInfo>(); Model.AlarmRecordInfo alarm = new Model.AlarmRecordInfo(); alarm.DEVICE_ID = Convert.ToInt32(new BLL.Device().getDeviceIdByCode(devCode)); alarm.DEVICE_CODE = devCode; alarm.MESSAGE = (int)WellAlarmEnum.WELL_OPEN + ""; alarm.RECORDDATE = System.DateTime.Now; alarm.MESSAGE_STATUS = 0; alarm.ACTIVE = true; alarm.DEVICE_TYPE_NAME = "井盖状态监测仪"; alarms.Add(alarm); new BLL.WellInfo().saveAlarm(alarm); } catch (Exception e) { session.Logger.Error("井盖传感器报警插入出错:请检查该设备是否已注册:" + devCode); } }
public override void execute(Tag tag, String devCode, CellTag cellTag, SystemDateTag systemDateTag, CasicSession session) { //TODO LIST:解析压力数据保存压力数据 UploadTag pressTag = tag as UploadTag; int itv = pressTag.CollectInter; String collecTime = pressTag.CollectTime; int len = pressTag.Len; String dataValue = pressTag.DataValue; session.Logger.Info("压力数据上传TAG:oid:" + pressTag.Oid + " 采集间隔: " + itv + "采集时间:" + collecTime + "上传数值:" + dataValue); int num = len / 4; //上传的液位数据个数 //List<Model.CasicPress> djs = new List<Model.CasicPress>(); List <Model.DjPressInfo> djs = new List <Model.DjPressInfo>(); DateTime baseTime = Convert.ToDateTime(systemDateTag.CollectDate + " " + collecTime); for (int i = 0; i < num; i++) { DjPressInfo pressInfo = new DjPressInfo(); String press = strHexToFloat(dataValue.Substring(i * 8, 8)).ToString(); //TODO LIST:电池电量 pressInfo.CELL = (cellTag == null ? "" : cellTag.Cell); pressInfo.PRESSDATA = press; pressInfo.LOGTIME = DateTime.Now; pressInfo.UPTIME = baseTime.AddMinutes(i * itv); pressInfo.DEVID = devCode; djs.Add(pressInfo); } new BLL.DjPress().insert(djs); //new BLL.DjPress().saveAlarmInfo(djs); new BLL.DjPress().updateDevStatus(devCode); session.Logger.Info("压力数据保存成功"); }
//TODO LIST:默认打印出来未处理的tag信息 public override void execute(Tag tag, String devCode, CellTag cellTag, SystemDateTag systemDateTag, CasicSession session) { switch (tag.Oid) { case "10000022": //TODO LIST:处理ip的逻辑 String ad_ip = getInfoFromStrEncoding(tag); session.Logger.Info("服务器IP TAG" + " oid:" + tag.Oid + " len:" + tag.Len + " value:" + tag.DataValue + " IP:" + ad_ip); break; case "10000023": //TODO LIST:处理端口的逻 String ad_port = getInfoFromStrEncoding(tag); session.Logger.Info("服务器端口 TAG" + " oid:" + tag.Oid + " len:" + tag.Len + " value" + tag.DataValue + " PORT:" + ad_port); break; default: session.Logger.Info("未处理TAG" + " oid:" + tag.Oid + " len:" + tag.Len + " value:" + tag.DataValue); break; } }
public override void execute(Tag tag, String devCode, CellTag cellTag, SystemDateTag systemDateTag, CasicSession session) { //TODO LIST:解析压力数据保存压力数据 UploadTag rqTag = tag as UploadTag; int itv = rqTag.CollectInter; String collecTime = rqTag.CollectTime; int len = rqTag.Len; String dataValue = rqTag.DataValue; session.Logger.Info("燃气数据上传TAG:oid:" + rqTag.Oid + " 采集间隔: " + itv + "采集时间:" + collecTime + "上传数值:" + dataValue); int num = len / 4; //上传的燃气数据个数 List <Model.RQPeriodInfo> rqs = new List <Model.RQPeriodInfo>(); DateTime baseTime = Convert.ToDateTime(systemDateTag.CollectDate + " " + collecTime); for (int i = 0; i < num; i++) { String density = strHexToFloat(dataValue.Substring(i * 8, 8)).ToString(); Model.RQPeriodInfo rq = new Model.RQPeriodInfo(); rq.ADDRESS = devCode; rq.INPRESS = "0"; rq.OUTPRESS = "0"; rq.FLOW = "0"; rq.STRENGTH = density; rq.TEMPERATURE = "0"; rq.CELL = (cellTag == null ? "" : cellTag.Cell); rq.UPTIME = baseTime.AddMinutes(i * itv); rq.LOGTIME = DateTime.Now; rqs.Add(rq); } BLL.RQPeriod bll = new BLL.RQPeriod(); bll.insert(rqs); bll.saveAlarmInfo(rqs); session.Logger.Info("燃气数据保存成功"); }
public override void execute(Tag tag, String devCode, CellTag cellTag, SystemDateTag systemDateTag, CasicSession session) { //TODO LIST:解析水表数据,保存水表欧数据 UploadTag tempTag = tag as UploadTag; int itv = tempTag.CollectInter; String collecTime = tempTag.CollectTime; int len = tempTag.Len; String dataValue = tempTag.DataValue; session.Logger.Info("水表数据上传TAG:oid:" + tempTag.Oid + " 采集间隔: " + itv + "采集时间:" + collecTime + "上传数值:" + dataValue); int num = len / 4; //上传的温度数据个数 List <Model.CasicWaterMeter> djs = new List <Model.CasicWaterMeter>(); DateTime baseTime = Convert.ToDateTime(systemDateTag.CollectDate + " " + collecTime); for (int i = 0; i < num; i++) { Model.CasicWaterMeter tempInfo = new CasicWaterMeter(); String temp = strHexToInt32(dataValue.Substring(i * 8, 8)).ToString(); //TODO LIST:电池电量 tempInfo.Cell = (cellTag == null ? "" : cellTag.Cell); tempInfo.Data = temp; tempInfo.LogTime = DateTime.Now; tempInfo.UpTime = baseTime.AddMinutes(i * itv); tempInfo.DEVCODE = devCode; djs.Add(tempInfo); } new BLL.CasicWaterMeter().insert(djs); new BLL.CasicWaterMeter().saveAlarmInfo(djs); new BLL.CasicWaterMeter().updateDevStatus(devCode); session.Logger.Info("水表数据保存成功"); }
public void handleTag(Tag tag, String devCode, CellTag cellTag, SystemDateTag systemDateTag, CasicSession session) { if (this.isThisTag(tag)) { //处理当前逻辑 this.execute(tag, devCode, cellTag, systemDateTag, session); } else { if (nextHandler != null) { nextHandler.handleTag(tag, devCode, cellTag, systemDateTag, session); } else { //TODO LIST:用默认的TagHandler来处理 nextHandler = new DefaultTagHandler(); nextHandler.execute(tag, devCode, cellTag, systemDateTag, session); } } }
public override void execute(Tag tag, String devCode, CellTag cellTag, SystemDateTag systemDateTag, CasicSession session) { //TODO LIST:解析腐蚀环境数据,保存腐蚀环境数据 UploadTag fshjTag = tag as UploadTag; int itv = fshjTag.CollectInter; String collecTime = fshjTag.CollectTime; int len = fshjTag.Len; String dataValue = fshjTag.DataValue; session.Logger.Info("腐蚀环境数据上传TAG:oid:" + fshjTag.Oid + " 采集间隔: " + itv + "采集时间:" + collecTime + "上传数值:" + dataValue); int num = len / (2 * 16); //上传的数据组数,1组16个数据,每个数据4个字节 List <Model.AKFSHJInfo> djs = new List <Model.AKFSHJInfo>(); DateTime baseTime = Convert.ToDateTime(systemDateTag.CollectDate + " " + collecTime); for (int i = 0; i < num; i++) { Model.AKFSHJInfo fshjInfo = new Model.AKFSHJInfo(); String underVol1 = strHexToInt(dataValue.Substring(i * 64, 4)).ToString(); String underVol2 = strHexToInt(dataValue.Substring(i * 64 + 4, 4)).ToString(); String underVol3 = strHexToInt(dataValue.Substring(i * 64 + 8, 4)).ToString(); String underVol4 = strHexToInt(dataValue.Substring(i * 64 + 12, 4)).ToString(); String underVol5 = strHexToInt(dataValue.Substring(i * 64 + 16, 4)).ToString(); String underVol6 = strHexToInt(dataValue.Substring(i * 64 + 20, 4)).ToString(); String under_temp1 = (strHexToInt(dataValue.Substring(i * 64 + 24, 4)) / 10.0).ToString(); String under_temp2 = (strHexToInt(dataValue.Substring(i * 64 + 28, 4)) / 10.0).ToString(); String outter_temp1 = (strHexToInt(dataValue.Substring(i * 64 + 32, 4)) / 10.0).ToString(); String outter_temp2 = (strHexToInt(dataValue.Substring(i * 64 + 36, 4)) / 10.0).ToString(); String underWater1 = strHexToInt(dataValue.Substring(i * 64 + 40, 4)).ToString(); String underWater2 = strHexToInt(dataValue.Substring(i * 64 + 44, 4)).ToString(); String underWater3 = strHexToInt(dataValue.Substring(i * 64 + 48, 4)).ToString(); String underWater4 = strHexToInt(dataValue.Substring(i * 64 + 52, 4)).ToString(); String underWater5 = strHexToInt(dataValue.Substring(i * 64 + 56, 4)).ToString(); String underWater6 = strHexToInt(dataValue.Substring(i * 64 + 60, 4)).ToString(); fshjInfo.UnderTemp1 = under_temp1; fshjInfo.UnderTemp2 = under_temp2; fshjInfo.OutterTemp1 = outter_temp1; fshjInfo.OutterTemp2 = outter_temp2; fshjInfo.UnderVo11 = underVol1; fshjInfo.UnderVo12 = underVol2; fshjInfo.UnderVo13 = underVol3; fshjInfo.UnderVo14 = underVol4; fshjInfo.UnderVo15 = underVol5; fshjInfo.UnderVo16 = underVol6; fshjInfo.UnderWaterIn1 = underWater1; fshjInfo.UnderWaterIn2 = underWater2; fshjInfo.UnderWaterIn3 = underWater3; fshjInfo.UnderWaterIn4 = underWater4; fshjInfo.UnderWaterIn5 = underWater5; fshjInfo.UnderWaterIn6 = underWater6; fshjInfo.Cell = (cellTag == null ? "" : cellTag.Cell); fshjInfo.LogTime = DateTime.Now; fshjInfo.UpTime = baseTime.AddMinutes(i * itv); fshjInfo.DEVCODE = devCode; djs.Add(fshjInfo); } new BLL.AKFSHJ().insert(djs); String pipeType = new BLL.AKFSHJ().getHeatPipeTypeByDevCode(devCode); new BLL.AKFSHJ().saveAlarmInfo(djs, pipeType); //new BLL.AKFSHJ().saveAlarmInfo(djs);//todo list:生成报警规则 session.Logger.Info("腐蚀环境数据保存成功"); }
/** * 发送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 override void execute(Tag tag, String devCode, CellTag cellTag, SystemDateTag systemDateTag, CasicSession session) { CellTag slCellTag = tag as CellTag; // CasicCmd.cell = slCellTag.Cell; }
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 abstract void execute(Tag tag, String devCode, CellTag cellTag, SystemDateTag systemDateTag, CasicSession session);