Ejemplo n.º 1
0
        /// <summary>
        /// 更新调理版设置组
        /// </summary>
        private void UpdateMeterageSample()
        {
            //设置每块调理版的参数组
            byte[] recData = new byte[13];
            Console.WriteLine("更新调理版参数组!");
            for (int i = 1; i <= 4; i++)
            {
                byte[] cmd = OrderHelper.UpdateMeterageSample(_site.MeterageLibList.Where(item => item.GorupId == i).ToList(), i);
                if (cmd != null)
                {
                    _sokect.Send(cmd);
                    if (!_sokect.Receive(recData))
                    {
                        ;
                    }
                    //LogHelper.Info(MethodBase.GetCurrentMethod(), string.Format("{0}站点更新调理{1}号参数组失败!", _site.Sn, i));
                }
            }

            //设置对应每块调理版的参数组是否采集
            for (int i = 1; i <= 4; i++)
            {
                List <MeterageLibModel> meterageLibList = _site.MeterageLibList.Where(item => item.GorupId == i).ToList();
                if (meterageLibList.Count == 0)
                {
                    continue;
                }
                for (int j = 1; j <= 8; j++)
                {
                    int channelId = j + (i - 1) * 8;
                    IEnumerable <ChannelStruct> channelStructList = _site.ChannelStructList.Where(c => c.ChannelID == channelId);
                    if (channelStructList.Count() == 0)
                    {
                        continue;
                    }

                    ChannelStruct             channelStruct      = channelStructList.FirstOrDefault();
                    List <MeterageSamplerate> meterageSampleList = _meterageSamplerateService.Query(s =>
                                                                                                    s.AreaId == channelStruct.AreaID &&
                                                                                                    s.McId == channelStruct.MachineID &&
                                                                                                    s.ParId == channelStruct.MonitorID &&
                                                                                                    s.DirId == channelStruct.Position_HVA &&
                                                                                                    s.IsSamplerate == 1);
                    byte[] cmd = OrderHelper.UpdateMeterageChannelBind(meterageLibList, meterageSampleList, channelId);
                    if (cmd != null)
                    {
                        if (_sokect.Send(cmd))
                        {
                            if (_sokect.Receive(recData))
                            {
                                continue;
                            }
                            //LogHelper.Info(MethodBase.GetCurrentMethod(), string.Format("{0}站点{1}通道号参数组是否采集配置失败!", _site.Sn, channelId));
                        }
                    }
                }
            }
            Console.WriteLine("更新调理版参数组完成!");
        }
Ejemplo n.º 2
0
 /// <summary>
 /// 站点配置更新
 /// </summary>
 public static byte[] UpdateChannelInfo(ChannelStruct channelStruct)
 {
     /********************************************下载测点结构:*******************************************
      * 【 1	    |  $】
      * 【 2    | P(point)】
      * 【 3~264|         struct ChannelInfo 】 262字节
      * 【265校验     】
      **************************************************************************************************************/
     channelStruct.AreaName      = new char[30];
     channelStruct.MachineName   = new char[30];
     channelStruct.MonitorIDName = new char[30];
     byte[] structData = MarshalHelper.StructToBytes(channelStruct, 266);
     byte[] cmd        = new byte[266 + 3];
     cmd[0] = (byte)'$';
     cmd[1] = (byte)'P';
     Array.Copy(structData, 0, cmd, 2, 266);
     cmd[268] = (byte)'$';
     return(cmd);
 }
Ejemplo n.º 3
0
        protected internal override void Read()
        {
            serverId = ReadD();
            string       serverName = ReadS();
            string       serverAddr = ReadS();
            bool         useAkey    = (ReadC() == 1) ? true : false;
            ServerStruct server     = new ServerStruct(serverId, serverName, serverAddr, useAkey);

            int channel_count = ReadD();

            for (int i = 0; i < channel_count; i++)
            {
                int           id      = ReadH();
                string        name    = ReadS();
                int           port    = ReadH();
                int           type    = ReadC();
                int           max     = ReadD();
                int           curr    = ReadD();
                ChannelStruct channel = new ChannelStruct(id, name, port, type, max, curr);
                server.Channels.Add(channel.Id, channel);
            }

            LoginServer.ServerList.Add(server.Id, server);
        }
Ejemplo n.º 4
0
 public ResponseSelectServer(int sid, int cid)
 {
     server  = LoginServer.ServerList[sid];
     channel = server.Channels[cid];
 }
Ejemplo n.º 5
0
        public void GetSiteDetails(ref SiteModel site)
        {
            int  sn       = site.Sn;
            Site siteInfo = _siteService.Query(s => s.SiteSN == sn).FirstOrDefault();

            site.IsUpdate = siteInfo.SiteUpdateTag;
            site.RunState = siteInfo.SiteRunState;
            site.AearId   = siteInfo.AreaId;

            List <ConfigBindModel> configBindModelList = _configBindService.GetChannelStructInfo(site.Sn);
            List <ChannelStruct>   channelStructList   = new List <ChannelStruct>();

            foreach (ConfigBindModel item in configBindModelList)
            {
                ChannelStruct channel = _mapper.Map <ChannelStruct>(item);
                channel.SensorSensitivity = 100;
                channel.Bias_limit_low    = 0;
                channel.Bias_limit_high   = 0;
                channel.SensorStableTime  = -1;
                channel.SpeedRPM          = 0;
                channel.SpeedChannelNo    = 0;
                channel.RpmRatio          = 0;
                channel.Speed_limit_low   = -1;
                channel.Speed_limit_high  = -1;
                channel.Fmax           = -1;
                channel.Lines          = 1;
                channel.AverageTime    = 1;
                channel.AveragePercent = 1;
                channel.Amplification  = 1;
                channel.value4         = -40.0f;
                channel.value20        = 100.0f;
                channel.MeaValueUnit   = GetAttrName("");
                switch (channel.TypeSensor)
                {
                case 0:     //加速度
                    SensorAcc accSensor = _sensorAccService.QueryById(item.SensorId);
                    if (accSensor != null)
                    {
                        channel.SensorSensitivity = (float)accSensor.AccSensibility;
                        channel.Bias_limit_low    = (float)accSensor.AccBiasLow;
                        channel.Bias_limit_high   = (float)accSensor.AccBiasHigh;
                        channel.SensorStableTime  = accSensor.AccSettlingTime;
                    }
                    break;

                case 3:    //范围
                    SensorRange rangeSensor = _sensorRangeService.QueryById(item.SensorId);
                    if (rangeSensor != null)
                    {
                        channel.value4  = rangeSensor.RangeValue1;
                        channel.value20 = rangeSensor.RangeValue2;
                    }
                    break;
                }
                List <WorkStatus> workStatuesList = _workStatusService.GetWorkStatusByDirId(channel.AreaID, item.ChannelID);
                int[]             workStatues     = new int[5];

                for (int i = 0; i < 5; i++)
                {
                    workStatues[i] = workStatuesList.Count > i ? workStatuesList[i].WorkStatusValue : -1;
                }
                channel.StateStatus = workStatues;
                channel.SpeedSatus  = new int[5];
                channelStructList.Add(channel);
            }
            site.ChannelStructList = channelStructList;
            site.MeterageLibList   = _meterageLibService.GetMeterageLibListBySn(site.Sn);
            site.WorkStatusList    = _workStatusService.Query(w => w.AreaId == siteInfo.AreaId && w.IsUse == 1);
        }
Ejemplo n.º 6
0
        /// <summary>
        /// 从下位机获取波形或频谱数据,波形数据直接存储,频谱数据返回供提取转速
        /// </summary>
        /// <param name="meterageSamplerate">获取波形或频谱参数</param>
        /// <returns></returns>
        private DataTwModel GetTwFFTData(MeterageSamplerate ms)
        {
            //是否停机状态
            string key = $"A{ms.AreaId}M{ms.McId}";

            if (_stopMachineOa.GetValueOrDefault(key))
            {
                return(null);
            }

            byte[]        recData         = new byte[20];
            int           line            = ms.MsrLine;
            int           frequency       = ms.MsrRateMax;
            int           type            = ms.MsrParameter.ToLower().Contains("env") ? 2 : 0;
            char          typeName        = ms.MsrName.ToUpper()[0];                                                                                                                                    //类型的首字母  如:Disp 'D'
            ChannelStruct channelStruct   = _site.ChannelStructList.FirstOrDefault(cs => cs.AreaID == ms.AreaId && cs.MachineID == ms.McId && cs.MonitorID == ms.ParId && cs.Position_HVA == ms.DirId); //获取通道号
            List <int>    workStatuesList = channelStruct.StateStatus.Where(w => w != -1).ToList();

            byte[] cmd = OrderHelper.TwDataByChannel(channelStruct.ChannelID, typeName, frequency, line, 0); //获取每个通道取数据命令
            if (_socket.Send(cmd))
            {
                if (!_socket.Receive(recData))    //接收失败
                {
                    return(null);
                }

                int len = BitConverter.ToInt32(recData, 15); //获取要接收的数据长度
                if (len <= 0)                                //是否有数据
                {
                    return(null);
                }

                //获取波形数据
                cmd = OrderHelper.TwDataByChannel(channelStruct.ChannelID, typeName, frequency, line, 1);
                if (!_socket.Send(cmd))
                {
                    return(null);
                }

                byte[] data = new byte[len];
                if (!_socket.Receive(data)) //接收波形数据,最后4个字节是工况
                {
                    Console.WriteLine(string.Format("{0}站点{1}通道号接收波形异常!", _site.Sn, channelStruct.ChannelID));
                    return(null);
                }

                DataTw tw = new DataTw()  //数据转化波形对象
                {
                    AreaId         = ms.AreaId,
                    McId           = ms.McId,
                    ParId          = ms.ParId,
                    DirId          = ms.DirId,
                    DataLines      = GetLineByType(ms.MsrLine, type),
                    DataPoints     = (int)(GetLineByType(ms.MsrLine, type) * 2.56),
                    DataHz         = (int)(GetFrequencyByType(ms.MsrRateMax, type) * 2.56),
                    DataIsFFT      = 0,
                    DataType       = type + 1,
                    DataFormat     = 2,
                    Data           = new byte[len - 7 * 4],
                    DataWorkStatus = Convert.ToInt32(BitConverter.ToSingle(data, 24)),
                    Time           = ConvertTime(data)
                };

                //是否是要取的工况
                if (!workStatuesList.Exists(w => w == tw.DataWorkStatus))
                {
                    return(null);
                }
                Array.Copy(data, 7 * 4, tw.Data, 0, len - 7 * 4); //把波形数据copy到 tw.data中

                if (ms.MsrParameter.ToLower().Contains("env"))    //包络,直接存
                {
                    tw.DataIsFFT = 1;
                    tw.Data      = SplitMinFFT(tw.Data, ms);                                      //截取最小Fmin
                    _dataTwService.InsertDataTw(tw, string.Format("tb_data_tw_{0}", ms.MsrName)); //存入数据库
                }
                else if (ms.MsrParameter.ToLower().Contains("acc"))
                {
                    //存储波形
                    _dataTwService.InsertDataTw(tw, string.Format("tb_data_tw_{0}", ms.MsrName));

                    //频谱存储
                    float[] accSpectrum = GetAccSpectrum(ToFloatArray(tw.Data), tw.DataLines);
                    for (int z = 0; z < accSpectrum.Length; z++)
                    {
                        accSpectrum[z] = accSpectrum[z] / 1.414f;//峰值转有效值
                    }
                    tw.Data      = ToByteArray(accSpectrum);
                    tw.DataIsFFT = 1;
                    tw.Data      = SplitMinFFT(tw.Data, ms); //截取最小Fmin
                    _dataTwService.InsertDataTw(tw, string.Format("tb_data_tw_{0}", ms.MsrName));
                }
                else if (ms.MsrParameter.ToLower().Contains("disp"))
                {
                    float[] accSpectrum = GetAccSpectrum(ToFloatArray(tw.Data) /*原始波形*/, tw.DataLines);

                    //位移频谱
                    float[] dispSpectrum = GetDispSpectrum(accSpectrum, tw.DataHz, tw.DataPoints);
                    for (int k = 0; k < dispSpectrum.Length; k++)
                    {
                        //位移有效值
                        dispSpectrum[k] = dispSpectrum[k] * 9800 * 1000 / 1.414f;
                    }

                    //位移波形
                    float[] dispTw = new float[tw.DataPoints];
                    FFTHelper.IntegrateFromSpectrum(ToFloatArray(tw.Data) /*原始波形*/, tw.DataHz, tw.DataPoints, ms.MsrRateMin, GetFrequencyByType(ms.MsrRateMax, type), 2, ref dispTw);
                    for (int k = 0; k < dispTw.Length; k++)
                    {
                        dispTw[k] = dispTw[k] * 9800 * 1000;
                    }

                    //存储波形
                    //tw.data = ToByteArray(dispTw);
                    _dataTwService.InsertDataTw(tw, string.Format("tb_data_tw_{0}", ms.MsrName));

                    //频谱存储
                    tw.DataIsFFT = 1;
                    tw.Data      = ToByteArray(dispSpectrum);
                    tw.Data      = SplitMinFFT(tw.Data, ms); //截取最小Fmin
                    _dataTwService.InsertDataTw(tw, string.Format("tb_data_tw_{0}", ms.MsrName));
                }
                else if (ms.MsrParameter.ToLower().Contains("vel"))
                {
                    float[] accSpectrum = GetAccSpectrum(ToFloatArray(tw.Data) /*原始波形*/, tw.DataLines);

                    //速度波形
                    float[] velTw = new float[tw.DataPoints];
                    FFTHelper.IntegrateFromSpectrum(ToFloatArray(tw.Data) /*原始波形*/, tw.DataHz, tw.DataPoints, ms.MsrRateMin, GetFrequencyByType(ms.MsrRateMax, type), 1, ref velTw);
                    for (int k = 0; k < velTw.Length; k++)
                    {
                        velTw[k] = velTw[k] * 9800;
                    }

                    //速度频谱
                    float[] velSpectrum = GetVelSpectrum(accSpectrum, tw.DataHz, tw.DataPoints);
                    for (int k = 0; k < velSpectrum.Length; k++)
                    {
                        velSpectrum[k] = velSpectrum[k] * 9800 / 1.414f;
                    }

                    //波形存储
                    //tw.data = ToByteArray(velTw);
                    _dataTwService.InsertDataTw(tw, string.Format("tb_data_tw_{0}", ms.MsrName));

                    //频谱存储
                    tw.DataIsFFT = 1;
                    tw.Data      = ToByteArray(velSpectrum); //获取频谱
                    tw.Data      = SplitMinFFT(tw.Data, ms); //截取最小Fmin
                    _dataTwService.InsertDataTw(tw, string.Format("tb_data_tw_{0}", ms.MsrName));
                }
                return(_mapper.Map <DataTwModel>(tw));
            }

            return(null);
        }