예제 #1
0
        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);
        }
예제 #2
0
        /**
         * 发送雨量计校时信息
         **/
        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);
        }
예제 #3
0
        /**
         *发送前端设备配置信息
         * **/
        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);
        }
예제 #4
0
        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();
        }
예제 #5
0
        //甄玉龙增加燃气校时配置帧
        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);
        }
예제 #6
0
        //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);
        }
예제 #7
0
        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);
        }
예제 #8
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);
        }
예제 #9
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);
        }
예제 #10
0
 public TempFrm(DeviceDTO dev, DeviceService ds)
 {
     InitializeComponent();
     this.dev = dev;
     this.ds  = ds;
 }
예제 #11
0
        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;
                }
            }
        }
예제 #12
0
 public HubSettingFrm(DeviceDTO dev, DeviceService ds)
 {
     InitializeComponent();
     this.dev = dev;
     this.ds  = ds;
 }