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);
        }
示例#4
0
        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);
        }
示例#7
0
        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;
            }
        }
示例#12
0
        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("燃气数据保存成功");
        }
示例#13
0
        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("水表数据保存成功");
        }
示例#14
0
 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);
         }
     }
 }
示例#15
0
        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("腐蚀环境数据保存成功");
        }
示例#16
0
        /**
         * 发送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);
        }
示例#17
0
 public override void execute(Tag tag, String devCode, CellTag cellTag,
                              SystemDateTag systemDateTag, CasicSession session)
 {
     CellTag slCellTag = tag as CellTag;
     //  CasicCmd.cell = slCellTag.Cell;
 }
示例#18
0
        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);
        }
示例#19
0
 public abstract void execute(Tag tag, String devCode, CellTag cellTag,
                              SystemDateTag systemDateTag, CasicSession session);