Пример #1
0
        private void BtnDel_Click(object sender, RoutedEventArgs e)
        {
            //删除
            FmsAssetCommParam assetComm = gridItem.SelectedItem as FmsAssetCommParam;

            if (assetComm == null)
            {
                return;
            }

            if (
                MessageBox.Show($"确定要删除 设备编号为【{assetComm.ASSET_CODE}】的通讯配置信息吗?", "删除", MessageBoxButton.OKCancel,
                                MessageBoxImage.Question) != MessageBoxResult.OK)
            {
                return;
            }
            assetComm.USE_FLAG         = (int)EmUseFlag.Deleted; //已删除
            assetComm.UPDATED_BY       = CBaseData.LoginName;
            assetComm.LAST_UPDATE_DATE = DateTime.Now;
            assetComm.UPDATED_INTROD  += "删除 ";
            _fmsClient.UseService(s => s.UpdateFmsAssetCommParam(assetComm));

            NotificationInvoke.NewNotification("删除提示", "设备通讯配置信息已删除!");

            GetPage();  //重新刷新数据,根据需求是否进行刷新数据
        }
Пример #2
0
 public FmsAssetCommParam GetFmsAssetCommParamById(string Id)
 {
     using (IFmsAssetCommParamBLL FmsAssetCommParamBLL = BLLContainer.Resolve <IFmsAssetCommParamBLL>())
     {
         FmsAssetCommParam model = FmsAssetCommParamBLL.GetFirstOrDefault(Id);
         return(model);
     }
 }
Пример #3
0
        /// <summary>
        /// 获取主轴刀号信息
        /// </summary>
        private void GetMainToolsInfo()
        {
            TmsDeviceToolsPos toolsPos = gridChangeTools.SelectedItem as TmsDeviceToolsPos;

            if (toolsPos == null)
            {
                return;
            }
            //获取主轴刀号
            FmsAssetTagSetting tagSetting =
                wsFMS.UseService(
                    s =>
                    s.GetFmsAssetTagSettings(
                        $"USE_FLAG = 1 AND ASSET_CODE = '{toolsPos.DEVICE_PKNO}' AND TAG_NAME = '主轴刀号'"))
                .FirstOrDefault();

            if (tagSetting == null)
            {
                tbMainToolsNO.Text = "【主轴刀号】的Tag地址未设置!";
                return;
            }
            FmsAssetCommParam device =
                wsFMS.UseService(s => s.GetFmsAssetCommParams($"USE_FLAG = 1 AND ASSET_CODE = '{toolsPos.DEVICE_PKNO}'"))
                .FirstOrDefault();

            if (device == null)
            {
                tbMainToolsNO.Text = "设备未设置通讯信息!";
                return;
            }
            string commAddress = device.COMM_ADDRESS;
            DeviceCommInterface interfaceType = EnumHelper.ParserEnumByValue(device.INTERFACE_TYPE, DeviceCommInterface.CNC_Fanuc);
            int period = Convert.ToInt32(device.SAMPLING_PERIOD);  //采样周期

            DeviceManager deviceCommunication = new DeviceManager(device.PKNO, interfaceType, commAddress, period * 1000);

            List <DeviceTagParam> deviceTags = new List <DeviceTagParam>();
            DeviceTagParam        deviceTag  = new DeviceTagParam(tagSetting.PKNO, tagSetting.TAG_CODE,
                                                                  tagSetting.TAG_NAME, tagSetting.TAG_ADDRESS,
                                                                  EnumHelper.ParserEnumByValue(tagSetting.VALUE_TYPE, TagDataType.Default),
                                                                  EnumHelper.ParserEnumByValue(tagSetting.SAMPLING_MODE, DataSimplingMode.AutoReadDevice),
                                                                  deviceCommunication); //通讯参数

            deviceTags.Add(deviceTag);                                                  //添加

            deviceCommunication.InitialDevice(deviceTags, null);

            string error   = "";
            string sResult = deviceCommunication.SyncReadData(tagSetting.TAG_ADDRESS, out error);

            if (error != "")
            {
                mainToolsNO = sResult;
            }

            tbMainToolsNO.Text = (error == "") ? "主轴刀号:T" + sResult : "读取主轴刀号错误,代码 " + error;
        }
Пример #4
0
        private void GridControl_SelectedItemChanged(object sender, DevExpress.Xpf.Grid.SelectedItemChangedEventArgs e)
        {
            try
            {
                ListProgram.Items.Clear();
                AmAssetMasterN amAssetMasterN = e.NewItem as AmAssetMasterN;
                amAssetMasterN_temp = amAssetMasterN;
                FmsAssetCommParam fmsAssetCommParams = new FmsAssetCommParam();
                string stra = " ASSET_CODE = " + amAssetMasterN.ASSET_CODE + " AND INTERFACE_TYPE = 1";
                fmsAssetCommParams = _FMSClient.UseService(s => s.GetFmsAssetCommParams(" ASSET_CODE = " + amAssetMasterN.ASSET_CODE + " AND INTERFACE_TYPE = 1")).FirstOrDefault();
                if (fmsAssetCommParams != null)
                {
                    IP = fmsAssetCommParams.COMM_ADDRESS;
                    //this.lstbx_CNCProgramPath.Items.Clear();

                    string ip = IP;
                    ushort Flibhndl = 0;
                    short ret = Focas1.cnc_allclibhndl3(ip, 8193, 3, out Flibhndl);
                    if (ret != Focas1.EW_OK)
                    {
                        Flibhndl = 0;
                        return;
                    }
                    string drive = "";
                    Focas1.ODBPDFDRV odbpdfdrv = new Focas1.ODBPDFDRV();
                    ret = Focas1.cnc_rdpdf_drive(Flibhndl, odbpdfdrv);
                    switch (odbpdfdrv.max_num)
                    {
                        case 1:
                            drive = "//" + odbpdfdrv.drive1 + "/";// 
                            break;
                    }
                    //this.lbCNCPath.Text = drive;//"//CNC_MEM/"

                    GetProgramDir(drive);
                    foreach (var item in array_Folder)
                    {
                        ListProgram.Items.Add(item.ToString());
                        //this.lstbx_CNCProgramPath.Items.Add(item.ToString());
                    }
                    foreach (var item in array_File)
                    {
                        ListProgram.Items.Add(item.ToString());
                        //this.lstbx_CNCProgramPath.Items.Add(item.ToString());
                    }

                }
            }
            catch (Exception)
            {

                
            }


        }
Пример #5
0
 public bool AddFmsAssetCommParam(FmsAssetCommParam mFmsAssetCommParam)
 {
     if (mFmsAssetCommParam == null)
     {
         return(false);
     }
     using (IFmsAssetCommParamBLL FmsAssetCommParamBLL = BLLContainer.Resolve <IFmsAssetCommParamBLL>())
     {
         return(FmsAssetCommParamBLL.Add(mFmsAssetCommParam));
     }
 }
Пример #6
0
 public bool DelFmsAssetCommParam(string Id)
 {
     using (IFmsAssetCommParamBLL FmsAssetCommParamBLL = BLLContainer.Resolve <IFmsAssetCommParamBLL>())
     {
         try
         {
             FmsAssetCommParam item = FmsAssetCommParamBLL.GetFirstOrDefault(Id);
             return(FmsAssetCommParamBLL.Delete(item));
         }
         catch { return(false); }
     }
 }
Пример #7
0
        private void cmbAssetInfo_SelectionChanged(object sender, SelectionChangedEventArgs e)
        {
            AmAssetMasterN asset = cmbAssetInfo.SelectedItem as AmAssetMasterN;

            if (asset == null)
            {
                return;
            }

            FmsAssetCommParam comm = _fmsClient
                                     .UseService(s => s.GetFmsAssetCommParams($"ASSET_CODE = '{asset.ASSET_CODE}' AND USE_FLAG = 1"))
                                     .FirstOrDefault();

            tbAddressIntrod.DataContext = comm;
        }
Пример #8
0
 public bool DelFmsAssetCommParams(string[] Ids)
 {
     using (IFmsAssetCommParamBLL FmsAssetCommParamBLL = BLLContainer.Resolve <IFmsAssetCommParamBLL>())
     {
         try
         {
             List <FmsAssetCommParam> entitys = new List <FmsAssetCommParam>();
             foreach (string id in Ids)
             {
                 FmsAssetCommParam item = FmsAssetCommParamBLL.GetFirstOrDefault(id);
                 entitys.Add(item);
             }
             return(FmsAssetCommParamBLL.Delete(entitys));
         }
         catch { return(false); }
     }
 }
Пример #9
0
        private void BtnSave_Click(object sender, RoutedEventArgs e)
        {
            //保存
            AmAssetMasterN    asset     = cmbAssetInfo.SelectedItem as AmAssetMasterN;
            FmsAssetCommParam assetComm = gbItem.DataContext as FmsAssetCommParam;

            if (assetComm == null)
            {
                return;
            }

            #region

            //TODO: 校验;保存
            if (asset == null)
            {
                MessageBox.Show("请选择设备!", "保存", MessageBoxButton.OK, MessageBoxImage.Exclamation);
                return;
            }

            if (assetComm.PKNO == "")
            {
                assetComm.PKNO             = CBaseData.NewGuid();
                assetComm.CREATED_BY       = CBaseData.LoginName;
                assetComm.CREATION_DATE    = DateTime.Now;
                assetComm.LAST_UPDATE_DATE = DateTime.Now;  //最后修改日期
                _fmsClient.UseService(s => s.AddFmsAssetCommParam(assetComm));
            }
            else
            {
                assetComm.UPDATED_BY       = CBaseData.LoginName;
                assetComm.LAST_UPDATE_DATE = DateTime.Now;
                _fmsClient.UseService(s => s.UpdateFmsAssetCommParam(assetComm));
            }
            NotificationInvoke.NewNotification("保存", "设备通讯配置信息已保存。");

            #endregion

            GetPage();  //重新刷新数据,根据需求是否进行刷新数据

            //保存成功
            gbItem.IsCollapsed = true;
            gbItem.Visibility  = Visibility.Collapsed;
            BindHelper.SetDictDataBindingGridItem(gbItem, gridItem);
        }
Пример #10
0
        private void bToolsChange_Click(object sender, System.Windows.RoutedEventArgs e)
        {
            //换刀 向CNC发送换刀动作
            TmsDeviceToolsPos toolsPos = gridChangeTools.SelectedItem as TmsDeviceToolsPos;

            if (toolsPos == null)
            {
                return;
            }
            //获取主轴刀号
            FmsAssetTagSetting tagSetting =
                wsFMS.UseService(
                    s =>
                    s.GetFmsAssetTagSettings(
                        $"USE_FLAG = 1 AND ASSET_CODE = '{toolsPos.DEVICE_PKNO}' AND TAG_NAME = '机床换刀'"))
                .FirstOrDefault();

            if (tagSetting == null)
            {
                tbMainToolsNO.Text = "【机床换刀】的Tag地址未设置!";
                return;
            }
            FmsAssetCommParam device =
                wsFMS.UseService(s => s.GetFmsAssetCommParams($"USE_FLAG = 1 AND ASSET_CODE = '{toolsPos.DEVICE_PKNO}'"))
                .FirstOrDefault();

            if (device == null)
            {
                tbMainToolsNO.Text = "设备未设置通讯信息!";
                return;
            }
            string commAddress   = device.COMM_ADDRESS;
            int    interfaceType = device.INTERFACE_TYPE;
            int    period        = Convert.ToInt32(device.SAMPLING_PERIOD); //采样周期

            OperateResult ret = DeviceHelper.WriteDataByAddress(device.ASSET_CODE, interfaceType, commAddress,
                                                                tagSetting.PKNO, tagSetting.TAG_ADDRESS, toolsPos.TOOLS_POS_NO);

            tbMainToolsNO.Text = (ret.IsSuccess) ? "机床换刀准备 " + toolsPos.TOOLS_POS_NO : "发送换刀指令错误,代码 " + ret.Message;

            if (ret.IsSuccess)
            {
                mainToolsNO = "";                 //开始换刀
            }
        }
Пример #11
0
        private void BtnRefreshCnc(object sender, RoutedEventArgs e)
        {
            ListProgram.Items.Clear();
            AmAssetMasterN amAssetMasterN = amAssetMasterN_temp as AmAssetMasterN;
            FmsAssetCommParam fmsAssetCommParams = new FmsAssetCommParam();
            fmsAssetCommParams = _FMSClient.UseService(s => s.GetFmsAssetCommParams(" ASSET_CODE = " + amAssetMasterN.ASSET_CODE + "")).FirstOrDefault();
            if (fmsAssetCommParams != null)
            {
                IP = fmsAssetCommParams.COMM_ADDRESS;
                //this.lstbx_CNCProgramPath.Items.Clear();

                string ip = IP;
                ushort Flibhndl = 0;
                short ret = Focas1.cnc_allclibhndl3(ip, 8193, 3, out Flibhndl);
                if (ret != Focas1.EW_OK)
                {
                    Flibhndl = 0;
                    return;
                }
                string drive = "";
                Focas1.ODBPDFDRV odbpdfdrv = new Focas1.ODBPDFDRV();
                ret = Focas1.cnc_rdpdf_drive(Flibhndl, odbpdfdrv);
                switch (odbpdfdrv.max_num)
                {
                    case 1:
                        drive = "//" + odbpdfdrv.drive1 + "/";// 
                        break;
                }
                //this.lbCNCPath.Text = drive;//"//CNC_MEM/"

                GetProgramDir(drive);
                foreach (var item in array_Folder)
                {
                    ListProgram.Items.Add(item.ToString());
                    //this.lstbx_CNCProgramPath.Items.Add(item.ToString());
                }
                foreach (var item in array_File)
                {
                    ListProgram.Items.Add(item.ToString());
                    //this.lstbx_CNCProgramPath.Items.Add(item.ToString());
                }

            }
        }
Пример #12
0
        private void BtnAdd_Click(object sender, RoutedEventArgs e)
        {
            //新增
            #region

            //TODO: 校验,空的类绑定到界面的DataContent

            FmsAssetCommParam assetComm = new FmsAssetCommParam {
                PKNO = "", ASSET_CODE = "", USE_FLAG = 1
            };

            gbItem.DataContext = assetComm;

            #endregion

            dictBasic.Header   = $"{HeaderName}  【新增】";
            gbItem.IsCollapsed = false;
            gbItem.Visibility  = Visibility.Visible;
        }
Пример #13
0
        /// <summary>
        /// 向设备写入标签值
        /// </summary>
        /// <param name="tagPKNO"></param>
        /// <param name="value"></param>
        /// <param name="error">输出错误信息</param>
        /// <returns>0:成功;1:标签PKNO为空;2:标签不存在;3:通讯设备不存在;10:写入设备失败</returns>
        public static int WriteTagToDevice(string tagPKNO, string value, out string error)
        {
            int ret = 0;

            error = "";
            if (string.IsNullOrEmpty(tagPKNO))
            {
                error = "标签PKNO为空";
                return(1);
            }

            FmsAssetTagSetting tagSetting = GetTagSettingById(tagPKNO);

            if (tagSetting == null)
            {
                error = "标签不存在";
                return(2);
            }

            FmsAssetCommParam deviceCommParam = _devices.FirstOrDefault(c => c.ASSET_CODE == tagSetting.ASSET_CODE);

            if (deviceCommParam == null)
            {
                error = "通讯设备不存在";
                return(3);
            }

            OperateResult result = DeviceHelper.WriteDataByAddress(deviceCommParam.ASSET_CODE,
                                                                   deviceCommParam.INTERFACE_TYPE, deviceCommParam.COMM_ADDRESS,
                                                                   tagSetting.PKNO, tagSetting.TAG_ADDRESS, value); //写入设备

            if (!result.IsSuccess)
            {
                error = "向设备写入失败,错误:" + result.Message;
                return(10);
            }

            //更新当前值
            SetTagSettingValue(tagSetting, value);

            return(ret);
        }
Пример #14
0
        private void Timer_Elapsed(object sender, ElapsedEventArgs e)
        {
            this.timer.Enabled = false;

            WcfClient <IFMSService> ws = new WcfClient <IFMSService>();

            //try
            //{
            lock (objLock)
            {
                FmsAssetCommParam comm = ws.UseService(s => s.GetFmsAssetCommParams("")).FirstOrDefault();
                comm.LAST_UPDATE_DATE = DateTime.Now;
                ws.UseService(s => s.UpdateFmsAssetCommParam(comm));
            }
            //}
            //catch (Exception ex)
            //{
            //    Console.WriteLine(ex.Message);
            //}
            Console.WriteLine($"Thread Write{iWriteTest++}");
            this.timer.Enabled = true;
        }
Пример #15
0
        /// <summary>
        /// 读取设备线程
        /// </summary>
        /// <param name="device">设备</param>
        private void TheadGetDeviceData(FmsAssetCommParam device)
        {
            if ((!bMonitor) || (device == null))
            {
                return;        //未开启监控
            }
            int readSpan = 0;  //设定采样周期的变量

            #region 获取基础参数

            int period = Convert.ToInt32(device.SAMPLING_PERIOD);  //采样周期
            if (period <= 0)
            {
                return;             //采样周期<=0时不采样
            }
            string deviceCode = device.ASSET_CODE;
            DeviceCommInterface interfaceType = EnumHelper.ParserEnumByValue(device.INTERFACE_TYPE, DeviceCommInterface.CNC_Fanuc);
            string commAddress = device.COMM_ADDRESS;

            List <FmsAssetTagSetting> tagSettings = _tagSettings.Where(c => c.ASSET_CODE == deviceCode).ToList();  //

            if (tagSettings.Count <= 0)
            {
                return;
            }

            #endregion

            DeviceManager deviceCommunication = new DeviceManager(device.ASSET_CODE,
                                                                  interfaceType, commAddress, period * 1000, "", "");

            List <DeviceTagParam> deviceTags = new List <DeviceTagParam>();

            foreach (var tagSetting in tagSettings)
            {
                DeviceTagParam deviceTag = new DeviceTagParam(tagSetting.PKNO, tagSetting.TAG_CODE,
                                                              tagSetting.TAG_NAME, tagSetting.TAG_ADDRESS,
                                                              EnumHelper.ParserEnumByValue(tagSetting.VALUE_TYPE, TagDataType.Default),
                                                              EnumHelper.ParserEnumByValue(tagSetting.SAMPLING_MODE, DataSimplingMode.ReadAndWrite),
                                                              deviceCommunication); //通讯参数

                deviceTags.Add(deviceTag);                                          //添加
            }

            deviceCommunication.InitialDevice(deviceTags, SaveData);

            while (!CBaseData.AppClosing)
            {
                #region 暂停

                if (bPause)
                {
                    System.Threading.Thread.Sleep(200);
                    continue;
                }

                #endregion

                try
                {
                    readSpan++;

                    if ((period > 0) && (readSpan % (period * 10) == 0)) //读取数据
                    {
                        #region 定期刷新数据 - 目前针对OPC订阅方式

                        if (deviceCommunication.DeviceCore is OpcClassicManager)  //如果是OPC读取方式
                        {
                            var ret = ((OpcClassicManager)deviceCommunication.DeviceCore).RefreshData();
                            if (!ret.IsSuccess) //错误时
                            {
                                EventLogger.Log("数据刷新失败,错误为:" + ret.Message);
                                continue;
                            }
                        }

                        #endregion

                        #region 正常读取

                        List <FmsAssetTagSetting> readTags =
                            tagSettings.Where(c => c.SAMPLING_MODE == 0 || c.SAMPLING_MODE == 10).ToList(); //这些需要读取的。

                        foreach (FmsAssetTagSetting curSetting in readTags)
                        {
                            try
                            {
                                if (curSetting.SAMPLING_MODE == 11)
                                {
                                    continue;                                                                   //暂时不读
                                }
                                Thread.Sleep(50);                                                               //防止读取过快

                                OperateResult read = deviceCommunication.AsyncReadData(curSetting.TAG_ADDRESS); //异步读取数据

                                if (!read.IsSuccess)                                                            //错误时
                                {
                                    curSetting.CUR_VALUE = "";
                                    EventLogger.Log($"读取[{curSetting.TAG_ADDRESS}]失败,错误为:" + read.Message);
                                    continue;
                                }

                                //读取成功,读取数据有结果时,一般为同步读取数据时
                                OperateResult <string> result = read as OperateResult <string>;
                                if (result != null)
                                {
                                    SaveData(curSetting.PKNO, result.Content);
                                }
                            }
                            catch (Exception ex)
                            {
                                EventLogger.Log($"读取设备[{device.ASSET_CODE}]的值错误,错误为:", ex);
                            }
                        }

                        #endregion

                        readSpan = 0;
                    }
                }
                catch (Exception ex)
                {
                    Console.WriteLine("读取失败, 错误为:" + ex.Message);
                }

                System.Threading.Thread.Sleep(100);
            }
        }
Пример #16
0
        /// <summary>
        /// 读取DA数据
        /// </summary>
        /// <param name="device"></param>
        private void ThreadGetDaMonitor(FmsAssetCommParam device)
        {
            if ((!bMonitor) || (device == null))
            {
                return;        //未开启监控
            }
            int readSpan = 0;  //设定采样周期的变量

            #region 获取基础参数

            string deviceCode = device.ASSET_CODE;
            DeviceCommInterface interfaceType = EnumHelper.ParserEnumByValue(device.INTERFACE_TYPE, DeviceCommInterface.CNC_Fanuc);
            string commAddress = device.COMM_ADDRESS;
            int    period      = Convert.ToInt32(device.SAMPLING_PERIOD); //采样周期

            List <FmsAssetTagSetting> tagSettings =
                _tagSettings.Where(c => c.ASSET_CODE == deviceCode && c.SAMPLING_MODE == 3).ToList();  //DA采集模式

            if (tagSettings.Count <= 0)
            {
                return;
            }

            #endregion

            DeviceManager deviceCommunication = new DeviceManager(CBaseData.NewGuid(),
                                                                  interfaceType, commAddress, period * 1000);

            List <DeviceTagParam> deviceTags = new List <DeviceTagParam>();

            foreach (var tagSetting in tagSettings)
            {
                DeviceTagParam deviceTag = new DeviceTagParam(tagSetting.PKNO, tagSetting.TAG_CODE,
                                                              tagSetting.TAG_NAME, tagSetting.TAG_ADDRESS,
                                                              EnumHelper.ParserEnumByValue(tagSetting.VALUE_TYPE, TagDataType.Default),
                                                              EnumHelper.ParserEnumByValue(tagSetting.SAMPLING_MODE, DataSimplingMode.ReadAndWrite),
                                                              deviceCommunication); //通讯参数

                deviceTags.Add(deviceTag);                                          //添加
            }

            deviceCommunication.InitialDevice(deviceTags, SaveData);

            while (!CBaseData.AppClosing)
            {
                #region 暂停

                if (bPause)
                {
                    System.Threading.Thread.Sleep(200);
                    continue;
                }

                #endregion

                try
                {
                    readSpan++;

                    if ((period > 0) && (readSpan % (period * 10) == 0)) //读取数据
                    {
                        string error = "";

                        lock (locakDA)
                        {
                            List <FmsAssetTagSetting> daTags =
                                tagSettings.Where(c => c.SAMPLING_MODE == 3).ToList(); //这些为Focas的

                            if (daTags.Any())
                            {
                                #region 采集实时信息

                                DAMachineRealTimeInfo realTimeInfo =
                                    ws_DA.UseService(
                                        s => s.GetDAMachineRealTimeInfos("ASSET_CODE = " + device.ASSET_CODE + ""))
                                    .FirstOrDefault();

                                if (realTimeInfo != null)
                                {
                                    //实况信息采集和录入
                                    realTimeInfo.STATUS           = int.Parse(deviceCommunication.SyncReadData("状态", out error));
                                    realTimeInfo.MAIN_PROG        = deviceCommunication.SyncReadData("程序号", out error);
                                    realTimeInfo.SPINDLE_OVERRIDE = deviceCommunication.SyncReadData("主轴负载", out error);
                                    realTimeInfo.SPINDLE_SPPED    = deviceCommunication.SyncReadData("主轴转速", out error);
                                    realTimeInfo.FEED_SPEED       = deviceCommunication.SyncReadData("进给速度", out error);
                                    realTimeInfo.FEED_RATE        = deviceCommunication.SyncReadData("进给倍率", out error);
                                    realTimeInfo.DA_TIME          = DateTime.Now;
                                    ws_DA.UseService(s => s.UpdateDAMachineRealTimeInfo(realTimeInfo)); //实时更新
                                }

                                #endregion

                                #region 采集产量信息

                                //设备产量记录采集
                                DAProductRecord productRecord =
                                    ws_DA.UseService(s => s.GetDAProductRecords($"ASSET_CODE = '{device.ASSET_CODE}'"))
                                    .OrderByDescending(c => c.END_TIME)
                                    .FirstOrDefault();     //获取生产记录

                                if (productRecord != null)
                                {
                                    int part_num = 0;
                                    int.TryParse(deviceCommunication.SyncReadData("工件数", out error), out part_num);
                                    int total_num = 0;
                                    int.TryParse(deviceCommunication.SyncReadData("工件总数", out error), out total_num);

                                    if (part_num == productRecord.PART_NUM)
                                    {
                                        if (productRecord.END_TIME <= DateTime.Now.AddMinutes(-5)) //每5分钟,更新数据库
                                        {
                                            productRecord.END_TIME = DateTime.Now;
                                            ws_DA.UseService(s => s.UpdateDAProductRecord(productRecord));
                                        }
                                    }
                                    else //不一致
                                    {
                                        productRecord.END_TIME = DateTime.Now;
                                        ws_DA.UseService(s => s.UpdateDAProductRecord(productRecord));

                                        //插入新的纪录
                                        DAProductRecord newProductRecord = new DAProductRecord();
                                        newProductRecord.ASSET_CODE = deviceCode;
                                        newProductRecord.PKNO       = Guid.NewGuid().ToString("N");
                                        newProductRecord.START_TIME = DateTime.Now;
                                        newProductRecord.END_TIME   = DateTime.Now.AddMilliseconds(100);
                                        newProductRecord.PART_NUM   = part_num;

                                        newProductRecord.TOTAL_PART_NUM = total_num;
                                        ws_DA.UseService(s => s.AddDAProductRecord(newProductRecord)); //新增当前值到数据库
                                    }
                                }

                                #endregion

                                #region 采集报警信息

                                string a = deviceCommunication.SyncReadData("报警信息", out error);

                                #endregion
                            }
                        }
                    }

                    readSpan = 0;
                }
                catch (Exception ex)
                {
                    Console.WriteLine("ThreadGetDAMonitor, 错误为:" + ex.Message);
                }

                System.Threading.Thread.Sleep(100);
            }
        }
Пример #17
0
        /// <summary>
        /// 读取设备线程
        /// </summary>
        private void TheadCheckData()
        {
            while (!CBaseData.AppClosing)
            {
                Thread.Sleep(200); //暂停
                try
                {
                    for (int i = 1; i <= 5; i++)
                    {
                        string basicAddress     = "[fuzhou]MES.JG.SB_" + i.ToString(); //基本地址
                        string qingqiuAddress   = ".Qing_qiu";                         //请求
                        string gongyiIDAddress  = ".Gongyi_ID";                        //工艺ID
                        string chanpinIDAddress = ".chanpin_ID";                       //产品ID
                        string querenAddress    = ".que_ren";                          //确认地址
                        querenAddress.Substring(0, 1);
                        FmsAssetTagSetting tag_qingqiu =
                            DeviceMonitor.GetTagSettings($"TAG_ADDRESS = '{basicAddress}{qingqiuAddress}'")
                            .FirstOrDefault();

                        if ((tag_qingqiu == null) || (tag_qingqiu.CUR_VALUE != "1"))
                        {
                            continue;
                        }

                        #region 触发请求

                        FmsAssetTagSetting tag_gongyi =
                            DeviceMonitor.GetTagSettings($"TAG_ADDRESS = '{basicAddress}{gongyiIDAddress}'")
                            .FirstOrDefault();     //工艺ID
                        if (tag_gongyi == null)
                        {
                            continue;
                        }

                        FmsAssetTagSetting tag_chanpin =
                            DeviceMonitor.GetTagSettings($"TAG_ADDRESS = '{basicAddress}{chanpinIDAddress}'")
                            .FirstOrDefault();     //产品ID
                        if (tag_chanpin == null)
                        {
                            continue;
                        }

                        FmsAssetTagSetting tag_queren =
                            DeviceMonitor.GetTagSettings($"TAG_ADDRESS = '{basicAddress}{querenAddress}'")
                            .FirstOrDefault();     //确认
                        if (tag_queren == null)
                        {
                            continue;
                        }

                        EmCheckResult checkResult = EmCheckResult.NoCheck; //无校验

                        #region 1.校验程序号

                        AmAssetMasterN checkDevice =
                            wsEAM.UseService(s => s.GetAmAssetMasterNs($"USE_FLAG = 1 AND ASSET_TYPE = '机床' AND ASSET_LABEL = '{i.ToString()}'"))
                            .FirstOrDefault();

                        if (checkDevice == null)
                        {
                            Console.WriteLine("...error:没有相应的机床设备.");
                            continue;
                        }

                        FmsAssetTagSetting tag_focas =
                            DeviceMonitor.GetTagSettings(
                                $"ASSET_CODE = '{checkDevice.ASSET_CODE}' AND TAG_ADDRESS = '程序号'")
                            .FirstOrDefault();     //获取程序号

                        if ((tag_focas != null) &&
                            (tag_focas.CUR_VALUE == tag_gongyi.CUR_VALUE)) //程序号相同
                        {
                            checkResult = EmCheckResult.Success;
                        }
                        else
                        {
                            checkResult = EmCheckResult.ProgramError;
                        }

                        #endregion

                        #region 2.校验产品

                        MesJobOrder curJob =
                            wsPlm.UseService(s => s.GetMesJobOrders($"RUN_STATE = 3 AND LINE_PKNO = '{CBaseData.CurLinePKNO}'")).FirstOrDefault(); //开工确认完成的

                        if (curJob != null)
                        {
                            RsItemMaster itemMaster =
                                wsRSM.UseService(s => s.GetRsItemMasterById(curJob.ITEM_PKNO));

                            if ((itemMaster != null) && (itemMaster.ITEM_ABV == tag_chanpin.CUR_VALUE))
                            {
                                if (checkResult == EmCheckResult.Success)  //程序校验成功
                                {
                                    checkResult = EmCheckResult.Success;
                                }
                            }
                            else
                            {
                                checkResult = EmCheckResult.ProductError;
                            }
                        }
                        else
                        {
                            checkResult = EmCheckResult.ProductError;
                        }

                        #endregion

                        #region 向PLC反馈

                        FmsAssetCommParam deviceComm =
                            ws.UseService(
                                s => s.GetFmsAssetCommParams(
                                    $"ASSET_CODE = '{tag_qingqiu.ASSET_CODE}' AND USE_FLAG = 1")).FirstOrDefault();  //反馈设备

                        string        error = "";
                        OperateResult ret   = DeviceHelper.WriteDataByAddress(deviceComm.ASSET_CODE,
                                                                              deviceComm.INTERFACE_TYPE, deviceComm.COMM_ADDRESS,
                                                                              tag_queren.PKNO, tag_queren.TAG_ADDRESS,
                                                                              ((int)checkResult).ToString()); //反馈

                        #endregion

                        if (!ret.IsSuccess)
                        {
                            Console.WriteLine("...error:向设备" + tag_queren.ASSET_CODE + "反馈确认结果失败。");
                        }

                        #endregion
                    }
                }
                catch (Exception ex)
                {
                    Console.WriteLine("...error:生产过程校验错误,错误为:" + ex.Message);
                }
            }
        }