Parcourir la source

fix:机外对刀仪数据功能开发

wang.sq@aliyun.com il y a 4 mois
Parent
commit
12bd37f7a2
2 fichiers modifiés avec 92 ajouts et 3 suppressions
  1. 88 2
      HEIDENHAIN/Form1.cs
  2. 4 1
      HEIDENHAIN/body/RequestBody.cs

+ 88 - 2
HEIDENHAIN/Form1.cs

@@ -16,6 +16,8 @@ using System.Threading.Tasks;
 using System.Windows.Forms;
 using HEIDENHAIN.body;
 using System.Net.NetworkInformation;
+using System.Diagnostics.PerformanceData;
+using Newtonsoft.Json.Linq;
 
 namespace HEIDENHAIN
 {
@@ -168,7 +170,15 @@ namespace HEIDENHAIN
                                 //取设备对应的状态
                                 m_ControlState = deviceList.Where(m => m.Key == hdhBody.MachineName).FirstOrDefault().Value;
                             }
-                           
+
+                            // ping 不通则位离线状态
+                            Ping pingSender = new Ping();
+                            PingReply reply = pingSender.Send(hdhBody.ServerUrl,500);
+                            if (reply.Status != IPStatus.Success)
+                            {
+                                m_ControlState = DNC_STATE.DNC_STATE_NOT_INITIALIZED;
+                            }
+
 
                             if (m_ControlState != null && m_ControlState.ToString() == "DNC_STATE_MACHINE_IS_AVAILABLE")
                             {
@@ -303,6 +313,7 @@ namespace HEIDENHAIN
                                     IJHDataEntry2List ToolLines = ToolTable.GetChildList();
                                     int ToolLinesCount = ToolLines.Count >= 50 ? 50 : ToolLines.Count;
                                     //int ToolLinesCount = ToolLines.Count;                                    
+                                    
                                     for (int i = 0; i < ToolLinesCount; i++)
                                     {
                                         ToolLine = ToolLines[i];
@@ -334,6 +345,79 @@ namespace HEIDENHAIN
                                     }
                                     //获取海德汉的刀具寿命信息
                                     responseBody.toolsInfo = JsonConvert.SerializeObject(toolsList.Distinct().ToList());
+
+                                } else if (hdhBody.Type == ActionTypeEnum.ReadAndWriteTool.ToString()) {
+
+                                    //机外对刀仪数据
+                                    JObject jsonObject = JObject.Parse(hdhBody.CutterData);
+
+
+                                    
+                                    JHDataAccess dataAccess = Machine.GetInterface(HeidenhainDNCLib.DNC_INTERFACE_OBJECT.DNC_INTERFACE_JHDATAACCESS);
+                                    dataAccess.SetAccessMode(DNC_ACCESS_MODE.DNC_ACCESS_MODE_TABLEDATAACCESS, "");
+
+                                    /*刀具表数据修改*/
+                                    //刀具表查询语句
+                                    string ToolColumnNamesAccessor = @"\TABLE\TOOL\T\"+ jsonObject.GetValue("cutterT");
+                                    //刀具表数据
+                                    IJHDataEntry2 ToolTable = dataAccess.GetDataEntry2(ToolColumnNamesAccessor, DNC_DATA_UNIT_SELECT.DNC_DATA_UNIT_SELECT_METRIC, false);
+                                    // 获取字段列表
+                                    IJHDataEntry2List ToolLines = ToolTable.GetChildList();
+
+
+                                    //设置刀具名
+                                    ToolLines[1].SetPropertyValue(DNC_DATAENTRY_PROPKIND.DNC_DATAENTRY_PROPKIND_DATA, jsonObject.GetValue("cutterName"), false);
+                                    //刀具长度
+                                    ToolLines[2].SetPropertyValue(DNC_DATAENTRY_PROPKIND.DNC_DATAENTRY_PROPKIND_DATA, jsonObject.GetValue("cutterZl"), false);
+                                    //刀具半径 
+                                    ToolLines[3].SetPropertyValue(DNC_DATAENTRY_PROPKIND.DNC_DATAENTRY_PROPKIND_DATA, jsonObject.GetValue("cutterXl"), false);
+                                    //刀具寿命
+                                    ToolLines[11].SetPropertyValue(DNC_DATAENTRY_PROPKIND.DNC_DATAENTRY_PROPKIND_DATA, jsonObject.GetValue("cutterTime2"), false);
+                                    //刀具类型
+                                    ToolLines[13].SetPropertyValue(DNC_DATAENTRY_PROPKIND.DNC_DATAENTRY_PROPKIND_DATA, jsonObject.GetValue("cutterTypDnc"), false);
+                                    //PLC状态
+                                    ToolLines[15].SetPropertyValue(DNC_DATAENTRY_PROPKIND.DNC_DATAENTRY_PROPKIND_DATA, jsonObject.GetValue("cutterPlcBit"), false);
+                                    //刀具使用寿命,不允许吧超过该值
+                                    ToolLines[45].SetPropertyValue(DNC_DATAENTRY_PROPKIND.DNC_DATAENTRY_PROPKIND_DATA, jsonObject.GetValue("cutterOverTime"), false);
+
+                                    /*车刀表数据设置更新*/
+                                    //车刀表数据查询语句
+                                    string CheDaoColumnNamesAccessor = @"\TABLE\TOOLTURN\T\" + jsonObject.GetValue("cutterT");
+                                    // 查询表数据
+                                    IJHDataEntry2 CheDaoTable = dataAccess.GetDataEntry2(CheDaoColumnNamesAccessor, DNC_DATA_UNIT_SELECT.DNC_DATA_UNIT_SELECT_METRIC, false);
+                                    // 获取字段列表
+                                    IJHDataEntry2List CheDaoLines = CheDaoTable.GetChildList();
+
+                                    // 设置刀具名
+                                    CheDaoLines[1].SetPropertyValue(DNC_DATAENTRY_PROPKIND.DNC_DATAENTRY_PROPKIND_DATA, jsonObject.GetValue("cutterName"), false);
+                                    // 设置刀具长度
+                                    CheDaoLines[2].SetPropertyValue(DNC_DATAENTRY_PROPKIND.DNC_DATAENTRY_PROPKIND_DATA, jsonObject.GetValue("cutterZl"), false);
+                                    // 车刀X方向半径
+                                    CheDaoLines[3].SetPropertyValue(DNC_DATAENTRY_PROPKIND.DNC_DATAENTRY_PROPKIND_DATA, jsonObject.GetValue("cutterXl"), false);
+                                    // 车刀方向
+                                    CheDaoLines[10].SetPropertyValue(DNC_DATAENTRY_PROPKIND.DNC_DATAENTRY_PROPKIND_DATA, jsonObject.GetValue("cutterTo"), false);
+                                    // 主轴定向角
+                                    CheDaoLines[11].SetPropertyValue(DNC_DATAENTRY_PROPKIND.DNC_DATAENTRY_PROPKIND_DATA, jsonObject.GetValue("cutterOri"), false);
+                                    // 设置车刀类型
+                                    CheDaoLines[17].SetPropertyValue(DNC_DATAENTRY_PROPKIND.DNC_DATAENTRY_PROPKIND_DATA, jsonObject.GetValue("cutterTypDncSub"), false);
+
+
+                                    /*刀位表数据设置更新*/
+                                    //刀位表数据查询语句
+                                    string DaoWeiColumnNamesAccessor = @"\TABLE\TOOL_P\P\" + jsonObject.GetValue("cutterP");
+                                    // 查询表数据
+                                    IJHDataEntry2 DaoWeiTable = dataAccess.GetDataEntry2(DaoWeiColumnNamesAccessor, DNC_DATA_UNIT_SELECT.DNC_DATA_UNIT_SELECT_METRIC, false);
+                                    // 获取字段列表
+                                    IJHDataEntry2List DaoWeiLines = DaoWeiTable.GetChildList();
+
+                                    // 设置刀号
+                                    DaoWeiLines[1].SetPropertyValue(DNC_DATAENTRY_PROPKIND.DNC_DATAENTRY_PROPKIND_DATA, jsonObject.GetValue("cutterT"), false);
+
+                                    // 设置刀具名
+                                    DaoWeiLines[2].SetPropertyValue(DNC_DATAENTRY_PROPKIND.DNC_DATAENTRY_PROPKIND_DATA, jsonObject.GetValue("cutterName"), false);
+
+                                    responseBody.msg = "数据设置成功";
+                                    responseBody.result = true;
                                 }
                             }
                             else
@@ -351,13 +435,15 @@ namespace HEIDENHAIN
                     {
                         YG.Log.Instance.WriteLogAdd($"海德汉响应异常--->>" + opcex.Message);
                         AddList(DateTime.Now.ToString(), "POST", request.Url.ToString(), opcex.Message);
+                        responseBody.result = false;
+                        responseBody.msg = opcex.Message;
                         //发生异常,清空数组,重新连接
                         deviceList = new Dictionary<string, DNC_STATE>();
                         machineList = new Dictionary<string, JHMachineInProcess>();
                     }
                     finally {
 
-                        AddList(DateTime.Now.ToString(), "POST", hdhBody.ServerUrl + ":响应数据:" + responseBody.toolsInfo, responseBody.result ? "OK" : "失败:" + m_ControlState != null ? m_ControlState.ToString() : "");
+                        AddList(DateTime.Now.ToString(), "POST", hdhBody.ServerUrl + ":响应数据:" + responseBody.toolsInfo, responseBody.result ? "OK,消息消费成功" : "失败,消息消费失败" + m_ControlState != null ? m_ControlState.ToString() : "");
 
                         response.ContentType = "application/json;charset=UTF-8";
                         response.ContentEncoding = Encoding.UTF8;

+ 4 - 1
HEIDENHAIN/body/RequestBody.cs

@@ -21,6 +21,8 @@ namespace IMCS.HeidenHain
 
         public string Type
         { get; set; }
+        public string CutterData
+        { get; set; }
     }
 
     /// <summary>
@@ -36,6 +38,7 @@ namespace IMCS.HeidenHain
         SelectNcProgram,
         StartNcProgram,
         DeleteNc,
-        ToolList
+        ToolList,
+        ReadAndWriteTool
     }
  }