Browse Source

增加取刀标识

wang.sq@aliyun.com 1 month ago
parent
commit
accafb3e23
3 changed files with 142 additions and 21 deletions
  1. 135 19
      HEIDENHAIN/Form1.cs
  2. 1 1
      HEIDENHAIN/Heidenhain.csproj
  3. 6 1
      HEIDENHAIN/body/RequestBody.cs

+ 135 - 19
HEIDENHAIN/Form1.cs

@@ -132,6 +132,8 @@ namespace HEIDENHAIN
                     ResponseBody responseBody = new ResponseBody();
                     string body = null;
                     RequestBody hdhBody =null;
+                    // 给机床写入数据的时候,判断写入到第几个
+                    String writePar = "";
                     try
                     {
                         Stream stream = context.Request.InputStream;
@@ -320,7 +322,7 @@ namespace HEIDENHAIN
                                     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\('1'-'50')";   // see Init()
-                                    string ToolColumnNamesAccessor = @"\TABLE\TOOL_P\T\('1'-'50')";
+                                    string ToolColumnNamesAccessor = @"\TABLE\TOOL_P\P\('1.1'-'1.50')";
                                     IJHDataEntry2 ToolTable = dataAccess.GetDataEntry2(ToolColumnNamesAccessor, DNC_DATA_UNIT_SELECT.DNC_DATA_UNIT_SELECT_METRIC, false);
                                     IJHDataEntry2List ToolLines = ToolTable.GetChildList();
                                     int ToolLinesCount = ToolLines.Count >= 50 ? 50 : ToolLines.Count;
@@ -376,86 +378,107 @@ namespace HEIDENHAIN
 
                                     /*刀具表数据修改*/
                                     //刀具表查询语句
+                                    writePar = "刀具表写入开始";
                                     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();
 
+                                    // 换刀标识移除
+                                    returnData.Add("doc", "");
+                                    writePar = "doc";
+                                    ToolLines[14].SetPropertyValue(DNC_DATAENTRY_PROPKIND.DNC_DATAENTRY_PROPKIND_DATA, "", false);
 
                                     //设置刀具名-对应机床表name
                                     var data1 = ToolLines[1].GetPropertyValue(DNC_DATAENTRY_PROPKIND.DNC_DATAENTRY_PROPKIND_DATA);
                                     returnData.Add("cutterName", data1);
-                                    ToolLines[1].SetPropertyValue(DNC_DATAENTRY_PROPKIND.DNC_DATAENTRY_PROPKIND_DATA, jsonObject.TryGetValue("cutterName", out JToken cutterName) ? jsonObject.GetValue("cutterName") : "" , false);
+                                    writePar = "cutterName";
+                                    ToolLines[1].SetPropertyValue(DNC_DATAENTRY_PROPKIND.DNC_DATAENTRY_PROPKIND_DATA, jsonObject.TryGetValue("cutterName", out JToken cutterName) ? jsonObject.GetValue("cutterName") : "", false);
 
                                     //刀具类型 - 对应机床TYP
                                     var data2 = ToolLines[13].GetPropertyValue(DNC_DATAENTRY_PROPKIND.DNC_DATAENTRY_PROPKIND_DATA);
                                     returnData.Add("cutterTypDnc", data2);
+                                    writePar = "cutterTypDnc";
                                     ToolLines[13].SetPropertyValue(DNC_DATAENTRY_PROPKIND.DNC_DATAENTRY_PROPKIND_DATA, jsonObject.TryGetValue("cutterTypDnc", out JToken cutterTypDnc) ? jsonObject.GetValue("cutterTypDnc") : "0", false);
 
                                     //刀具长度 - 对应机床 L
                                     var data3 = ToolLines[2].GetPropertyValue(DNC_DATAENTRY_PROPKIND.DNC_DATAENTRY_PROPKIND_DATA);
                                     returnData.Add("cutterZl", data3);
+                                    writePar = "cutterZl";
                                     ToolLines[2].SetPropertyValue(DNC_DATAENTRY_PROPKIND.DNC_DATAENTRY_PROPKIND_DATA, jsonObject.TryGetValue("cutterZl", out JToken cutterZl) ? jsonObject.GetValue("cutterZl") : "0", false);
 
                                     //刀具半径  - 对应机床R
                                     var data4 = ToolLines[3].GetPropertyValue(DNC_DATAENTRY_PROPKIND.DNC_DATAENTRY_PROPKIND_DATA);
                                     returnData.Add("cutterXl", data4);
-                                    ToolLines[3].SetPropertyValue(DNC_DATAENTRY_PROPKIND.DNC_DATAENTRY_PROPKIND_DATA, jsonObject.TryGetValue("cutterXl", out JToken cutterXl) ?  jsonObject.GetValue("cutterXl") : "0", false);
+                                    writePar = "cutterXl";
+                                    ToolLines[3].SetPropertyValue(DNC_DATAENTRY_PROPKIND.DNC_DATAENTRY_PROPKIND_DATA, jsonObject.TryGetValue("cutterXl", out JToken cutterXl) ? jsonObject.GetValue("cutterXl") : "0", false);
 
                                     //刀具寿命 - 对应机床time1
                                     var data5 = ToolLines[10].GetPropertyValue(DNC_DATAENTRY_PROPKIND.DNC_DATAENTRY_PROPKIND_DATA);
                                     returnData.Add("cutterTime1", data5);
+                                    writePar = "cutterTime1";
                                     ToolLines[10].SetPropertyValue(DNC_DATAENTRY_PROPKIND.DNC_DATAENTRY_PROPKIND_DATA, jsonObject.TryGetValue("cutterTime1", out JToken cutterTime1) ? jsonObject.GetValue("cutterTime1") : "0", false);
 
                                     //刀具寿命 - 对应机床time2
                                     var data6 = ToolLines[11].GetPropertyValue(DNC_DATAENTRY_PROPKIND.DNC_DATAENTRY_PROPKIND_DATA);
                                     returnData.Add("cutterTime2", data6);
+                                    writePar = "cutterTime2";
                                     ToolLines[11].SetPropertyValue(DNC_DATAENTRY_PROPKIND.DNC_DATAENTRY_PROPKIND_DATA, jsonObject.TryGetValue("cutterTime2", out JToken cutterTime2) ? jsonObject.GetValue("cutterTime2") : "0", false);
 
                                     //PLC状态 - 对应机床
                                     var data7 = ToolLines[15].GetPropertyValue(DNC_DATAENTRY_PROPKIND.DNC_DATAENTRY_PROPKIND_DATA);
                                     returnData.Add("cutterPlcBit", data7);
+                                    writePar = "cutterPlcBit";
                                     ToolLines[15].SetPropertyValue(DNC_DATAENTRY_PROPKIND.DNC_DATAENTRY_PROPKIND_DATA, jsonObject.TryGetValue("cutterPlcBit", out JToken cutterPlcBit) ? jsonObject.GetValue("cutterPlcBit") : "0", false);
 
                                     //刀具使用寿命,不允许超过该值 -- 对应机床
                                     var data8 = ToolLines[45].GetPropertyValue(DNC_DATAENTRY_PROPKIND.DNC_DATAENTRY_PROPKIND_DATA);
                                     returnData.Add("cutterOverTime", data8);
+                                    writePar = "cutterOverTime";
                                     ToolLines[45].SetPropertyValue(DNC_DATAENTRY_PROPKIND.DNC_DATAENTRY_PROPKIND_DATA, jsonObject.TryGetValue("cutterOverTime", out JToken cutterOverTime) ? jsonObject.GetValue("cutterOverTime") : "0", false);
 
                                     //在刀具轴方向上的刀齿长
                                     var data9 = ToolLines[16].GetPropertyValue(DNC_DATAENTRY_PROPKIND.DNC_DATAENTRY_PROPKIND_DATA);
                                     returnData.Add("lcuts", data9);
+                                    writePar = "lcuts";
                                     ToolLines[16].SetPropertyValue(DNC_DATAENTRY_PROPKIND.DNC_DATAENTRY_PROPKIND_DATA, jsonObject.TryGetValue("lcuts", out JToken lcuts) ? jsonObject.GetValue("lcuts") : "0", false);
 
                                     //准确定义刀具的切削刃正面宽度
                                     var data10 = ToolLines[46].GetPropertyValue(DNC_DATAENTRY_PROPKIND.DNC_DATAENTRY_PROPKIND_DATA);
                                     returnData.Add("rcuts", data10);
+                                    writePar = "rcuts";
                                     ToolLines[46].SetPropertyValue(DNC_DATAENTRY_PROPKIND.DNC_DATAENTRY_PROPKIND_DATA, jsonObject.TryGetValue("rcuts", out JToken rcuts) ? jsonObject.GetValue("rcuts") : "0", false);
 
                                     //准确定义刀具的刀具可用长度
                                     var data11 = ToolLines[17].GetPropertyValue(DNC_DATAENTRY_PROPKIND.DNC_DATAENTRY_PROPKIND_DATA);
                                     returnData.Add("lu", data11);
+                                    writePar = "lu";
                                     ToolLines[17].SetPropertyValue(DNC_DATAENTRY_PROPKIND.DNC_DATAENTRY_PROPKIND_DATA, jsonObject.TryGetValue("lu", out JToken lu) ? jsonObject.GetValue("lu") : "0", false);
 
                                     //准确定义刀具的刀颈半径
                                     var data12 = ToolLines[18].GetPropertyValue(DNC_DATAENTRY_PROPKIND.DNC_DATAENTRY_PROPKIND_DATA);
                                     returnData.Add("rn", data12);
+                                    writePar = "rn";
                                     ToolLines[18].SetPropertyValue(DNC_DATAENTRY_PROPKIND.DNC_DATAENTRY_PROPKIND_DATA, jsonObject.TryGetValue("rn", out JToken rn) ? jsonObject.GetValue("rn") : "0", false);
 
                                     //最大的切入角度
                                     var data13 = ToolLines[19].GetPropertyValue(DNC_DATAENTRY_PROPKIND.DNC_DATAENTRY_PROPKIND_DATA);
                                     returnData.Add("angle", data13);
+                                    writePar = "angle";
                                     ToolLines[19].SetPropertyValue(DNC_DATAENTRY_PROPKIND.DNC_DATAENTRY_PROPKIND_DATA, jsonObject.TryGetValue("angle", out JToken angle) ? jsonObject.GetValue("angle") : "0", false);
 
                                     var data14 = ToolLines[31].GetPropertyValue(DNC_DATAENTRY_PROPKIND.DNC_DATAENTRY_PROPKIND_DATA);
                                     returnData.Add("nmax", data14);
+                                    writePar = "nmax";
                                     ToolLines[31].SetPropertyValue(DNC_DATAENTRY_PROPKIND.DNC_DATAENTRY_PROPKIND_DATA, jsonObject.TryGetValue("nmax", out JToken nmax) ? jsonObject.GetValue("nmax") : "0", false);
 
 
                                     // 如果没有子车刀类型,不需要往车刀表添加
-                                    if (jsonObject.TryGetValue("cutterTypSubDnc", out JToken value))
+                                    if (!string.IsNullOrEmpty(jsonObject.GetValue("cutterTypSubDnc").ToString())
+                                        && jsonObject.TryGetValue("cutterTypSubDnc", out JToken value) && value != null)
                                     {
+                                        writePar = "车刀表写入开始";
                                         /*车刀表数据设置更新*/
                                         // 车刀表数据查询语句
                                         string CheDaoColumnNamesAccessor = @"\TABLE\TOOLTURN\T\" + jsonObject.GetValue("cutterT");
@@ -470,102 +493,137 @@ namespace HEIDENHAIN
                                         // 设置刀具在Z轴方向上的长度 - 对应机床 ZL
                                         var cdData1 = CheDaoLines[2].GetPropertyValue(DNC_DATAENTRY_PROPKIND.DNC_DATAENTRY_PROPKIND_DATA);
                                         returnData["cutterZl"] = cdData1;
+                                        writePar = "cutterZl";
                                         CheDaoLines[2].SetPropertyValue(DNC_DATAENTRY_PROPKIND.DNC_DATAENTRY_PROPKIND_DATA, jsonObject.TryGetValue("cutterZl", out JToken cutterZl_cd) ? jsonObject.GetValue("cutterZl") : "0", false);
 
                                         // 车刀在X轴方向上的长度  - 对应机床XL
                                         var cdData2 = CheDaoLines[3].GetPropertyValue(DNC_DATAENTRY_PROPKIND.DNC_DATAENTRY_PROPKIND_DATA);
                                         returnData["cutterXl"] = cdData2;
+                                        writePar = "cutterXl";
                                         CheDaoLines[3].SetPropertyValue(DNC_DATAENTRY_PROPKIND.DNC_DATAENTRY_PROPKIND_DATA, jsonObject.TryGetValue("cutterXl", out JToken cutterXl_cd) ? jsonObject.GetValue("cutterXl") : "0", false);
 
                                         // 车刀在y轴方向上的长度  - 对应机床yL
                                         var cdData3 = CheDaoLines[4].GetPropertyValue(DNC_DATAENTRY_PROPKIND.DNC_DATAENTRY_PROPKIND_DATA);
                                         returnData["cutterYl"] = cdData3;
+                                        writePar = "cutterYl";
                                         CheDaoLines[4].SetPropertyValue(DNC_DATAENTRY_PROPKIND.DNC_DATAENTRY_PROPKIND_DATA, jsonObject.TryGetValue("cutterYl", out JToken cutterYl_cd) ? jsonObject.GetValue("cutterYl") : "0", false);
 
                                         // 切削刃半径  - 对应机床rs
                                         var cdData4 = CheDaoLines[8].GetPropertyValue(DNC_DATAENTRY_PROPKIND.DNC_DATAENTRY_PROPKIND_DATA);
                                         returnData["cutterRs"] = cdData4;
+                                        writePar = "cutterRs";
                                         CheDaoLines[8].SetPropertyValue(DNC_DATAENTRY_PROPKIND.DNC_DATAENTRY_PROPKIND_DATA, jsonObject.TryGetValue("cutterRs", out JToken cutterRs_cd) ? jsonObject.GetValue("cutterRs") : "0", false);
 
                                         // 设置车刀子类型
                                         var cdData5 = CheDaoLines[18].GetPropertyValue(DNC_DATAENTRY_PROPKIND.DNC_DATAENTRY_PROPKIND_DATA);
                                         returnData["cutterTypSubDnc"] = cdData5;
+                                        writePar = "cutterTypSubDnc";
                                         CheDaoLines[18].SetPropertyValue(DNC_DATAENTRY_PROPKIND.DNC_DATAENTRY_PROPKIND_DATA, jsonObject.TryGetValue("cutterTypSubDnc", out JToken cutterTypSubDnc_cd) ? jsonObject.GetValue("cutterTypSubDnc") : "", false);
 
                                         // 车刀方向 TO 刀具定向?
                                         var cdData6 = CheDaoLines[10].GetPropertyValue(DNC_DATAENTRY_PROPKIND.DNC_DATAENTRY_PROPKIND_DATA);
                                         returnData["cutterTo"] = cdData6;
+                                        writePar = "cutterTo";
                                         CheDaoLines[10].SetPropertyValue(DNC_DATAENTRY_PROPKIND.DNC_DATAENTRY_PROPKIND_DATA, jsonObject.TryGetValue("cutterTo", out JToken cutterTo_cd) ? jsonObject.GetValue("cutterTo") : "0", false);
 
                                         //刀具长度1的差值
                                         var cdData7 = CheDaoLines[5].GetPropertyValue(DNC_DATAENTRY_PROPKIND.DNC_DATAENTRY_PROPKIND_DATA);
                                         returnData["dzl"] = cdData7;
+                                        writePar = "dzl";
                                         CheDaoLines[5].SetPropertyValue(DNC_DATAENTRY_PROPKIND.DNC_DATAENTRY_PROPKIND_DATA, jsonObject.TryGetValue("dzl", out JToken dzl_cd) ? jsonObject.GetValue("dzl") : "0", false);
 
                                         //刀具长度2的差值
                                         var cdData8 = CheDaoLines[6].GetPropertyValue(DNC_DATAENTRY_PROPKIND.DNC_DATAENTRY_PROPKIND_DATA);
                                         returnData["dxl"] = cdData8;
+                                        writePar = "dxl";
                                         CheDaoLines[6].SetPropertyValue(DNC_DATAENTRY_PROPKIND.DNC_DATAENTRY_PROPKIND_DATA, jsonObject.TryGetValue("dxl", out JToken dxl_cd) ? jsonObject.GetValue("dxl") : "0", false);
 
                                         //刀具长度3的差值
                                         var cdData9 = CheDaoLines[7].GetPropertyValue(DNC_DATAENTRY_PROPKIND.DNC_DATAENTRY_PROPKIND_DATA);
                                         returnData["dyl"] = cdData9;
+                                        writePar = "dyl";
                                         CheDaoLines[7].SetPropertyValue(DNC_DATAENTRY_PROPKIND.DNC_DATAENTRY_PROPKIND_DATA, jsonObject.TryGetValue("dyl", out JToken dyl_cd) ? jsonObject.GetValue("dyl") : "0", false);
 
                                         //刀具半径的差值
                                         var cdData10 = CheDaoLines[9].GetPropertyValue(DNC_DATAENTRY_PROPKIND.DNC_DATAENTRY_PROPKIND_DATA);
                                         returnData["drs"] = cdData10;
+                                        writePar = "drs";
                                         CheDaoLines[9].SetPropertyValue(DNC_DATAENTRY_PROPKIND.DNC_DATAENTRY_PROPKIND_DATA, jsonObject.TryGetValue("drs", out JToken drs_cd) ? jsonObject.GetValue("drs") : "0", false);
 
                                         //开槽刀宽度的差值
                                         var cdData11 = CheDaoLines[17].GetPropertyValue(DNC_DATAENTRY_PROPKIND.DNC_DATAENTRY_PROPKIND_DATA);
                                         returnData["dcw"] = cdData11;
+                                        writePar = "dcw";
                                         CheDaoLines[17].SetPropertyValue(DNC_DATAENTRY_PROPKIND.DNC_DATAENTRY_PROPKIND_DATA, jsonObject.TryGetValue("dcw", out JToken dcw_cd) ? jsonObject.GetValue("dcw") : "0", false);
 
                                         // 主轴定向角 0ri
                                         var cdData12 = CheDaoLines[11].GetPropertyValue(DNC_DATAENTRY_PROPKIND.DNC_DATAENTRY_PROPKIND_DATA);
                                         returnData["cutterOri"] = cdData12;
+                                        writePar = "cutterOri";
                                         CheDaoLines[11].SetPropertyValue(DNC_DATAENTRY_PROPKIND.DNC_DATAENTRY_PROPKIND_DATA, jsonObject.TryGetValue("cutterOri", out JToken cutterOri_cd) ? jsonObject.GetValue("cutterOri") : "0", false);
 
                                         // 下刀角
                                         var cdData13 = CheDaoLines[16].GetPropertyValue(DNC_DATAENTRY_PROPKIND.DNC_DATAENTRY_PROPKIND_DATA);
                                         returnData["tangle"] = cdData13;
-                                        CheDaoLines[16].SetPropertyValue(DNC_DATAENTRY_PROPKIND.DNC_DATAENTRY_PROPKIND_DATA, jsonObject.TryGetValue("tangle", out JToken tangle_cd) ? jsonObject.GetValue("tangle") : "0", false);
+                                        writePar = "tangle";
+                                        CheDaoLines[14].SetPropertyValue(DNC_DATAENTRY_PROPKIND.DNC_DATAENTRY_PROPKIND_DATA, jsonObject.TryGetValue("tangle", out JToken tangle_cd) ? jsonObject.GetValue("tangle") : "0", false);
 
                                         // 刀尖角
                                         var cdData14 = CheDaoLines[15].GetPropertyValue(DNC_DATAENTRY_PROPKIND.DNC_DATAENTRY_PROPKIND_DATA);
                                         returnData["pangle"] = cdData14;
-                                        CheDaoLines[15].SetPropertyValue(DNC_DATAENTRY_PROPKIND.DNC_DATAENTRY_PROPKIND_DATA, jsonObject.TryGetValue("pangle", out JToken pangle_cd) ? jsonObject.GetValue("pangle") : "0", false);
+                                        writePar = "pangle";
+                                        CheDaoLines[13].SetPropertyValue(DNC_DATAENTRY_PROPKIND.DNC_DATAENTRY_PROPKIND_DATA, jsonObject.TryGetValue("pangle", out JToken pangle_cd) ? jsonObject.GetValue("pangle") : "0", false);
 
                                         // 切槽刀的切削长度
                                         var cdData15 = CheDaoLines[17].GetPropertyValue(DNC_DATAENTRY_PROPKIND.DNC_DATAENTRY_PROPKIND_DATA);
                                         returnData["cutlength"] = cdData15;
-                                        CheDaoLines[17].SetPropertyValue(DNC_DATAENTRY_PROPKIND.DNC_DATAENTRY_PROPKIND_DATA, jsonObject.TryGetValue("cutlength", out JToken cutlength_cd) ? jsonObject.GetValue("cutlength") : "0", false);
+                                        writePar = "cutlength";
+                                        CheDaoLines[15].SetPropertyValue(DNC_DATAENTRY_PROPKIND.DNC_DATAENTRY_PROPKIND_DATA, jsonObject.TryGetValue("cutlength", out JToken cutlength_cd) ? jsonObject.GetValue("cutlength") : "0", false);
 
                                         // 切槽刀的切削长度
                                         var cdData16 = CheDaoLines[18].GetPropertyValue(DNC_DATAENTRY_PROPKIND.DNC_DATAENTRY_PROPKIND_DATA);
                                         returnData["cutwidth"] = cdData16;
-                                        CheDaoLines[18].SetPropertyValue(DNC_DATAENTRY_PROPKIND.DNC_DATAENTRY_PROPKIND_DATA, jsonObject.TryGetValue("cutwidth", out JToken cutwidth_cd) ? jsonObject.GetValue("cutwidth") : "0", false);
+                                        writePar = "cutwidth";
+                                        CheDaoLines[16].SetPropertyValue(DNC_DATAENTRY_PROPKIND.DNC_DATAENTRY_PROPKIND_DATA, jsonObject.TryGetValue("cutwidth", out JToken cutwidth_cd) ? jsonObject.GetValue("cutwidth") : "0", false);
 
                                     }
 
                                     /*刀位表数据设置更新*/
                                     //刀位表数据查询语句
-
+                                    writePar = "刀位表写入开始";
                                     string writeOrDel = jsonObject.GetValue("writeOrDel").ToString();
-                                    string DaoWeiColumnNamesAccessor = @"\TABLE\TOOL_P\P\" + jsonObject.GetValue("cutterP");
-                                    if (writeOrDel == "2") {
-                                        DaoWeiColumnNamesAccessor = @"\TABLE\TOOL_P\T\" + jsonObject.GetValue("cutterT");
+                                    string DaoWeiColumnNamesAccessor = "";
+
+                                    if (jsonObject.GetValue("cutterP").ToString().Contains("1."))
+                                    {
+                                        DaoWeiColumnNamesAccessor = @"\TABLE\TOOL_P\P\" + jsonObject.GetValue("cutterP");
                                     }
+                                    else
+                                    {
+
+                                        DaoWeiColumnNamesAccessor = @"\TABLE\TOOL_P\P\1." + 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.TryGetValue("cutterT", out JToken cutterT_dw) ? jsonObject.GetValue("cutterT") : "0", false);
                                     // 设置刀具名
-                                    DaoWeiLines[2].SetPropertyValue(DNC_DATAENTRY_PROPKIND.DNC_DATAENTRY_PROPKIND_DATA, jsonObject.TryGetValue("cutterT", out JToken cutterName_dw) ? jsonObject.GetValue("cutterName") : "", false);
+                                    writePar = "cutterName";
+                                    DaoWeiLines[2].SetPropertyValue(DNC_DATAENTRY_PROPKIND.DNC_DATAENTRY_PROPKIND_DATA, jsonObject.TryGetValue("cutterName", out JToken cutterName_dw) ? jsonObject.GetValue("cutterName") : "", false);
+
+                                    // 设置刀号
+                                    writePar = "cutterT";
+
+                                    if (writeOrDel == "2")
+                                    {
+                                        DaoWeiLines[1].SetPropertyValue(DNC_DATAENTRY_PROPKIND.DNC_DATAENTRY_PROPKIND_DATA, 1000, false);
+                                    }
+                                    else
+                                    {
+                                        DaoWeiLines[1].SetPropertyValue(DNC_DATAENTRY_PROPKIND.DNC_DATAENTRY_PROPKIND_DATA, jsonObject.TryGetValue("cutterT", out JToken cutterT_dw) ? jsonObject.GetValue("cutterT") : "0", false);
+                                    }
 
                                     responseBody.msg = "数据设置成功";
                                     responseBody.returnData = JsonConvert.SerializeObject(returnData);
@@ -629,10 +687,11 @@ namespace HEIDENHAIN
 
                                     if (!checkThrough)
                                     {
-                                        responseBody.msg = "数据校验不成功,异常字段"+ isreason;
+                                        responseBody.msg = "数据校验不成功,异常字段" + isreason;
                                         responseBody.result = false;
                                     }
-                                    else {
+                                    else
+                                    {
                                         responseBody.msg = "数据设置成功";
                                         responseBody.result = true;
                                     }
@@ -670,6 +729,60 @@ namespace HEIDENHAIN
                                     }
 
                                 }
+                                else if (hdhBody.Type == ActionTypeEnum.WriteTakeCutter.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  DaoWeiColumnNamesAccessor = @"\TABLE\TOOL_P\P\0.0";
+                                    // 查询表数据
+                                    IJHDataEntry2 DaoWeiTable = dataAccess.GetDataEntry2(DaoWeiColumnNamesAccessor, DNC_DATA_UNIT_SELECT.DNC_DATA_UNIT_SELECT_METRIC, false);
+                                    // 获取字段列表
+                                    IJHDataEntry2List DaoWeiLines = DaoWeiTable.GetChildList();
+                                    var tcode = DaoWeiLines[1].GetPropertyValue(DNC_DATAENTRY_PROPKIND.DNC_DATAENTRY_PROPKIND_DATA);
+
+                                    if (jsonObject.GetValue("cutterT") == tcode.ToString()) {
+                                        responseBody.msg = "数据设置失败,主轴正在使用此刀";
+                                        responseBody.result = false;
+                                    }
+                                    else {
+                                        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[14].SetPropertyValue(DNC_DATAENTRY_PROPKIND.DNC_DATAENTRY_PROPKIND_DATA, jsonObject.GetValue("doc"), false);
+
+                                        responseBody.msg = "数据设置成功";
+                                        responseBody.result = true;
+                                    }
+
+                                }
+                                else if (hdhBody.Type == ActionTypeEnum.BindingInfo.ToString()) { // 给机床写入绑定信息
+
+                                    //机外对刀仪数据
+                                    JObject jsonObject = JObject.Parse(hdhBody.BindInfo);
+
+                                    JHDataAccess dataAccess = Machine.GetInterface(HeidenhainDNCLib.DNC_INTERFACE_OBJECT.DNC_INTERFACE_JHDATAACCESS);
+                                    dataAccess.SetAccessMode(DNC_ACCESS_MODE.DNC_ACCESS_MODE_TABLEDATAACCESS, "");
+
+                                    // 需要判定,写入标识的刀柄号,是否再用
+                                    string DaoWeiColumnNamesAccessor = @"\TABLE\QR\NR\2";
+                                    // 查询表数据
+                                    IJHDataEntry2 DaoWeiTable = dataAccess.GetDataEntry2(DaoWeiColumnNamesAccessor, DNC_DATA_UNIT_SELECT.DNC_DATA_UNIT_SELECT_METRIC, false);
+                                    // 获取字段列表
+                                    IJHDataEntry2List DaoWeiLines = DaoWeiTable.GetChildList();
+                                    DaoWeiLines[2].SetPropertyValue(DNC_DATAENTRY_PROPKIND.DNC_DATAENTRY_PROPKIND_DATA, jsonObject.GetValue("uniqueCode"), false);
+                                    DaoWeiLines[3].SetPropertyValue(DNC_DATAENTRY_PROPKIND.DNC_DATAENTRY_PROPKIND_DATA, jsonObject.GetValue("trayCode"), false);
+
+                                    responseBody.msg = "数据设置成功";
+                                    responseBody.result = true;
+                                }
+
                             }
                             else
                             {
@@ -685,9 +798,12 @@ namespace HEIDENHAIN
                     catch (Exception opcex)
                     {
                         YG.Log.Instance.WriteLogAdd($"海德汉响应异常--->>" + opcex.Message);
-                        AddList(DateTime.Now.ToString(), "POST", request.Url.ToString(), "响应异常:" + opcex.Message);
+                        if (writePar.Length > 0) {
+                            writePar = "写入数据报错位置:" + writePar;
+                        }
+                        AddList(DateTime.Now.ToString(), "POST", request.Url.ToString(), "响应异常:" + opcex.Message+ writePar);
                         responseBody.result = false;
-                        responseBody.msg = opcex.Message;
+                        responseBody.msg = opcex.Message + writePar;
                         //发生异常,清空数组,重新连接
                         deviceList = new Dictionary<string, DNC_STATE>();
                         machineList = new Dictionary<string, JHMachineInProcess>();

+ 1 - 1
HEIDENHAIN/Heidenhain.csproj

@@ -12,6 +12,7 @@
     <FileAlignment>512</FileAlignment>
     <AutoGenerateBindingRedirects>true</AutoGenerateBindingRedirects>
     <Deterministic>true</Deterministic>
+    <IsWebBootstrapper>false</IsWebBootstrapper>
     <PublishUrl>publish\</PublishUrl>
     <Install>true</Install>
     <InstallFrom>Disk</InstallFrom>
@@ -24,7 +25,6 @@
     <MapFileExtensions>true</MapFileExtensions>
     <ApplicationRevision>0</ApplicationRevision>
     <ApplicationVersion>1.0.0.%2a</ApplicationVersion>
-    <IsWebBootstrapper>false</IsWebBootstrapper>
     <UseApplicationTrust>false</UseApplicationTrust>
     <BootstrapperEnabled>true</BootstrapperEnabled>
   </PropertyGroup>

+ 6 - 1
HEIDENHAIN/body/RequestBody.cs

@@ -25,6 +25,9 @@ namespace IMCS.HeidenHain
         { get; set; }
         public string DeviationValue
         { get; set; }
+        public string BindInfo
+        { get; set; }
+        
     }
 
     /// <summary>
@@ -43,6 +46,8 @@ namespace IMCS.HeidenHain
         ToolList,
         ReadAndWriteTool,
         ReadProbeData,
-        WriteDeviationValue
+        WriteDeviationValue,
+        WriteTakeCutter,
+        BindingInfo
     }
  }