diff --git a/App/Google.Protobuf.dll b/App/Google.Protobuf.dll
deleted file mode 100644
index d5a89ae8..00000000
Binary files a/App/Google.Protobuf.dll and /dev/null differ
diff --git a/App/Grpc.AspNetCore.Server.ClientFactory.dll b/App/Grpc.AspNetCore.Server.ClientFactory.dll
deleted file mode 100644
index 00809852..00000000
Binary files a/App/Grpc.AspNetCore.Server.ClientFactory.dll and /dev/null differ
diff --git a/App/Grpc.AspNetCore.Server.dll b/App/Grpc.AspNetCore.Server.dll
deleted file mode 100644
index b5d20bdd..00000000
Binary files a/App/Grpc.AspNetCore.Server.dll and /dev/null differ
diff --git a/App/Grpc.Core.Api.dll b/App/Grpc.Core.Api.dll
deleted file mode 100644
index a4b2b04e..00000000
Binary files a/App/Grpc.Core.Api.dll and /dev/null differ
diff --git a/App/Grpc.Net.Client.dll b/App/Grpc.Net.Client.dll
deleted file mode 100644
index 7cc8adce..00000000
Binary files a/App/Grpc.Net.Client.dll and /dev/null differ
diff --git a/App/Grpc.Net.ClientFactory.dll b/App/Grpc.Net.ClientFactory.dll
deleted file mode 100644
index 7ebc146f..00000000
Binary files a/App/Grpc.Net.ClientFactory.dll and /dev/null differ
diff --git a/App/Grpc.Net.Common.dll b/App/Grpc.Net.Common.dll
deleted file mode 100644
index 17233614..00000000
Binary files a/App/Grpc.Net.Common.dll and /dev/null differ
diff --git a/App/Hi.WpfPlus.dll b/App/Hi.WpfPlus.dll
index 73be70f0..28152ce6 100644
Binary files a/App/Hi.WpfPlus.dll and b/App/Hi.WpfPlus.dll differ
diff --git a/App/HiCbtr.dll b/App/HiCbtr.dll
index 1d1bd008..8c7ce634 100644
Binary files a/App/HiCbtr.dll and b/App/HiCbtr.dll differ
diff --git a/App/HiDisp.dll b/App/HiDisp.dll
index a443cfc5..8820e0c0 100644
Binary files a/App/HiDisp.dll and b/App/HiDisp.dll differ
diff --git a/App/HiGeom.dll b/App/HiGeom.dll
index 58f3a96f..af6baca1 100644
Binary files a/App/HiGeom.dll and b/App/HiGeom.dll differ
diff --git a/App/HiLicense.dll b/App/HiLicense.dll
index 8e39d5db..58612a26 100644
Binary files a/App/HiLicense.dll and b/App/HiLicense.dll differ
diff --git a/App/HiMech.dll b/App/HiMech.dll
index 29b1f131..d924cb78 100644
Binary files a/App/HiMech.dll and b/App/HiMech.dll differ
diff --git a/App/HiNC-2025-win-desktop.deps.json b/App/HiNC-2025-win-desktop.deps.json
index 787b8e56..36d297f1 100644
--- a/App/HiNC-2025-win-desktop.deps.json
+++ b/App/HiNC-2025-win-desktop.deps.json
@@ -11,9 +11,9 @@
"dependencies": {
"AvalonEdit": "6.3.0.90",
"FontAwesome.Sharp": "6.3.0",
- "Hi.WpfPlus": "3.1.140",
- "HiNc": "3.1.173",
- "HiNc-Resource": "3.1.55",
+ "Hi.WpfPlus": "3.1.142",
+ "HiNc": "3.1.174",
+ "HiNc-Resource": "3.1.57",
"Serilog.Extensions.Hosting": "10.0.0",
"Serilog.Sinks.Console": "6.1.1",
"Serilog.Sinks.File": "7.0.0",
@@ -1598,114 +1598,36 @@
}
}
},
- "Google.Protobuf/3.28.3": {
- "runtime": {
- "lib/net5.0/Google.Protobuf.dll": {
- "assemblyVersion": "3.28.3.0",
- "fileVersion": "3.28.3.0"
- }
- }
- },
- "Grpc.AspNetCore/2.66.0": {
+ "Hi.WpfPlus/3.1.142": {
"dependencies": {
- "Google.Protobuf": "3.28.3",
- "Grpc.AspNetCore.Server.ClientFactory": "2.66.0"
- }
- },
- "Grpc.AspNetCore.Server/2.66.0": {
- "dependencies": {
- "Grpc.Net.Common": "2.66.0"
- },
- "runtime": {
- "lib/net9.0/Grpc.AspNetCore.Server.dll": {
- "assemblyVersion": "2.0.0.0",
- "fileVersion": "2.66.0.0"
- }
- }
- },
- "Grpc.AspNetCore.Server.ClientFactory/2.66.0": {
- "dependencies": {
- "Grpc.AspNetCore.Server": "2.66.0",
- "Grpc.Net.ClientFactory": "2.66.0"
- },
- "runtime": {
- "lib/net9.0/Grpc.AspNetCore.Server.ClientFactory.dll": {
- "assemblyVersion": "2.0.0.0",
- "fileVersion": "2.66.0.0"
- }
- }
- },
- "Grpc.Core.Api/2.66.0": {
- "runtime": {
- "lib/netstandard2.1/Grpc.Core.Api.dll": {
- "assemblyVersion": "2.0.0.0",
- "fileVersion": "2.66.0.0"
- }
- }
- },
- "Grpc.Net.Client/2.66.0": {
- "dependencies": {
- "Grpc.Net.Common": "2.66.0"
- },
- "runtime": {
- "lib/net8.0/Grpc.Net.Client.dll": {
- "assemblyVersion": "2.0.0.0",
- "fileVersion": "2.66.0.0"
- }
- }
- },
- "Grpc.Net.ClientFactory/2.66.0": {
- "dependencies": {
- "Grpc.Net.Client": "2.66.0"
- },
- "runtime": {
- "lib/net8.0/Grpc.Net.ClientFactory.dll": {
- "assemblyVersion": "2.0.0.0",
- "fileVersion": "2.66.0.0"
- }
- }
- },
- "Grpc.Net.Common/2.66.0": {
- "dependencies": {
- "Grpc.Core.Api": "2.66.0"
- },
- "runtime": {
- "lib/net8.0/Grpc.Net.Common.dll": {
- "assemblyVersion": "2.0.0.0",
- "fileVersion": "2.66.0.0"
- }
- }
- },
- "Hi.WpfPlus/3.1.140": {
- "dependencies": {
- "HiDisp": "3.1.146"
+ "HiDisp": "3.1.148"
},
"runtime": {
"lib/net10.0-windows7.0/Hi.WpfPlus.dll": {
- "assemblyVersion": "3.1.140.0",
- "fileVersion": "3.1.140.0"
+ "assemblyVersion": "3.1.142.0",
+ "fileVersion": "3.1.142.0"
}
}
},
- "HiCbtr/3.1.143": {
+ "HiCbtr/3.1.145": {
"dependencies": {
- "HiDisp": "3.1.146"
+ "HiDisp": "3.1.148"
},
"runtime": {
"lib/net10.0/HiCbtr.dll": {
- "assemblyVersion": "3.1.143.0",
- "fileVersion": "3.1.143.0"
+ "assemblyVersion": "3.1.145.0",
+ "fileVersion": "3.1.145.0"
}
}
},
- "HiDisp/3.1.146": {
+ "HiDisp/3.1.148": {
"dependencies": {
- "HiGeom": "3.1.135"
+ "HiGeom": "3.1.136"
},
"runtime": {
"lib/net10.0/HiDisp.dll": {
- "assemblyVersion": "3.1.146.0",
- "fileVersion": "3.1.146.0"
+ "assemblyVersion": "3.1.148.0",
+ "fileVersion": "3.1.148.0"
}
},
"native": {
@@ -1723,18 +1645,15 @@
}
}
},
- "HiGeom/3.1.135": {
+ "HiGeom/3.1.136": {
"dependencies": {
- "Google.Protobuf": "3.28.3",
- "Grpc.AspNetCore": "2.66.0",
- "Grpc.Net.Client": "2.66.0",
"MathNet.Numerics": "5.0.0",
"Microsoft.CodeAnalysis.Scripting.Common": "5.3.0"
},
"runtime": {
"lib/net10.0/HiGeom.dll": {
- "assemblyVersion": "3.1.135.0",
- "fileVersion": "3.1.135.0"
+ "assemblyVersion": "3.1.136.0",
+ "fileVersion": "3.1.136.0"
}
},
"resources": {
@@ -1746,27 +1665,27 @@
}
}
},
- "HiLicense/3.1.136": {
+ "HiLicense/3.1.138": {
"dependencies": {
- "HiGeom": "3.1.135"
+ "HiGeom": "3.1.136"
},
"runtime": {
"lib/net10.0/HiLicense.dll": {
- "assemblyVersion": "3.1.136.0",
- "fileVersion": "3.1.136.0"
+ "assemblyVersion": "3.1.138.0",
+ "fileVersion": "3.1.138.0"
}
}
},
- "HiMech/3.1.154": {
+ "HiMech/3.1.156": {
"dependencies": {
"CommandLineParser": "2.9.1",
- "HiCbtr": "3.1.143",
+ "HiCbtr": "3.1.145",
"Microsoft.CodeAnalysis.CSharp.Scripting": "5.3.0"
},
"runtime": {
"lib/net10.0/HiMech.dll": {
- "assemblyVersion": "3.1.154.0",
- "fileVersion": "3.1.154.0"
+ "assemblyVersion": "3.1.156.0",
+ "fileVersion": "3.1.156.0"
}
},
"resources": {
@@ -1781,21 +1700,18 @@
}
}
},
- "HiNc/3.1.173": {
+ "HiNc/3.1.174": {
"dependencies": {
"Dapper": "2.1.35",
- "Google.Protobuf": "3.28.3",
- "Grpc.AspNetCore": "2.66.0",
- "Grpc.Net.Client": "2.66.0",
- "HiLicense": "3.1.136",
- "HiMech": "3.1.154",
- "HiUniNc": "3.1.150",
+ "HiLicense": "3.1.138",
+ "HiMech": "3.1.156",
+ "HiUniNc": "3.1.151",
"Microsoft.Data.Sqlite": "9.0.0"
},
"runtime": {
"lib/net10.0/HiNc.dll": {
- "assemblyVersion": "3.1.173.0",
- "fileVersion": "3.1.173.0"
+ "assemblyVersion": "3.1.174.0",
+ "fileVersion": "3.1.174.0"
}
},
"resources": {
@@ -1807,22 +1723,22 @@
}
}
},
- "HiNc-Resource/3.1.55": {
+ "HiNc-Resource/3.1.57": {
"runtime": {
"lib/net10.0/HiNc-Resource.dll": {
- "assemblyVersion": "3.1.55.0",
- "fileVersion": "3.1.55.0"
+ "assemblyVersion": "3.1.57.0",
+ "fileVersion": "3.1.57.0"
}
}
},
- "HiUniNc/3.1.150": {
+ "HiUniNc/3.1.151": {
"dependencies": {
- "HiMech": "3.1.154"
+ "HiMech": "3.1.156"
},
"runtime": {
"lib/net10.0/HiUniNc.dll": {
- "assemblyVersion": "3.1.150.0",
- "fileVersion": "3.1.150.0"
+ "assemblyVersion": "3.1.151.0",
+ "fileVersion": "3.1.151.0"
}
}
},
@@ -2201,124 +2117,68 @@
"path": "fontawesome.sharp/6.3.0",
"hashPath": "fontawesome.sharp.6.3.0.nupkg.sha512"
},
- "Google.Protobuf/3.28.3": {
+ "Hi.WpfPlus/3.1.142": {
"type": "package",
"serviceable": true,
- "sha512": "sha512-OewySX3aQCdKfMJsj2DzBMXQJPI+lm0CBzamU9ViFu3CU9tXYrQWqJ1CZ+/UWtkwOjUeIzbXmoOjRc7B8pbMrA==",
- "path": "google.protobuf/3.28.3",
- "hashPath": "google.protobuf.3.28.3.nupkg.sha512"
+ "sha512": "sha512-I1O7HrANDPwLaB+zfRXs9GflyFNxtiJ2zGNKDLHAvF5Mo+lFUtU5rxYCxq/fRZJbcjv2Crrc8mlJ8namoIcHUQ==",
+ "path": "hi.wpfplus/3.1.142",
+ "hashPath": "hi.wpfplus.3.1.142.nupkg.sha512"
},
- "Grpc.AspNetCore/2.66.0": {
+ "HiCbtr/3.1.145": {
"type": "package",
"serviceable": true,
- "sha512": "sha512-b4V5V/yiCeK94wiQReUyHPB/Xj/fCaDWhlcFnYzSCm3pQtyADAN9t3g7V631PzLjFZQnPn9iIN3M6BHnVx3nfA==",
- "path": "grpc.aspnetcore/2.66.0",
- "hashPath": "grpc.aspnetcore.2.66.0.nupkg.sha512"
+ "sha512": "sha512-Ab/TIbJYrnQnuWpu1N27nTf+f5kGEiBAh86o1hVLUT4xVYQDxpnTSJ9m2M3iulDtcWhYWElonGMGbAu4yyr/gQ==",
+ "path": "hicbtr/3.1.145",
+ "hashPath": "hicbtr.3.1.145.nupkg.sha512"
},
- "Grpc.AspNetCore.Server/2.66.0": {
+ "HiDisp/3.1.148": {
"type": "package",
"serviceable": true,
- "sha512": "sha512-SogFEs8bLvcRtEWMdueOJeMxiaLryvyivWtmBwz/vLtS5xlN4Zrfv+npMbn1PS4iT99AqBY+R+bRxdIFfvfeIA==",
- "path": "grpc.aspnetcore.server/2.66.0",
- "hashPath": "grpc.aspnetcore.server.2.66.0.nupkg.sha512"
+ "sha512": "sha512-hQzKxONIuGYUWKT7/tc9Pjye440gdWIYQ5eKoklFVCc6r3IN40UST18T98y92sq158cypuQ57cN2X/4iE7o6zw==",
+ "path": "hidisp/3.1.148",
+ "hashPath": "hidisp.3.1.148.nupkg.sha512"
},
- "Grpc.AspNetCore.Server.ClientFactory/2.66.0": {
+ "HiGeom/3.1.136": {
"type": "package",
"serviceable": true,
- "sha512": "sha512-glLCZ5K8iBSzzd2eIKjMBYBApygvwJqGJ87FBJrHL4bSrnBTywCUFfLj2EckiPjvvW6SNwLtapwdY4Sj0WwWQg==",
- "path": "grpc.aspnetcore.server.clientfactory/2.66.0",
- "hashPath": "grpc.aspnetcore.server.clientfactory.2.66.0.nupkg.sha512"
+ "sha512": "sha512-QisKmDbZ2SoEa4clTi397VB+FlbmuUR+vW5oqdMO5HU3XDTqWZ2y3XUt99K+zSoB7ngtHAXAVkRJQDvOsS9ZaA==",
+ "path": "higeom/3.1.136",
+ "hashPath": "higeom.3.1.136.nupkg.sha512"
},
- "Grpc.Core.Api/2.66.0": {
+ "HiLicense/3.1.138": {
"type": "package",
"serviceable": true,
- "sha512": "sha512-HsjsQVAHe4hqP4t4rpUnmq+MZvPdyrlPsWF4T5fbMvyP3o/lMV+KVJfDlaNH8+v0aGQTVT3EsDFufbhaWb52cw==",
- "path": "grpc.core.api/2.66.0",
- "hashPath": "grpc.core.api.2.66.0.nupkg.sha512"
+ "sha512": "sha512-zsReBAVZ7Pjh9ZxEvZkLzvBAKWLaw2rNb5uIMaudrb/sdJwcFvATeAe/8BGn3rTASjrpXBB9wFFTadtfpf5t8w==",
+ "path": "hilicense/3.1.138",
+ "hashPath": "hilicense.3.1.138.nupkg.sha512"
},
- "Grpc.Net.Client/2.66.0": {
+ "HiMech/3.1.156": {
"type": "package",
"serviceable": true,
- "sha512": "sha512-GwkSsssXFgN9+M2U+UQWdErf61sn1iqgP+2NRBlDXATcP9vlxda0wySxd/eIL8U522+SnyFNUXlvQ5tAzGk9cA==",
- "path": "grpc.net.client/2.66.0",
- "hashPath": "grpc.net.client.2.66.0.nupkg.sha512"
+ "sha512": "sha512-76pYizkB6Tzr9RkHiiu36eUejIEhmwy/37GoFGR4UFJY3zLJVBtlku1BYq4FsRCG/HJOtAzGCxweqix1jkmGbQ==",
+ "path": "himech/3.1.156",
+ "hashPath": "himech.3.1.156.nupkg.sha512"
},
- "Grpc.Net.ClientFactory/2.66.0": {
+ "HiNc/3.1.174": {
"type": "package",
"serviceable": true,
- "sha512": "sha512-I6HUbtcqb24OiQlbvxpBLruCxQ8wrmJ5tUtU96QK7nqyerrMLeqLDDbhotznPAnZtR8x1bJvck/Xt4fgvVo92Q==",
- "path": "grpc.net.clientfactory/2.66.0",
- "hashPath": "grpc.net.clientfactory.2.66.0.nupkg.sha512"
+ "sha512": "sha512-BUs6pZ4aDLArmwSc9JP/cgUf+JuRj4/d8ZSUbccV+t8rDuZ7vtNSWtPPiPKEmPJDIRR2OHp5Jy0odzfpP8KaXA==",
+ "path": "hinc/3.1.174",
+ "hashPath": "hinc.3.1.174.nupkg.sha512"
},
- "Grpc.Net.Common/2.66.0": {
+ "HiNc-Resource/3.1.57": {
"type": "package",
"serviceable": true,
- "sha512": "sha512-YJpQpIvpo0HKlsG6SHwaieyji08qfv0DdEDIewCAA0egQY08637sHOj1netLGUhzBEsCqlGC3e92TZ2uqhxnvw==",
- "path": "grpc.net.common/2.66.0",
- "hashPath": "grpc.net.common.2.66.0.nupkg.sha512"
+ "sha512": "sha512-lYgRxhqeGNycGkhoRRg0TlF6xwXc0D26tDilhoiNkd34/U5Ev4LhnjhKoDSij9xWxi8ZyOX7vvLfdjPK56d26Q==",
+ "path": "hinc-resource/3.1.57",
+ "hashPath": "hinc-resource.3.1.57.nupkg.sha512"
},
- "Hi.WpfPlus/3.1.140": {
+ "HiUniNc/3.1.151": {
"type": "package",
"serviceable": true,
- "sha512": "sha512-SkgBcnsPESMlOaauLdV0uLnPysvhI2zrIzjQqc1uuegy4r0X5yqmAPVwFdfkNc3YoV17qIOTGir29Ktx45aimg==",
- "path": "hi.wpfplus/3.1.140",
- "hashPath": "hi.wpfplus.3.1.140.nupkg.sha512"
- },
- "HiCbtr/3.1.143": {
- "type": "package",
- "serviceable": true,
- "sha512": "sha512-SIpuwSOy1WB6cv25Hs7Zm5/sfhkhv3Im6se80SpUXWa0p4OqSYnUDjU2d3lOQyXgi505v1ba10g9iMXVyZO+CA==",
- "path": "hicbtr/3.1.143",
- "hashPath": "hicbtr.3.1.143.nupkg.sha512"
- },
- "HiDisp/3.1.146": {
- "type": "package",
- "serviceable": true,
- "sha512": "sha512-Q9OZZBS7FxLXLXO1Ov5O6hewPjqMsxUKWAGM4ckxupqwJt+4jHYgoOtB3UfK1cWOd9uEP+TaTFOmlY4tTEzZDg==",
- "path": "hidisp/3.1.146",
- "hashPath": "hidisp.3.1.146.nupkg.sha512"
- },
- "HiGeom/3.1.135": {
- "type": "package",
- "serviceable": true,
- "sha512": "sha512-DWyxMTuXlK3MiB+XaSBdXS1jfT4XhVsoFXE30LJybBjhjBlbgPxWocruXu8mHcU0yVHzM2fN0wuDipY5KEUQWA==",
- "path": "higeom/3.1.135",
- "hashPath": "higeom.3.1.135.nupkg.sha512"
- },
- "HiLicense/3.1.136": {
- "type": "package",
- "serviceable": true,
- "sha512": "sha512-0HH1O8vm/N3je+nxh+qLmswl0P83htSmm2NH8yrazgiEWwZ9+t+7JzBEC9xT9esrjs9zakldesAn9fYZo0l+RA==",
- "path": "hilicense/3.1.136",
- "hashPath": "hilicense.3.1.136.nupkg.sha512"
- },
- "HiMech/3.1.154": {
- "type": "package",
- "serviceable": true,
- "sha512": "sha512-7grSGnaxe11EAOkLg+cmRSPO1t7+qS8+NJouqbsfA22WmWPOqIPEYmaiEuRC6lCfn0iBAX+rh9F8OQYjPDDVDA==",
- "path": "himech/3.1.154",
- "hashPath": "himech.3.1.154.nupkg.sha512"
- },
- "HiNc/3.1.173": {
- "type": "package",
- "serviceable": true,
- "sha512": "sha512-pGoDJaOdBCKU6DQTEJVnKmvzMSGQ3v6BApHiYzwDMkQdV2y5KlFk3MZIgLRBWM6+nI4UiUFtFdjq8LUi0Yof1A==",
- "path": "hinc/3.1.173",
- "hashPath": "hinc.3.1.173.nupkg.sha512"
- },
- "HiNc-Resource/3.1.55": {
- "type": "package",
- "serviceable": true,
- "sha512": "sha512-X16YILf69BaRN3PiJKwKQoiRv58gpMezTz9wuzUsdFkl6N0w9Vwa1A5aAUa6VaALB+1RJ3J5RgRriJIvayHnjQ==",
- "path": "hinc-resource/3.1.55",
- "hashPath": "hinc-resource.3.1.55.nupkg.sha512"
- },
- "HiUniNc/3.1.150": {
- "type": "package",
- "serviceable": true,
- "sha512": "sha512-llavC4EZKaS421BsnfX/8vNDq2TZlpsCXVDec5wLcUPN06qQ8b0A6Jd09/fWvi3zwjNkQn4kdSXeKOjDUJuSNg==",
- "path": "hiuninc/3.1.150",
- "hashPath": "hiuninc.3.1.150.nupkg.sha512"
+ "sha512": "sha512-8Acx1Tue9MxUpo9wOK9TrjHOhFlulaXTtPzcpH+LrZg3OduJKxd/pM9ZuOprgXrpzaxdn3A84u2CM8yw9DMzIA==",
+ "path": "hiuninc/3.1.151",
+ "hashPath": "hiuninc.3.1.151.nupkg.sha512"
},
"MathNet.Numerics/5.0.0": {
"type": "package",
diff --git a/App/HiNC-2025-win-desktop.dll b/App/HiNC-2025-win-desktop.dll
index dfcab1c3..976480bc 100644
Binary files a/App/HiNC-2025-win-desktop.dll and b/App/HiNC-2025-win-desktop.dll differ
diff --git a/App/HiNC-2025-win-desktop.pdb b/App/HiNC-2025-win-desktop.pdb
index 70d3b241..21a2b752 100644
Binary files a/App/HiNC-2025-win-desktop.pdb and b/App/HiNC-2025-win-desktop.pdb differ
diff --git a/App/HiNc-Resource.dll b/App/HiNc-Resource.dll
index 763cb63f..04773764 100644
Binary files a/App/HiNc-Resource.dll and b/App/HiNc-Resource.dll differ
diff --git a/App/HiNc.dll b/App/HiNc.dll
index 92ce0de9..7c57f72a 100644
Binary files a/App/HiNc.dll and b/App/HiNc.dll differ
diff --git a/App/HiUniNc.dll b/App/HiUniNc.dll
index 8b874454..c3a525c5 100644
Binary files a/App/HiUniNc.dll and b/App/HiUniNc.dll differ
diff --git a/App/en/HiGeom.resources.dll b/App/en/HiGeom.resources.dll
index d1362866..b178adfb 100644
Binary files a/App/en/HiGeom.resources.dll and b/App/en/HiGeom.resources.dll differ
diff --git a/App/en/HiMech.resources.dll b/App/en/HiMech.resources.dll
index 727f1328..753a106e 100644
Binary files a/App/en/HiMech.resources.dll and b/App/en/HiMech.resources.dll differ
diff --git a/App/wwwroot/HiAPI-docsite/api/Hi.Common.CsvUtils.CsvInputKit.html b/App/wwwroot/HiAPI-docsite/api/Hi.Common.CsvUtils.CsvInputKit.html
index e9770a75..b22b7033 100644
--- a/App/wwwroot/HiAPI-docsite/api/Hi.Common.CsvUtils.CsvInputKit.html
+++ b/App/wwwroot/HiAPI-docsite/api/Hi.Common.CsvUtils.CsvInputKit.html
@@ -309,6 +309,52 @@ Class CsvInputKit
+
+
+
+
+ Splits a CSV row into a title→cell dictionary. Stateless allocation-light
+variant of GetCsvDictionary(string); use this when the
+caller already has the title list and does not need to hold a
+CsvInputKit instance.
+
+
+
+
+
public static Dictionary<string, string> GetCsvDictionary(IList<string> titleList, string row)
+
+
+ Parameters
+
+ titleList IList<string>
+ Column titles, in CSV column order.
+
+ row string
+ CSV data row (not the header line).
+
+
+
+ Returns
+
+ - Dictionary<string, string>
+ Dictionary keyed by column title; cells past titleList
+are keyed by column[i].
+
+
+
+
+
+
+
+
+
+
+
+
+
Process-wide default factory used by the static Gen<T>
-family. Reg-style methods register here when called with
+family. Reg-style methods register here when called with
no explicit factory argument.
diff --git a/App/wwwroot/HiAPI-docsite/api/Hi.Disp.DispEngine.html b/App/wwwroot/HiAPI-docsite/api/Hi.Disp.DispEngine.html
index df00f148..ff1d42ba 100644
--- a/App/wwwroot/HiAPI-docsite/api/Hi.Disp.DispEngine.html
+++ b/App/wwwroot/HiAPI-docsite/api/Hi.Disp.DispEngine.html
@@ -180,7 +180,8 @@ Class DispEngine
-
- Writes ICompoundMotionDef section for G28 reference point return.
-Reads intermediate XYZ from Parsing.G28
-(written by G28Syntax)
-and converts to machine coordinates via
-ResolveProgramXyz(JsonNode, LazyLinkedListNode<SyntaxPiece>, ISentenceCarrier, NcDiagnosticProgress).
-
-Must be placed after LinearMotionSyntax in the syntax chain.
-Removes the IMotionEventDef section written by
-LinearMotionSyntax (G28 handles its own motion).
-Overwrites root MachineCoordinateState
-and ProgramXyz with reference position
-for subsequent block lookback.
-
+
Configurable handling for a G28 block with no axis specifiers
+(“bare G28”) — value of BareG28.
+Real Fanuc-class controllers vary: older 0i-M alarms (PS010), some
+30i variants send every configured axis to home. Default to
+Alarm so silent NC bugs surface; opt into
+AllAxesHome per syntax instance.
@@ -172,193 +165,6 @@ the syntax falls back to
Examples
- All cases hardcode a TestDeps.HomeMc with X/Y home at 0 and Z
-home at 100 (typical mill where Z-home is above the table) and leave
-the ProgramToMcTransform chain at identity so the final
-ProgramXyz equals MachineCoordinateState. The G28
-pattern emits a 2-item CompoundMotion: item 0 is the
-intermediate point in ProgramXyz, item 1 is the final position
-in MachineCoordinateState. Axes not present in the G28 block
-keep the previous-block MC value rather than going home.
-
-G91 G28 X0 Y0 Z0 with a #Previous: block carrying
-MachineCoordinateState=(50,60,70) — all three axes go home,
-so the final MC is the configured home (0,0,100):
-
-#Previous:
-{ "MachineCoordinateState": { "X": 50, "Y": 60, "Z": 70 } }
-#BeforeBuild:
-{ "Parsing": { "G28": { "X": 0, "Y": 0, "Z": 0 } } }
-#AfterBuild:
-{
- "CompoundMotion": {
- "Term": "G28",
- "Items": [
- {
- "MotionEvent": { "Form": "McLinear", "IsRapid": true },
- "ProgramXyz": { "X": 0, "Y": 0, "Z": 0 }
- },
- {
- "MotionEvent": { "Form": "McLinear", "IsRapid": true },
- "MachineCoordinateState": { "X": 0, "Y": 0, "Z": 100 }
- }
- ]
- },
- "ProgramXyz": { "X": 0, "Y": 0, "Z": 100 }
-}
-G91 G28 Z0 — only Z goes to its home; X/Y inherit from the
-previous block's MC. Item 0's intermediate ProgramXyz takes
-X/Y from the inherited program XYZ (= previous MC under identity
-transform) and Z from the literal 0 in the G28 block:
-#Previous:
-{ "MachineCoordinateState": { "X": 50, "Y": 60, "Z": 70 } }
-#BeforeBuild:
-{ "Parsing": { "G28": { "Z": 0 } } }
-#AfterBuild:
-{
- "CompoundMotion": {
- "Term": "G28",
- "Items": [
- {
- "MotionEvent": { "Form": "McLinear", "IsRapid": true },
- "ProgramXyz": { "X": 50, "Y": 60, "Z": 0 }
- },
- {
- "MotionEvent": { "Form": "McLinear", "IsRapid": true },
- "MachineCoordinateState": { "X": 50, "Y": 60, "Z": 100 }
- }
- ]
- },
- "ProgramXyz": { "X": 50, "Y": 60, "Z": 100 }
-}
-No IHomeMcConfig dep on the dependency list — the
-syntax early-returns and the G28 sub-section stays in
Parsing
-for an upstream consumer or downstream syntax to handle:
-#BeforeBuild:
-
{ "Parsing": { "G28": { "X": 0, "Y": 0, "Z": 0 } } }
-#AfterBuild:
-
{ "Parsing": { "G28": { "X": 0, "Y": 0, "Z": 0 } } }
-
-Rotary cases below add TestDeps.AxisConfig declaring B as
-rotary and extend HomeMc with the conventional B home at 0°.
-Each rotary block uses literal B = 45° so item 0's intermediate
-(45°), item 1's home (0°), and #Previous: modal B (30°) are
-pairwise distinct — a test that swaps any two values for any other
-is caught by the assertion. The wrap pass
-(McAbcCyclicPathSyntax) is a different syntax, so
-these per-SUT conformance assertions show only the raw literal /
-canonical-home values written by this syntax, before any cyclic
-normalization runs.
-
-
G91 G28 B45. — pure rotary G28. Emits a 2-item
-
CompoundMotion whose items carry only ABC keys in MC; no XYZ
-
ProgramXyz and no XYZ MC because the block doesn't reference
-X/Y/Z (and the conformance harness doesn't run
-
McXyzSyntax downstream — in the full pipeline that
-syntax fills root
MachineCoordinateState's XYZ from root
-
ProgramXyz, but with no XYZ in the block there's nothing to
-fill anyway). Root MC.B holds the canonical home for modal
-carry-forward; root
ProgramXyz is not written:
-#BeforeBuild:
-
{ "Parsing": { "G28": { "B": 45 } } }
-#AfterBuild:
-
{
- "MachineCoordinateState": { "B": 0 },
- "CompoundMotion": {
- "Term": "G28",
- "Items": [
- {
- "MotionEvent": { "Form": "McLinear", "IsRapid": true },
- "MachineCoordinateState": { "B": 45 }
- },
- {
- "MotionEvent": { "Form": "McLinear", "IsRapid": true },
- "MachineCoordinateState": { "B": 0 }
- }
- ]
- }
-}
-
G28 X0. B45. mixed XYZ + rotary. Both axis kinds occupy the
-same two items: item 0 carries the XYZ intermediate
-
ProgramXyz alongside the rotary literal in MC; item 1
-carries the final XYZ MC alongside the rotary home in MC. Root
-
MachineCoordinateState here holds only the rotary modal value
-(B = 0, the home); the XYZ portion of root MC would be filled by
-the downstream
McXyzSyntax in the full pipeline
-(out of scope for this per-SUT conformance). Root
-
MachineCoordinateState appears first because the
-rotary-home write happens before
CompoundMotion /
-
ProgramXyz are inserted.
#Previous: carries B = 30 so
-the prev rotary modal is distinct from both the literal (45) and
-the home (0):
-#Previous:
-
{ "MachineCoordinateState": { "X": 50, "Y": 60, "Z": 70, "B": 30 } }
-#BeforeBuild:
-
{ "Parsing": { "G28": { "X": 0, "B": 45 } } }
-#AfterBuild:
-
{
- "MachineCoordinateState": { "B": 0 },
- "CompoundMotion": {
- "Term": "G28",
- "Items": [
- {
- "MotionEvent": { "Form": "McLinear", "IsRapid": true },
- "ProgramXyz": { "X": 0, "Y": 60, "Z": 70 },
- "MachineCoordinateState": { "B": 45 }
- },
- {
- "MotionEvent": { "Form": "McLinear", "IsRapid": true },
- "MachineCoordinateState": { "X": 0, "Y": 60, "Z": 70, "B": 0 }
- }
- ]
- },
- "ProgramXyz": { "X": 0, "Y": 60, "Z": 70 }
-}
-
-Bare G28 — no axis specifiers — exercises the configurable
-BareG28 policy. Default Alarm
-emits Coord-RefReturn--003 and consumes the G28 without
-motion (the diagnostic surfaces through the
-NcDiagnosticProgress sink, not the block JSON, so the
-canonical #AfterBuild is just an empty object):
-
-#BeforeBuild:
-
{ "Parsing": { "G28": {} } }
-#AfterBuild:
-
{}
-Bare
G28 with
BareG28 set to
-
AllAxesHome: the syntax synthesises a
-literal at the inherited program position for every configured
-linear axis and the previous modal angle for every configured
-rotary axis (here X/Y/Z taken from the
#Previous: MC under
-the identity
ProgramToMcTransform, B taken from the prev
-modal). Item 0's intermediate therefore equals current (no motion
-in stage 1) and item 1 sends each axis to its home:
-#Previous:
-
{ "MachineCoordinateState": { "X": 10, "Y": 20, "Z": 30, "B": 45 } }
-#BeforeBuild:
-
{ "Parsing": { "G28": {} } }
-#AfterBuild:
-
{
- "MachineCoordinateState": { "B": 0 },
- "CompoundMotion": {
- "Term": "G28",
- "Items": [
- {
- "MotionEvent": { "Form": "McLinear", "IsRapid": true },
- "ProgramXyz": { "X": 10, "Y": 20, "Z": 30 },
- "MachineCoordinateState": { "B": 45 }
- },
- {
- "MotionEvent": { "Form": "McLinear", "IsRapid": true },
- "MachineCoordinateState": { "X": 0, "Y": 0, "Z": 100, "B": 0 }
- }
- ]
- },
- "ProgramXyz": { "X": 0, "Y": 0, "Z": 100 }
-}
-
diff --git a/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.LogicSyntaxs.BoringCycleSyntax.html b/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.LogicSyntaxs.BoringCycleSyntax.html
index f1b6ce04..ac248a36 100644
--- a/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.LogicSyntaxs.BoringCycleSyntax.html
+++ b/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.LogicSyntaxs.BoringCycleSyntax.html
@@ -195,6 +195,109 @@ Must be placed after
Examples
+ All cases below pre-populate CannedCycle as
+CannedCycleResolveSyntax would have written it. There
+is no #Previous:, so GetLastProgramXyz returns
+Vec3d.Zero → initZ = 0. F is supplied inside the cycle
+section so ResolveFeedrate(JsonObject, JsonObject, ISentenceCarrier, NcDiagnosticProgress)
+writes block-level Feedrate (G94 default, 600 mm/min
+→ 10 mm/s) before items are emitted. All cases use G98 return mode
+so finalZ = initZ = 0.
+
+G85 — feed to bottom, feed retract (smooth bore finish). The retract
+item carries the same Feedrate_mmds as the down-stroke. Four
+items:
+
+#BeforeBuild:
+{
+ "Parsing": { "G85": { "X": 50, "Y": 30, "Z": -10, "R": 2, "F": 600 } },
+ "CannedCycle": {
+ "Term": "G85", "ReturnMode": "G98",
+ "Params": { "X": 50, "Y": 30, "Z": -10, "R": 2 }
+ }
+}
+#AfterBuild:
+{
+ "CannedCycle": {
+ "Term": "G85", "ReturnMode": "G98",
+ "Params": { "X": 50, "Y": 30, "Z": -10, "R": 2 }
+ },
+ "Feedrate": { "FeedrateValue": 600, "Term": "G94", "Unit": "mm/min" },
+ "CompoundMotion": {
+ "Term": "G85",
+ "Items": [
+ { "ProgramXyz": { "X": 50, "Y": 30, "Z": 0 }, "MotionEvent": { "Form": "McLinear", "IsRapid": true } },
+ { "ProgramXyz": { "X": 50, "Y": 30, "Z": 2 }, "MotionEvent": { "Form": "McLinear", "IsRapid": true } },
+ { "ProgramXyz": { "X": 50, "Y": 30, "Z": -10 }, "MotionEvent": { "Form": "McLinear", "Feedrate_mmds": 10 } },
+ { "ProgramXyz": { "X": 50, "Y": 30, "Z": 0 }, "MotionEvent": { "Form": "McLinear", "Feedrate_mmds": 10 } }
+ ]
+ },
+ "ProgramXyz": { "X": 50, "Y": 30, "Z": 0 }
+}
+G86 — feed to bottom, spindle stop, rapid retract, spindle restart
+CW. First marker to spell out
+{ "SpindleControl": { "Direction": ... } } items. The retract
+item carries IsRapid: true rather than a feedrate. Six items:
+#BeforeBuild:
+{
+ "Parsing": { "G86": { "X": 50, "Y": 30, "Z": -10, "R": 2, "F": 600 } },
+ "CannedCycle": {
+ "Term": "G86", "ReturnMode": "G98",
+ "Params": { "X": 50, "Y": 30, "Z": -10, "R": 2 }
+ }
+}
+#AfterBuild:
+{
+ "CannedCycle": {
+ "Term": "G86", "ReturnMode": "G98",
+ "Params": { "X": 50, "Y": 30, "Z": -10, "R": 2 }
+ },
+ "Feedrate": { "FeedrateValue": 600, "Term": "G94", "Unit": "mm/min" },
+ "CompoundMotion": {
+ "Term": "G86",
+ "Items": [
+ { "ProgramXyz": { "X": 50, "Y": 30, "Z": 0 }, "MotionEvent": { "Form": "McLinear", "IsRapid": true } },
+ { "ProgramXyz": { "X": 50, "Y": 30, "Z": 2 }, "MotionEvent": { "Form": "McLinear", "IsRapid": true } },
+ { "ProgramXyz": { "X": 50, "Y": 30, "Z": -10 }, "MotionEvent": { "Form": "McLinear", "Feedrate_mmds": 10 } },
+ { "SpindleControl": { "Direction": "STOP" } },
+ { "ProgramXyz": { "X": 50, "Y": 30, "Z": 0 }, "MotionEvent": { "Form": "McLinear", "IsRapid": true } },
+ { "SpindleControl": { "Direction": "CW" } }
+ ]
+ },
+ "ProgramXyz": { "X": 50, "Y": 30, "Z": 0 }
+}
+G89 with P=0.3s dwell — like G85 but inserts a
+{ Dwell: { Time: 0.3 } } item at the bottom before the feed
+retract. Five items:
+#BeforeBuild:
+{
+ "Parsing": { "G89": { "X": 50, "Y": 30, "Z": -10, "R": 2, "F": 600, "P": 0.3 } },
+ "CannedCycle": {
+ "Term": "G89", "ReturnMode": "G98",
+ "Params": { "X": 50, "Y": 30, "Z": -10, "R": 2 }
+ }
+}
+#AfterBuild:
+{
+ "CannedCycle": {
+ "Term": "G89", "ReturnMode": "G98",
+ "Params": { "X": 50, "Y": 30, "Z": -10, "R": 2 }
+ },
+ "Feedrate": { "FeedrateValue": 600, "Term": "G94", "Unit": "mm/min" },
+ "CompoundMotion": {
+ "Term": "G89",
+ "Items": [
+ { "ProgramXyz": { "X": 50, "Y": 30, "Z": 0 }, "MotionEvent": { "Form": "McLinear", "IsRapid": true } },
+ { "ProgramXyz": { "X": 50, "Y": 30, "Z": 2 }, "MotionEvent": { "Form": "McLinear", "IsRapid": true } },
+ { "ProgramXyz": { "X": 50, "Y": 30, "Z": -10 }, "MotionEvent": { "Form": "McLinear", "Feedrate_mmds": 10 } },
+ { "Dwell": { "Time": 0.3 } },
+ { "ProgramXyz": { "X": 50, "Y": 30, "Z": 0 }, "MotionEvent": { "Form": "McLinear", "Feedrate_mmds": 10 } }
+ ]
+ },
+ "ProgramXyz": { "X": 50, "Y": 30, "Z": 0 }
+}
+