Upgrading from 3.1.175 to 3.2
Rebuild every assembly compiled against 3.1.175.
Packages
- The 3.2 line is eight packages: HiGeom, HiLicense, HiDisp, HiCbtr, HiMech, HiUniNc, HiNc and HiNc-Resource. They target .NET 10 (
net10.0), x64 only. - A set is named by its HiNc version; each package keeps its own build number. The packages reference each other as
3.2.*; pin every package when a build must be reproducible. - Settings: the package source is
https://gitea.superhightech.com.tw/api/packages/HiAPI/nuget/index.json; customers of the mainland mirror keep the address issued with their account. Where a machine registered the source at an earlier address, point it here withdotnet nuget update source HiAPI --source https://gitea.superhightech.com.tw/api/packages/HiAPI/nuget/index.json(use the name it was given; its credentials stay), and where anuget.confignames an earlier address, write this one in its place (Getting Started). - Removed:
Hi.WinFormandHi.WpfPlus, last published beside HiNc 3.2.31: hostDispEnginein your own control, or keep the whole set at 3.2.31. - Settings: an executable built on the packages must not be marked CET-compatible; HiDisp sets
CetCompattofalseunless the project sets it. - Settings:
ResourceSeeder.Seedmay refresh or delete resources marked.default(AlTiBN.default.CoatingMaterial); keep your own files unmarked and strip the marker on save-as.
Before anything else
- Call
LocalProjectService.Regonce at startup, before any project XML is deserialized.XFactory.Generatorsis now aConcurrentDictionary. - Call
LocalApp.AppEnd()last, after disposing theLocalProjectServiceand everyDispEngine(Ending the Program). - Message parameters take
IProgress<IMessage>instead ofIProgress<object>, theXFactorychain included.MultiTagMessageandMultiTagMessageUtilare removed. - Messages arrive on
ShellProgress,StepDiagnosticProgressandNcDiagnosticProgress; NC optimization and writeback report onIMachiningService.NcManipulationDiagnosticProgress. BeginSession()createsLocalProjectService.SessionShell(null outside a session) and a newShellProgress: subscribe throughOnShellMessageAdded/OnShellMessageClearedorMessageCollector.MachiningSessiontakes itsIMachiningServicehost in the constructor;IMachiningServicehas aPacePlayerproperty.PlayNcFile/RunNcFiletake(file, NcKind kind = NcKind.Auto)and play any program:.cl,.cls,.clsfand.csvfiles as CL or CSV, the rest as brand G-code.PlayBrandNcFile/RunBrandNcFileplay brand G-code only. The same rename applies onLocalProjectService,SessionShellControllerandMachiningSession.- Do not obtain a
DispEnginewhileDispEngine.IsGlAvailableisfalse(no usable OpenGL).
Renamed
| 3.1.175 | 3.2 |
|---|---|
Vec3d, Vec2d, Box3d (the math class), Tri3d, DVec3d, Box2d, Mat4d, Hi.Native.vec3f |
vec3d_t, vec2d_t, box3d_t, tri3d_t, dvec3d_t, box2d_t, mat4d_t, vec3f_t; compound, XML and wire kind names keep their spelling |
in-place members of these types (Normalize, Set, Expand, Translate, Transform, …), v.At(i) = x, tri.ps[i] |
the value-returning form, assigned back (v = v.GetNormalized(), Expanded, Translated, GetTransform, WithAt); v[i] = x; tri[i] |
Mat4d.Set, SetIdt, Scale, Inverse, Transpose, SetNoTrans, Transform, FixFloatingZero, AdjustSingularValueByTolerance |
the constructors, mat4d_t.Idt, GetScaleMat, GetInverse, TransposeMat, NoTransMat, GetTransform, GetFloatingZeroFixed, GetSingularValueAdjusted; m[i, j] to write |
members that answered null (Asmb.GetMat4d, Workpiece.FixtureToProgramZeroMat4d, GetRgb, GetCoordinateOffset, IsoCoordinateAddressMap.Read, GetMachinePositionAtTableBuckleZero, PairZrUtil.Get…, …) |
their Try… form (TryGetMat4d, TryGetFixtureToProgramZeroMat4d, TryRead, TryGetMachinePositionAtTableMountZero, …) |
WorkpieceService.…RuntimeGeom… |
…MeshedGeom… (GetRuntimeGeom → GetOrBuildMeshedGeom); ResetMeshedGeom takes no ClStrip; script names keep hidden aliases |
IContourTray, UniformContourTray, FreeContourTray, MillingCutter.FluteContourTray |
IFluting, UniformFluting, FreeFluting, MillingCutter.Fluting |
FluteContour.SetupAngle_deg / ShiftAngle_rad, BaselineContourShiftAngle_deg |
FluteOffsetAngle_deg / FluteOffsetAngle_rad, BaselineFluteOffsetAngle_deg; do not copy an old flute angle into the new MillingTool.SetupAngle_deg |
web fluting field setupAngle_deg |
fluteOffsetAngle_deg; a request still sending it writes an offset of 0 |
…Buckle (TableBuckle, GetTableBuckle(), ShowTableBuckle, show-…-buckle, SpindleBuckleAnc, …) |
…Mount; code and requests take no old spelling, files with it still load |
CodeXyzabcMachineTool / CodeXyzabcMachineToolUri |
GeneralXyzabcMachineTool; the old XML names still load |
IXyzabcChain, MachiningActRunner.XyzabcChain |
IXyzabcMachineTool, MachiningActRunner.XyzabcMachineTool |
GetMillingEquipment |
GetMachiningEquipment, which answers the runtime face; MachiningProject.GetMillingEquipment() is GetSetupEquipment(), which answers the authored one |
api/Player/… and api/player/… (strip-chart, cl-strip/…, messages, …), api/Preference/player-div-config; the /playerStatusHub hub, its PlayerStatusUpdated message and the playerStatus field |
api/Execution/… and api/execution/… (strip-chart, cl-strip/…, messages, …), api/Preference/execution-div-config; /executionStatusHub, ExecutionStatusUpdated, executionStatus |
the messageTable field of api/Preference/player-div-config |
sessionInfo of api/Preference/execution-div-config, which shows the Session Info panel under the Execution canvas |
IControlRunner, RunControlLines |
INcRunner, RunNcLines |
NcDiagnostic.Text |
NcDiagnostic.Notification |
Feedrate_mmds / Feedrate_mmdmin of StateActRunner, ActFeedrate, ActRapid; MachineMotionStep.Feedrate_mmds |
CommandedClFeedrate_mmds / CommandedClFeedrate_mmdmin; the tip feedrate is ActualTipFeedrate_mmds; MachiningStep.Feedrate_mmdmin keeps its name |
SoftNcRunner.NcDependencyList |
PipelineNcDependencyList; the resolved list is GetEffectiveNcDependencyList() |
WorkpieceService.HasDiff |
HasDiffOverlay |
Hi.Common.ResourceUtil (HiNc) |
ResourceLayout |
NativeTopoStld, NativeTopoStlfr, Solid.NativeSmoothTopoStl, Sweptable.NativeTopoStl |
Hi.Geom.Topo.NativeTopoStl3d, NativeTopoStl3wfr, Solid.SmoothTopoStl3d, Sweptable.NativeTopoStl3d |
ITimeGetter.Time |
ITimecoded.Timecode |
ClStrip.DrawingRefreshing |
DrawingRefreshed |
CbtrPickable.CleanLinked* |
CleanAttached* |
AccumulatedTime, BackgroundTemperature_C / _K, SessionShell.GetMillingStep |
EndTimecode, AmbientTemperature_C / _K, GetMachiningStep; the old names stay [Obsolete] |
MillingPhysicsBrief; MillingStepLuggage (Hi.MillingSteps), ResetMillingStepLuggageDb, SqliteStepStorage.…MillingStepLuggages |
MillingForceBrief; Hi.MachiningSteps.StepLuggage, ResetStepLuggageDb, …StepLuggages; a mission script may keep the plain names MillingPhysicsBrief and MillingInstance |
SeqPhysicsBrief |
SeqPhysicsState; a mission script may keep the plain name SeqPhysicsBrief |
the step properties YieldingStressRatio, ThermalYieldRatio and, from 3.2.55 on, YieldingStressOverloadRevolutions (Yielding Stress Ratio, Thermal Yield Ratio, Yielding Stress Overload Revolutions); MillingPhysicsBrief.YieldingStressRatio, MillingForceLuggage.GetYieldingStressRatio; from 3.2.43 on, IStructureMaterial.YieldingStressLimit_MPa |
StressRatio, ThermalStressRatio, StressOverloadRevolutions (Stress Ratio, Thermal Stress Ratio, Stress Overload Revolutions); MillingForceBrief.StressRatio, MillingForceLuggage.GetStressRatio; StressLimit_MPa; code takes no old name, files saved with one still load (Settings and defaults that changed) |
Changed shapes
- The renamed
…_ttypes are structs: assignment copies, and a write through a property (st.Trans.Z += 10, mission scripts included) is CS1612; assign a whole value. - No vector is null: an unset one is
NaN, an optional one isvec3d_t?,dvec3d_t?ormat4d_t?(read it withis { } vor??).new mat4d_t()is the identity,default(mat4d_t)the zero matrix. - A geometry slot holds the class
Box3d: it wraps abox3d_tinBox, has no math API and compares by reference (a.Box == b.Boxcompares values). SetupEquipmentis the authored, saved equipment, and an equipment file (root element<MachiningEquipment>) loads as one:XFactory.GenByFile<SetupEquipment>reads it, and so does a read asIMachiningEquipmentorobject; asked for asMachiningEquipmentorIGetMachiningEquipmentit answers the runtime face built from it, whoseAuthoredFaceis the saved one.MachiningEquipmentis rebuilt from the authored face for the run (SetupEquipment.MaterialiseMachiningEquipment(baseDirectory, progress)), the authored face's parts shown on it as copies; itsMachiningChainFileandSpindleCapabilityFileare the authored face's (on one made withnew MachiningEquipment(), which has noAuthoredFace, they read null and a write throws).LocalProjectService.MachiningEquipmenttakes aMachiningEquipmentread from a file, with what was written on it since but for the tool (itsAuthoredFacebecomes the project'sSetupEquipment; read the property again after the assignment); one made withnew MachiningEquipment()is refused: setMachiningProject.SetupEquipmentand callNotifySetupEquipmentEdited().- A workpiece, fixture, machine chain, table transformer, environment value,
MachiningChainFileorSpindleCapabilityFilewritten onLocalProjectService.MachiningEquipment, or on a face read from a file and assigned to it, is written back to the project'sSetupEquipment, and the runtime face follows (rebuilt, but for an environment value): take it from the property again after each write. A tool written there is not: the next rebuild mounts the setup's tool selection again. Nor is a material or cutting parameter assigned on a runtime face's workpiece: the run takes the setup's from the next play on, so assign it onLocalProjectService.Workpiece. With a session alive, a part or the table transformer reaches theSetupEquipmentat the next session boundary (the next play, a reset,EndSession) unless the setup's member was written since; a save before then saves the setup as it was and says so. A face kept from a closed project, or from aSetupEquipmentsince replaced, writes nothing back and says so. - A workpiece, fixture or machine chain belongs to one equipment at a time: a part assigned from one equipment to another leaves the first (after
LocalProjectService.Workpiece = equipment.Workpiece,equipment.Workpieceis null, so read it once), where 3.1.175 let both hold it; a part of the project'sSetupEquipmentthat another equipment takes leaves the project. - The runtime face follows
SetupEquipmentby rebuild: after editing a part of it in place (its geometry, a transformer), callNotifySetupEquipmentEdited(); a material or cutting parameter replaced on its workpiece reaches the next play, orRecomputeStepPhysics, without it. The runtime face's workpiece is given the setup's own material and cutting parameter objects, not copies, so a field written in place on them needs no call, and a refused recompute does not take it back. StlFile.ExpandToBox3danswers the bounds taken when the mesh was loaded or assigned toStlFile.CacheStl: after changing such a mesh in place, assign it toCacheStlagain.new GeneralXyzabcMachineTool(),new Fixture()andnew Workpiece()build empty mechanisms;CreateFromChainCode()andCreateDefault()build the default layout.- Brief values that need the material, the spindle or the tool are
Get…methods that take it (MillingForceBrief.GetChipMass_g(material),SeqPhysicsState.GetThermalStressRatio(cutter, ambientTemperature_K), …);MachiningStepkeeps them as properties.
Removed
| Removed | Use instead |
|---|---|
GeneralXyzabcChain, CodeXyzabcChain, IGetXyzabcChain, IMachiningChainSource, MachiningEquipmentCollisionIndexPairsSource, the machine's chain members and constructors (XyzabcChain, TableAnchor, …) |
the machine: GeneralXyzabcMachineTool.CreateFromChainCode(), its TableMount, ToolMount, AxisX …; new XyzabcSolver(machine) |
Fixture.GeomToTableTransformer, GeomToWorkpieceTransformer, SetWorkpieceTransformationToGeomTopCenter, Workpiece.WorkpieceGeomToProgramZeroTransformer, WorkpieceGeomToFixtureBuckleTransformer, the …Branch properties |
Branch.Get(fixture.GeomAnchor, fixture.TableMount).Transformer; a pose through Asmb.TryGetMat4d |
Hi.Native.vec3d, tri3d, box3d, mat4d, vec2d, box2d |
the Hi.Geom values |
NativeTopoStlfr.Display, ExpandToBox3d |
the bounds of the Stl it was built from |
MachiningEquipment.GetToolTipXyzOnProgramZero() |
GetProgramCl()?.Point |
MachiningEquipment's XElement constructor and MakeXmlSource; IMakeXmlSource on IMachiningEquipment |
MachiningEquipment.ReadFromAuthoredXml(xml, baseDirectory, relFile, progress) for the constructor; the same members of SetupEquipment (a face's AuthoredFace); SetupEquipment.MaterialiseMachiningEquipment(baseDirectory, progress) builds a MachiningEquipment from it |
XyzabcUtil.GetNp, GetTransformationMat4d |
machine.GetAsmb().TryGetMat4d(machine.GetTableMount(), machine.GetToolMount(), out var m); new dvec3d_t(m) for GetNp |
MachiningEquipmentCollisionIndex.WorkpieceRuntimeGeomGetter |
IMachiningEquipment.WorkpieceCollidable |
AnchoredCollidablePair, IGetAnchoredCollidablePairs, IGetDefaultCollidablePairs |
CollisionIndexPair, IGetCollisionIndexPairs |
MacroMotionValve |
a larger FixedMachiningMotionResolution.LinearResolution_mm |
CsvRowSemantic and the earlier CSV runner classes |
GeneralCsvRunner |
IndexedSentence |
your own ISentenceCarrier |
MixedIndex |
FileLineIndex comparison |
MachiningProjectDisplayee, IsoCoordinateEntryDisplayee, HeidenhainCoordinateEntryDisplayee, UserConfig, UserService, PlayerDivConfig |
the ILogger-only LocalProjectService constructor; copy the displayees from Hi.Sample |
the HiNC-2025-webservice sample's DemoColorGuide |
a color tree (StepColorTree; Step Colors) |
CultureUtil.SupportedCultureNames, SetCurrentCulture(string) |
CultureUtil.English, SetCurrentCultureEn() |
NcFileListCommand |
a ListCommand of NcFileCommands; projects convert on load |
PostExecutionCommand's …RuntimeGeom… switch and file template, and their routes |
RecordMeshedGeomCommand, ExportMeshedGeomToStlCommand |
MillingCutter's resolution members, IPolarResolution2dSourceProperty, PolarResolution2dSource |
Solid(IGetStl, PolarResolution2d); MillingCutter.SetShaperStlResolution / SetStrutStlResolution |
GetStl() on the shaper profiles |
GenStl(resolution), or GenStl(null) for the default |
MillingTool.ObservationRingRadius_mm; ringRadius_mm in api/ToolHouse/{id}/observation, which a PUT ignores |
nothing: the ring is sized from the tool, and a MillingTool drawn whole shows it; to leave it out, draw its Cutter and Holder rather than setting ObservationAnchorReference to None, which makes the bending moments about the sensor NaN |
api/Vec3d, api/Mat4d, the routes that index a vector by key (IndexTrans, IndexAxis, api/Box3d/IndexMin, …) |
the owner's route (UpdateTrans, UpdateAxis, api/Box3d/Update, api/StaticFreeform/Update); StaticTranslation/NewWithValue |
the api/Fixture / api/Workpiece transformer and geometry routes (UpdateGeomToProgramZeroTransformer, …) |
api/mech/equipment-topology (graph, …/branch/{id}/update-transformer, roles/{owner}/{role}) |
api/general-mechanism |
api/mech/machine-tool/load, …/xml, api/mech/equipment-topology/machine-tool/… |
the SignalR hubs /sessionMessageHub and /selectedStepInfoHub |
/shellMessageHub, /ncDiagnosticHub, /stepDiagnosticHub and /ncManipulationDiagnosticHub; GET api/Execution/selected-step-info |
MillingInstance, ISuccessivePhysicsBriefAccessor |
the same values on MachiningStep (IsTouched, Mrr_mm3ds, TryGetMillingForceBrief, TryGetSeqPhysicsState, …), where step.MillingInstance.… still compiles with a warning; new MachiningStep(…) takes a SubstractionBrief |
MillingInstance.BoundingBoxOnToolRunningCoordinate |
MachiningStep.CuttingDepth_mm |
MillingPhysicsBrief.GetIndexAtMaxCuttingForce |
the rotation sample with the largest force, read from the step's force luggage (TryGetMillingForceLuggage, the largest of its CuttingForcesToToolOnToolRunningCoordinate_N); MillingForceBrief.MaxForceOnToolRunningCoordinate_N gives the force itself |
SeqPhysicsBrief.InstantFlankWearDepth_um |
the increase of SeqPhysicsState.AccumulatedFlankWearDepth_um over the state the step started from (the step's value minus the previous step's; from 0 on the first step after a tool change) |
SeqPhysicsBrief.WorkpieceDermisTemperatureList |
SeqPhysicsState.WorkpieceSurfaceTemperature_K (its first node; the deeper nodes have no replacement) |
RakeFaceCuttingParaMap (with its Test()), MultiFormRakeFaceCuttingPara |
RakeFaceCuttingPara3d (six coefficients) or RakeFaceCuttingPara2d (four), one coefficient set for the whole cutter; as TrainMillingPara's template, paraTemplate: new Hi.MillingForces.RakeFaceCuttingParas.RakeFaceCuttingPara3d() or DefaultParaTemplateDimension = 3. Their files of one flute form and no angle table still load, as a RakeFaceCuttingPara3d |
MachiningStep.MillingStepLuggage, IMachiningService.MillingStepLuggageReader, LocalProjectService.MillingStepLuggageReader, SqliteStepStorage.MillingStepLuggageRow |
one step: TryGetSubstraction, TryGetLayerMillingEngagement, TryGetMillingForceLuggage on the step or on IMachiningService (a LocalProjectService answers them through that interface); a range: SqliteStepStorage.FindSubstractions, FindLayerMillingEngagements, FindMillingForceLuggages, FindStepLuggages |
MachiningStep.FlexDictionary, FlexDictionaryUtil, IFlexDictionaryHost<T> |
step[key], which keeps a number (read back as double), a bool (read back as 1 or 0) or a string; many steps at once: SessionShell.WriteStepVariables, ReadStepVariables |
DistributedQueueTaskScheduler, DistributedQueueTaskStarter |
QueueTaskScheduler, which starts its own workers |
QueueTaskScheduler.WaitAll |
Task.WaitAll on the tasks started on the scheduler |
UnmanagedSubstraction.PreserveBegin, PreserveEnd, preserveCount |
Dispose() (or using) where the last PreserveEnd would have reached zero |
ParallelBulkReader<TData> |
ReadBulkDelegate<TData> with SegmentedReadUtil; SequentialBulkReader<TData> stays |
SoftNcUtil.ParseDouble |
SoftNcUtil.GetParsedDouble |
Removed with no replacement: ReflectedXyzabcChain, SimpleSessionCommand, LsStl, FluteZData, MillingForceUtil.AnglePack, the z-to-dz LayerMillingEngagement constructor, MillingPhysicsBrief.YieldStressMinHeight_mm, MillingPhysicsBrief.MaxCompetingCuttingForceOnToolRunningCoordinate_N, MillingPhysicsBrief.GetMaxAbsForceSlope_NdDeg, MillingGeomBrief, IMillingGeomBriefAccessor, IGetMillingGeomBrief, MachiningStepUtil, StepMotionSnapshot.AnchorTransformDictionary, IMotionValve.Finish, ClMachiningValve.MotionValve, NcArgSiemensFrame.Reset, Box3d.NoInit, Box2d.NoInit, the useRef / shareFields parameters, the parameterless RgbTreat constructor, the generic NcFlagUtil.GetNcFromSyntax<TVec>, GL.glFenceSync, glGetDoublev, glGetDoublei_v, glGetDoubleIndexedvEXT, glIglooInterfaceSGIX, glPNTrianglesfATI, glPNTrianglesiATI, POST /api/project/log-message, POST /api/Player/messages/export, the enableStripAvailabilityChart, enableStripRoughnessChart and colorIndexTimeChart fields of api/Preference/player-div-config.
Settings and defaults that changed
LocalProjectService.EnableSoftNcRunnerdefaults totrue;HardNcRunneris the opt-out.- NC-embedded commands are marked
@@, or@@^to run after the block, inside the controller's own comment; rewrite programs that use;@or;#. - A controller saved in a project keeps the syntax list it was saved with; re-create it from its brand preset, or an
NcRunnerSuitbuilt from it, for the current syntaxes. The Fanuc preset'sSnapshotSyntaxentries default toIsEnabled = false. - On SoftNc a SINUMERIK rotary axis rolls over, as a modulo axis, only when its
MD30310row under Parameters (Native) › Axis Parameters (Integer) is 1 (SiemensMachineDataTable.MdRotIsModulo); without the row it takes the control's factory value 0, and its plain andAC()words are positions as written. Add the row for each rotary axis that rolls over on your machine, and anMD30455row (MdMiscFunctionMask) where your machine sets its bits: bit 2 (4) where a plainG90word takes the shortest way, bit 0 (1) where a word outside 0–359.999° is converted instead of alarming. Coded positions and an equidistant indexing definition wrap round only on a modulo axis. StressRatioon the brief and the step isNaN, not0, when it cannot be evaluated.- A cutter whose APT values contradict each other removes no material and runs no cutting physics, and loading the project reports it; correct the values
MillingCutter.GetShaperProfileIssues()names. - A cutter made by
new MillingCutter()or saved with an emptyMillingCutterOptLimitcarries the default limit, so NC optimization optimizes the lines it cuts; set the limit'sEnableOpttofalseto keep their source feeds. - A material file without
HeatConductivity_WdmK,Density_gdcm3orHeatCapacity_JdgKleaves that constant not given, and the thermal model skips the material; add the element to keep its temperatures and wear. - A cutter or structure material with no yield point by nature — a carbide, a ceramic, a CBN, a coating — is saved with
<YieldStrength_MPa>NotDuctile</YieldStrength_MPa>, as the shipped cutter materials are; one whose yield strength is merely not known is saved without the element, as before, and an emptyYieldStrength_MPaorTensileStrength_MPaelement loads as not known.NotDuctilereads in any letter case, and a program of your own that reads these files takes it as no value. HiNC 3.2.43 to 3.2.55 read the element as a number, so such a material, and a cutter or project file that holds one, does not load there; 3.1.175.5 and the 3.2 builds before 3.2.43 skip the element. - A project keeps its own copy of the cutter, workpiece material, cutting parameter and spindle capability it loaded: load the shipped ones again to take their current values, and load a spindle capability saved before 3.2.47 from a legacy
InsistentRatiocontour file again from that file. A spindle capability saved as one power and one torque curve needs your spindle's short-time contours for its spindle temperature; one saved again by 3.2.51 or earlier may carry the 15- and 60-minute contours ofTMV-720A-STD-8000RPM: replace them with your spindle's own. - A cutting parameter file holding a rake-face angle table or more than one flute form (
<RakeFaceCuttingParaMap>,<UniCuttingParaMap>,<MultiFormRakeFaceCuttingPara>) loads as no cutting parameter (XFactory.GenByFilereturns null for it) and reportsCuttingPara-Legacy--NotOneSetFile, orCuttingPara-Legacy--NotOneSetfor one written inside the project, which the next save leaves out; a play then skips the cutting-force and thermal physics. Replace it with a file of one coefficient set; one of one flute form and no angle table loads as aRakeFaceCuttingPara3d.POST api/Workpiece/cutting-parameter/loadanswers such a file withsuccess: false, the reason inmessageandmessages, and keeps the workpiece's cutting parameter. - Your own processing unit in a
SoftNcRunnerpipeline needs the licence featureNcComposition, or it is skipped; the API and scripts need none. - A SoftNc pipeline you compose yourself puts
SpindleDirectionFallbackSyntaxafterLinearMotionSyntax; without it, a speed given with no direction leaves the spindle standing. - From 3.2.56 on, a Heidenhain SoftNc pipeline you compose yourself builds its lists as
SoftNcRunner.HeidenhainNcRunnerdoes,HeidenhainApprDepSyntaxandHeidenhainApproachDepartureSyntaxincluded, or itsAPPRandDEPblocks do not play as approach and departure functions; a Heidenhain controller that an earlier HiNC saved in a project takes them as it loads. - Localized step labels need the HiNc-Resource present catalogs (
catalog.<lang>.json) in the host. - The shipped machine tools are
MachineTool/Table-B1.defaultandMachineTool/CT-350.default, with the mechanism fileTable-B1.GeneralMechanism, and the shipped holder isHolder/BT40-ER16-090.default.Holder; repoint earlier paths. - A mission script that no longer compiles runs none of its lines; rewrite it to the current API.
- A step-built handler (
SessionStepBuilt,LocalProjectService.MachiningStepBuiltorMachiningActRunner.MachiningStepBuilt) cannot play an act (PlayAct,PlayToolingTeleport,PlayClTeleport), wait for or dispose the runner, or callResetRuntime,EndSessionor the player'sReset: the call throws and is reported on that step, which is left without a result. A program play from it (PlayNcFile, …) is refused as a second play, and closing the project from it waits for the play to end, which may be waiting for that handler. Make such calls after the play. - A run (
RunNcFile,RunNc) or an act (PlayAct,PlayToolingTeleport,PlayClTeleport,LocalProjectService.Act) from another thread plays nothing while a mission (playing, paused or between its commands) or a job such as the step-physics recompute holds the player, or while another thread plays the session;POST api/SessionShell/OptimizeToFileswrites nothing while the player runs or is paused: make the call in the mission script, or after the run. Dispose an enumerator ofRunNcFileorRunNcyou walk by hand (foreachdoes). ResetRuntime()orPowerReset()called inside the program being played — an NC-embedded@@ResetRuntime();, or a script's call in its own loop overRunNcFile— is refused and the program plays on: reset between two programs.- NC optimization over steps played across a
PowerReset(), a switch of the controller brand or preset, or anEndSession()andBeginSession()that kept the steps writes nothing and says why: optimize before it, or clear the steps (ResetRuntime(), the player's Reset) and play again. From 3.2.55 on,RecomputeStepPhysicsafter such anEndSession()andBeginSession()answers that the earlier steps need a replay. - From 3.2.54 on,
CloudLeaseClient.LoginAsynctakestermsVersionandanalyticsOptInbefore itsCancellationToken: name the token (cancellationToken:) where a call passes it by position. - A program played with no tool in the spindle builds no machining step, and the play says so at its first feed move; a step cut with no tool-house tool of its number (the project's own tool is tool 0 until the first tool change) has no feed per tooth, cutting force, cutter temperature or wear, and a change to tool 0 (
T0 M06,TOOL CALL 0) with no tool 0 in the house keeps the tool and its number. Put a Manual Tooling command (ManualToolingCommand) naming the tool above the program in the mission, or a tool-change block such asT1 M06at its start, adding the tool to the tool house first if it is not there. - Projects and machine-tool files saved by 3.2 do not load in 3.1; 3.2 cutter files need HiNc 3.1.175.5 there. A play result that Record Play Result saves from 3.2.56 on is not reviewed by 3.2.55.
- A project saved with its motion resolution as
<FixedNcResolution>, then saved again by 3.1 or by a 3.2 build before 3.2.56, holds Feed Per Cycle in its place: set its Machining Motion Resolution back to Fixed, with the linear and rotary resolutions it had. - After rebinding a role of an installed part, call
IMachiningEquipment.Rewire(); for a machine also regenerate the collision pairs and callNotifySetupEquipmentEdited(). - Give each branch its own transformer (
Clone()); one object assigned to a second branch moves there. - A host that builds
MachiningEquipmentitself setsWorkpieceCollidable, or pairs against the workpiece are not evaluated. - From 3.2.56 on, a host that constructs
MachiningActRunnerpasses its exception reporter as anAction<Exception, int?>: the exception and the index of the step at fault, ornull. A failed write to the step cache reaches it as aStepConsignmentWriteException, the store's exception itsInnerException. - A class implementing
IXyzabcMachineTooladdsGetSpindleTransformer(); returning null keeps the machine as it played before. A class implementingIStructureMaterialanswersStressLimit_MPa, or the stress ratio of a cutter made of it readsNaN. LocalProjectService.XyzabcSolveris null while mountwortis unbound or the two are not connected.LocalProjectService.InspectingQuantityFuncanswersnullfor a step not filled yet; afterInspectingKeychanges, read again onInspectingSlotsScanned.- A step variable registered, or a CSV column named, like a built-in step property or with a key starting with
MC.is refused and not written onto the steps, and registering a key again replaces it; rename the key or the header to keep it. - From 3.2.56 on,
MachiningStateGeometryandMachiningStateare the keys of HiNC's built-in color trees, refused as a built-in step property's are: a step variable or a color tree a project holds under either is not registered (keyTaken), and a script's registration or a CSV or mapped column under either is refused. Rename the key or the header.PUTandDELETEonapi/execution/step-color-trees/{key}under either answer409with the codeStepColorTreeBuiltInwhere the project holds no tree under the key: copy the built-in tree withPOST api/execution/step-color-trees/{key}/copyand change the copy. A tree the project holds under the key is renamed by aPUTwhose body names another key, and removed byDELETE. - The step properties
MaxBreakageRatio,SpindleOverloadRevolutionsandSpindleOverloadPeakRatioof 3.2.55 are removed: a project's color index, color tree or saved colour range that names one is kept as it is and reads no value, and the play warns that the key matches no step property; a step file 3.2.55 wrote, mapped back, skips their columns. Read the spindle by cause instead —SpindleTorqueOverloadRevolutionsandSpindleTorqueOverloadPeakRatiofor a run of the spindle torque ratio above 1,SpindlePowerOverloadRevolutionsandSpindlePowerOverloadPeakRatiofor one of the power ratio — andStressRatio,MaxSpindleTorqueRatioandMaxSpindlePowerRatioeach on its own where a tree took their largest. The Internal Use Only members ofOverloadRunFoldandStepPhysicsChannelReaderthat read them (SpindleRuns,Sample.SpindleRatio,MaxSpindleRatio,MaxBreakageRatio) go too. - The stress ratio's keys are renamed (the table above). A project's color index, color guides (the selected key included), strip chart entries and color tree terms and shown values saved under
YieldingStressRatio,ThermalYieldRatioorYieldingStressOverloadRevolutions, and the displayed step properties of the web service'sUserConfig.xml, load underStressRatio,ThermalStressRatioorStressOverloadRevolutions, and the next save writes the new name. A step file or step CSV mapped back skips a column under an old key, as it skips a built-in property's column (CsvEmbed--BuiltInColumnsSkipped): the play supplies the value, and the column does not become a step variable. A step variable's formula, a mission script or NC-embedded C# that readsstep.YieldingStressRatio,step.ThermalYieldRatioorstep.YieldingStressOverloadRevolutionsdoes not compile until it reads the new name. The old keys stay reserved: no step variable, script registration or CSV column takes one. Web API requests take the new keys alone: an old key sent toPOST api/execution/inspecting-keyor as a color guide's key matches no step property, so nothing is coloured, the strip chart reads no value and the play ends withPlay-InspectingKey--Unresolved; theAvailabilityaspect ofGET api/execution/strip-chartkeys its seriesStressRatioandThermalStressRatio. - A selection's
BeginSelectionandEndSelectionbelong in one program and the subprograms it calls: a begin that no end has closed is dropped when the session starts its next program (a mission's next Program File, the nextPlayNcFile), and an end in a later program maps nothing. Move both anchors into one program (Sensor Data Mapping). LoadProject/ReloadProjectdo not fail on a missing STL or an unreadable referenced file; pass a message sink to receive these.XFactory.GenByFile,GenandGenByChildreturn null for an unreadable<XmlSource>file, and for an element read as another type than the one asked for, which they report as an error on the message sink;GenListSkippingUnloadableskips such an element with a warning.- Web actions answer
409with anApiActionResultbody when the session or project they need is missing, or while another project New, Load, Save, Reload or Close runs (ProjectFileBusyExceptionin the API); cutter, tool-house and holder edits answer409with the codeToolEditRefusedWhileRunningwhile a run is in progress or paused. From 3.2.55 on, the brand and NC-runner switches (POST api/mech/soft-nc-runner/brandandupdate,LocalProjectService.ReadNcRunnerSuit) are refused, with409over HTTP, while a mission's program plays or is paused. - From 3.2.56 on, the machine tool's and the fixture's solids are read-only while a run is in progress or paused, and while a program plays through an
api/SessionShellrequest such asPlayNcFile:enable-geom,disable-geom,create-geom,set-geom-transform,refresh-geom-cacheandPOST …/rgbofapi/mech/equipment-topology, itsindex-geomon an anchor that has no solid, and a write to the geometry and transformer routes (api/Box3d,api/StlFile,api/TransformationGeom,api/StaticTranslation, …) whose key names an object under those solids answer409with the codeSolidEditRefusedWhileRunningand change nothing: stop or reset first, then call again. POST api/SessionShell/ResetRuntimeandEndSessionanswer409with anApiActionResultbody while the player is running or paused (ResetRuntime--Busy,EndSession--Busy) or another thread plays the session (ResetRuntime--BusyAnotherThread,EndSession--BusyAnotherThread),BeginSession(BeginSession--Busy) while the player is running or paused with no session open, andPOST api/SessionShell/Reset(Reset--Busy) while another thread plays the session, asPOST api/Execution/resetdoes with{ success: false, code, message }: stop the play or wait for it to finish, then call again.LocalProjectService.ResetRuntime,EndSessionandBeginSessionandSessionShell's three returnbool(true: done, or nothing to do;false: refused and nothing done),SessionShellController's three and itsResetanActionResult: a statement call compiles unchanged, a method group passed as anActionbecomes a lambda; rebuild a host against the new package.- From 3.2.56 on, the seven play and act routes of
api/SessionShell—PlayNcFile,PlayBrandNcFile,PlayCsvFile,PlayClFile,PlayNc,PlayToolingTeleportandPlayClTeleport— answer409with anApiActionResultbody naming the one refusal, and play nothing, while the player is running or paused, while another thread plays the session, while the player is being reset (the plays) or while a play result is under review (the teleports; a program play under review answers500: close the review first, with the player's Reset).ConvertClToNcFilesandOptimizeToFilesanswer409while the player is running or paused, andPOST api/Execution/startanswers409with{ success: false, code, message }while another thread plays the session (a start during the mission's own run answersalreadyRunning). Treat a409as refused: stop the play or wait for it to finish, then call again; a200means admitted and run, and what the run itself refused, such as a missing file or no NC runner, is on Shell. The five plays ofMachiningSession,LocalProjectServiceandSessionShell,SessionShell.PlayActand its two teleports,LocalProjectService.Actand the newLocalProjectService.PlayActreturnbool(true: admitted and run, to its end or cut short inside the run;false: refused and nothing played), and those ofMachiningSessionandLocalProjectServicetake an optional message sink for the refusal, Shell without one;ProcActkeeps its sequence, andTryProcActanswers whether the act was admitted;LocalProjectService.IsPlayerStartAdmittedis the start's gate for a host that starts the player itself;SessionShellController's seven,ConvertClToNcFilesandOptimizeToFilesanswer anActionResult: a statement call compiles unchanged, a method group passed as anActionbecomes a lambda; rebuild a host against the new package. - From 3.2.56 on, while a project is being changed (New, Load, Reload, Close), or another request's
ResetRuntimeorEndSessionis resetting the runtime or ending the session,POST api/Execution/start,run-line,run-stepandresetanswer409with{ success: false, code, message }, and the session-shell routes (BeginSession,ResetRuntime,EndSession,Reset, the five plays and the two teleports) with anApiActionResultbody;run-lineandrun-stepalso answer409asstartdoes while another thread plays the session. New, Load, Reload and Close answer409with a message that names the reason while another thread plays the session or an act on it, or another request resets the runtime or ends the session;ResetRuntime,EndSessionandResetalso answer409while another thread plays an act. Treat these409s as the others: wait for the change or the reset to finish, then call again. In a host's code,LocalProjectService.RunToLineEndtakes an optional message sink and returnsbool(false: refused, nothing launched),TryStartPlayer(sink, out launched)andRunToNextPace(sink)launch the player under the same gate as its admission, andProjectFileBusyExceptiongains a constructor taking the message.BeginSession()answerstruewhile another caller's begin is in flight: readSessionShellonce that begin has finished. A setup edit made with no session open while another caller's session begin is in flight, or while another thread's run or job holds the player, reaches the runtime face at that begin or the next play: readLocalProjectService.MachiningEquipmentafter it. - Under
/api, aGETthat no route serves, such as one to a retired route, answers404with anapplication/problem+jsonbody, everyHEADanswers404, and any other method that no route serves answers405.…/align-workpiece-program-zeroanswers400with the reason. - Web clients send
POSTtoapi/NcProgram/file-lines,api/StlFile/GetFileInfo,api/ObjectManagement/GetXml,api/mech/machine-tool/xml,api/Cutter/{id}/inner-beamand/upper-beam,api/FreeformHolder/Getandapi/CylindroidHolder/Get. PUT api/Controller/stroke-limit-xyzandstroke-limit-abctake exactly six values andmax-rotary-speed-abcthree; any other count answers400and writes nothing. ThePUTs toapi/mech/soft-nc-runner/machine-limits/{axis},rapid-feedrates/{axis},home-positions/{axis}andtool-change/{axis}take an axis theirGETlists, in any letter case, and answersuccess: falsewith the listedaxesfor any other.- From 3.2.55 on, a step message such as
Collision--Detectedcan name a step not built yet:GET api/NcProgram/sentence-of-stepmarks itnotBuiltYet, and the step-variable and color-tree previews answer400with the codeStepVariableStepNotBuiltYet/StepColorTreeStepNotBuiltYetfor it. POST api/SessionShell/TrainMillingParaandReTrainMillingParadefaultoutlierRatioto0.1, as the script does.- With sign-in off, as shipped, the web application answers only
localhost,127.0.0.1and[::1]: list other names inAllowedHosts, or turn sign-in on ("Enabled": truebesideAuth:Users). It sends no CORS headers and does not redirecthttptohttps. - The installed HiNC's program is
HiNC-2025.exefrom 3.2.45 on: point a.batfile or shortcut that still names the installation'sHiNC-2025-webservice.exeatHiNC-2025.exe, or atHiNC.exein a portable copy. An installation that other computers reach may bring up the Windows Security Alert once more after that update: let HiNC through Windows Defender Firewall again (Keeping HiNC up to date). From 3.2.55 on, its first update server is namedhinc-1.superhightech.com.tw: anappsettings.local.jsonthat blanks or reorders it underUpdate:Serversuses that name. ToPresentDtopayloads use the keysType,Min,Max,Trans,Axis, …; update front ends that read them.
Values that change
G68rotation; incremental programs with blank, comment-only,%or O-number lines; zero-length feed blocks that carry a newF;G41/G42underG18/G19, or with a non-motion line between a corner and an arc; arcs with an end on their centre, such as an XZ or YZ arc underG17.- Siemens programs with frames,
TRAORI,CYCLE800, R-parameters, subprograms, loops,G74/G75, aDwith no$TC_DProw, or aDgiven while the next tool is selected ahead of itsM6. - Heidenhain klartext and DIN/ISO programs, notably incremental words, Q-parameters, datum shifts,
PLANE,M128,M127, arc centres, a bareCYCL DEF 7.0,*blocks andTOOL DEF. - Fanuc-family programs with Custom Macro B,
G12.1/G13.1,G05 P,G70/G71, aG04 Xdwell, a dwellPwith a decimal point, aPonG81,G82orG89,G54.1 Pn/G54 PnorG59.1–G59.9. - On SoftNc:
G04/G4dwells in projects whose Fanuc, Mazak, Syntec or SINUMERIK controller was set up by 3.1. - On SoftNc, in projects whose controller was last saved by 3.1.171 or earlier: the
#1–#33,#100–#499,#2001–#2200and#5001… variables Fanuc, Mazak and Syntec programs read, and, last saved by 3.1.169 or earlier,%and program-number lines. - On SoftNc:
G43/G43.4with noHtake the modalH(H0until one is written); the block afterM02/M30cancels tool length, tilt,G41/G42,G81–G89andG12.1, and the one afterEND PGMaCYCL DEForM89; a rotary-onlyG53under RTCP holds the linear axes;M98,M198andG65calls nested deeper thanMaxCallDepth, and the call level ofG66bodies. - On SoftNc: rotary words under modal
G91are increments;G81–G89repeats with A / B / C words or underG91, and cycles whoseG98/G99follows the cycle code; HeidenhainG28andCYCL DEF 8mirror; stroke limits set only in the legacy machine-limits boxes are checked. - On SoftNc: rotary moves of exactly half a turn; position variables (
#5001…) and radius compensation afterG53.1,PLANE,CYCLE800orM140 MBunder a work offset, a tool length or a pivot; a program whose NC-embedded script plays another (PlayNc). - On SoftNc: SINUMERIK programs with absolute rotary words,
ACP()/ACN()or coded positions; on other controls, a rotary axis whose two stroke limits are set less than a turn apart, its words and the angles a tilted plane solves for it. - On SoftNc, a tool change moves the axes to the tooling position; a speed given with no direction runs as clockwise from the first feed move, and an
S0stands the spindle. - On SoftNc: Heidenhain klartext programs with
APPRorDEPblocks, their NC optimization included; the blocks after a Heidenhain cycle call, which keep the feed in effect at the call; on every control, the motion mode a block leaves when it calls a cycle with aG00orG01(orFMAX) of its own. - Machines with a workpiece-side linear axis; plain XYZ moves of table-side rotary programs;
G68.2with A / B / C on fewer than three rotary axes; five-axis CL onClMillingDevice; CL playback, whose steps follow the CL path and take the feed of aFEDRATwritten before the firstGOTO; the steps a play opens with along the tool axis, such as a CL file's first plunges, after an earlier play in the same process. - Inverse kinematics (
XyzabcSolver):G53.1,G68.2,CYCLE800,PLANE SPATIALandLNanswers, tilts from the rotary pole, and the branch chosen inside the travel. - A new session starts the machine at its home position, rotary axes included. On SoftNc, rotary axes with Rapid Feedrates or Home / G28 Reference rows of their own, a 3.1 project's included: their rapid and RTCP feed times,
G12.1,G28and the session's start pose. - On SoftNc, a run started after a Stop with no Reset (A Start after a Stop); on either runner, the selections and NC optimization of a program played again after such a Stop.
- Step counts on non-RTCP rotary blocks and diagonal moves (
LinearResolution_mmcaps tip travel). - Feed per tooth, MRR and cutting forces, which read
MachineMotionStep.ActualTipFeedrate_mmds; cutter engagement and the forces and temperatures of most engaged steps (retrain coefficient sets if that fit matters). From 3.2.55 on, under Feed Per Cycle or Feed Per Tooth, the bottom engagement of flat-bottom cutters and, on their steps down the tool axis, the forces, temperatures, wear, NC optimization feeds and, withEnableDeflectionTransformation, the tool positions after them. - Against 3.2 builds up to 3.2.54: the cutting forces and engagement of a cutter with a Const Helix side contour, played after its APT values were edited in the open project.
- Steps that move the cutter up its own axis, such as retracts at feed or rapid:
IsTouched, MRR, cutting forces and the values read from them, and the rapid-cut warnings of such retracts. - With
EnableDeflectionTransformationon: step counts, the steps' cutter locations,ActualTipFeedrate_mmdsandFeedPerTooth_mm, the stock and the geometry difference,IsTouched, cutter engagement, cutting forces, deflections, temperatures and wear, and the NC optimization feeds and deflection compensation that read them, the first step after a change to another tool and a block whoseM06calls the tool already in the spindle included; under Feed Per Cycle or Feed Per Tooth with an APT cutter, also the rapid-cut warnings andIsRapidCutof a rapid step right after a cut whose contact goes no deeper than the layer the deflected cut left. - Cutting speed, peak axial torque with the spindle torque ratios and NcOpt feeds that read it, and spindle temperature while the spindle stands; with
EnablePhysicsoff, no cutting temperature or wear. - Cutter deflection (
MaxTipDeflectionOnToolRunningCoordinate_um,MaxBottomEdgeDeflectionOnToolRunningCoordinate_um,ReCutDepth_um) and the deflection compensation of NC optimization; a pointed cutter's tip deflection readsNaN. The stress ratio of insert-end, ball-nose and tapered cutters, with the NC optimization feeds it limits, and the mass and shank heat of solid-end cutters saved with a shank of another material and of cutters saved with a<CutterMass_g>element. From 3.2.56 on, every end mill's stress ratio, with the NC optimization feeds it limits, and, under the default inner beam (Flute Dependent Ratio Profile), its cutter deflection, with the deflection compensation of NC optimization, and its shank mass estimate and shank heat, with the cutter temperatures and wear that follow. - The cutting forces, torque and power, and the temperatures, wear, energies, stress ratios and NC optimization feeds that follow, of cutters whose flute contour gives one height twice: a stepped
CustomSpinningProfile, a flat tip given as two points, a Column APT whose Length of Cut equals its Round Radius (Rc), a Cone APT whose cone reaches its full diameter at its Length of Cut. The temperatures and wear of a Column APT whose Length of Cut is shorter than its Round Radius. The shank mass estimate, deflection, stress ratio and shank temperatures of a cutter whose upper beam is anStlFile, aBox3d, aGeomCombinationor a steppedCylindroidinside aTransformationGeom, and the play results of a cutter whose flute or inner beam is aCustomSpinningProfileover a mesh. - Cutter and workpiece temperatures and wear, notably after a tool change, on a play carried on after the cutter's coating layers or shank were edited, and on insert-end cutters with no coating layer; spindle temperature and energies with a legacy
InsistentRatiocontour file, after a spindle capability or environment edit and on a play resumed after a stop; a played step's spindle torque and power ratios, chip mass, plastic depth and thermal stress ratio; from 3.2.55 on, no cutter temperature or wear on steps cut with no tool-house tool of their number. - Spindle temperature,
MaxSpindleTorqueRatio,MaxSpindlePowerRatioand the NC optimization feeds they limit, with a spindle capability saved as oneSpindleSpeedToPower--RPM-to-kWand oneSpindleSpeedToTorque--RPM-to-Nmcurve. - Spindle angles (
MachiningStep.BeginSpindleAngle_deg,MachineMotionStep.PassedSpindleAngle_rad) and the force samples of shot files; removed stock and forces on rotary passes and along tilted tool axes. - Results with a
RakeFaceCuttingPara2dcutting parameter and the trainings that produce one; results with the shipped cutting parameters, workpiece materials,FANUC-aT12-12000ispindle capability and cuttersD12-Rc0.5-CH20andPDST040900T ZrN-A; from 3.2.54 on, results with the shippedFANUC-ROBODRILL-aDiBPlus-HighSpeed-24000rpm,GMN-HSP-230-18000-18-18000rpm,HSD-ES789-24000rpm,Jaeger-Z100-H540.108-S3AW2-40000rpmandJohnford-DMC-SH-BT50-6000rpmspindle capabilities loaded again. - Trainings that used a
MultiFormRakeFaceCuttingParaof one flute form, or aRakeFaceCuttingParaMapof one flute form and no angle table, as their template and use aRakeFaceCuttingPara3dnow: the coefficients they fit for a cutter with a hone radius above 0 (with a hone radius of 0 the six coefficients stay bit for bit the same); and, at any hone radius, the trained file now carries the radial rake angle of the cutter's constant-helix side contour as its anchor rake angle (AnchorRakeAngle_deg, which the results of the old templates did not carry), so the stagnant angle a play reads from it and the physics input fingerprint change too. - Against 3.1.175 and every 3.2 build up to 3.2.55: the thermal stress ratio, and the NC optimization feeds it limits, of a cutter whose flute material gives a yield strength, which the ratio now divides by, as the stress ratio does, in place of the tensile strength; and of a cutter whose flute material gives neither strength, which reads
NaN. - Optimized NC files: unchanged lines, unparsable ones included, stay as written, and output follows the source's decimal digits and encoding.
- NC optimization feeds of steps with almost no load or a thin chip, of steps with no load limit whose relief face meets the work and, under a target cutting force (
NcOptOption.PreferedForce_N), of ramps, plunges and five-axis steps; of programs afterResetRuntime()in a mission that changes the option or after aBeginPreserverange an earlier program left open, and of a play optimized after a cutter's setup angle or a cutting parameter changed; the per-step optimization log's status words and itsFrtByUnTouched/FrtByNoForceBrief/FrtByReliefAngle_mmrows, and from 3.2.56 on its stress-ratio rows, namedFrtByStressRatio_mmandFrtByThermalStressRatio_mm. An NC Optimization Config (NcOptOptionCommand) keeps its values when scripts below it setOpt*: check one an earlier build saved after such a run. - NC optimization of programs that call a subprogram or a macro after a jump — a
GOTO, or a loop that goes back to its head or out past its end — and of programs whose NC-embedded script plays another withPlayNc: the optimized files and their feeds. - Sensor files mapped on a host whose decimal separator is not a period,
ForceAccelShotacceleration built from g, mappings over recordings with gaps, and CSV play step times and the step each extra column lands on; selections anchored before a session's first step or just afterResetRuntime(), aFirstTouchanchor on a lone touched end step, and a bound moved by a negativeShiftTime_s; refit trainings fitted on such data. - On a host whose decimal separator is not a period: numbers and dates read from project, cutter, NC, CSV and ASCII STL files through the API, a script or the web API, and the force CSVs and the text of
vec3d_t,vec2d_t,mat4d_tandPolar3dwritten there; export again an ASCII STL written with decimal commas, which does not load. On a host set to Turkish: lower-case NC keywords. - Geometry-difference deviations and coloured cells; collision reports, which add the holder and the shank against the stock and a plunge before the spindle has a speed; from 3.2.56 on, the collision check of a part whose mesh has a triangle with a coordinate that is not a number or is infinite, which leaves that triangle out and says so once for that part.
- Plays whose raw geometry is a
GeomCombinationof several bodies: the stock, and the removed stock, forces, collision reports and geometry differences that follow from it. - Messages: a stroke-limit report, once for each step past a limit and on that step;
Script-Run--Exception, which carries the script's own exception, and none at a Stop while an NC-embedded script plays another program;ScriptCommand-Run--Fault, said once with the exception's own message, when a Script command's script throws during a run — before or after anawait, a cancellation of its own (OperationCanceledException,TaskCanceledException) included — the mission going on to its next command, while an exception from an action the script returns, such asreturn RunNcFile(…), stops the mission withPlayer-Run--Fault; from 3.2.55 on, the tool changesToolChange--UnsafePosewarns of. - HardNc changes tools on
M06/TOOL CALL, not on a changedT; unsetHardNcEnvtooling defaults are XYZ = NaN, NaN, 0 and ABC all NaN. - API: an executed
SyntaxPiece.JsonObjectis a read-only snapshot per call;SyntaxPiece.SentenceIndexis numbered across the session;MathUtil.Convert_inchdmin_To_mmdsreturns mm/s. - API:
PairZrUtil.GetRByZon aList<PairZr>interpolates;MotionUtil.InterpolationandMatInterpolationKit.GetInterpolationfollow the shortest rotation from the first pose; from 3.2.56 on,PairZrUtil.GetZrListof a mesh or of a geometry that states no Z-R list of its own, andMillingEngagementUtil.GetZToDzListover a height list that repeats a height or turns back down. - API:
GeneralTransform.GetInverseTransformerof a scaled transform;ColorUtil.GetDiscreteRgb,GetDiscreteRGB_EnvandToDualHexString;EnumerableUtil.GetIntensiveItems, which throws on a resolution that is not positive;MillingTraining.Convert;RakeFaceCuttingPara3d.FrictionAngle_rad/_deg. - API: in
CollisionUtil.Detectand a step's collision check (CollisionIndexPair.CollisionFlag,MechCollisionResult.PrimaryCollisionFlagandCollidableToFlagDictionary), two parts, or a part and the stock, whose bounding boxes lie farther apart than the pair'sSafeDistancecan readOUTSIDE_SAFE_DISTANCEwhere earlier builds readMAY_INSIDE_SAFE_DISTANCE;Collisionanswers and the collision reports stay the same. - Web API: from 3.2.54 on, the
Individualaspect ofGET api/execution/strip-chartserves theMC.<axis>series of a wrap-around rotary axis between 0° and 360°; the steps keep the continuous angle. - Web API: from 3.2.55 on, the
Individualaspect ofGET api/execution/strip-chartserves an item'sunitas display text,mm/minrather thanmmdmin, and for a color tree's key an item'smin/maxand the keys of itsidColors.colorsare the leaves' lanes, not their ids; the rows ofGET api/execution/step-propertiescarryunitLabelandsource. - Web API: from 3.2.56 on, with a project open,
GET api/execution/step-propertieslists HiNC's built-in color treesMachiningStateandMachiningStateGeometryand its rows carrygroupandbuiltInTree; thenotesof a tree inGET api/execution/strip-chartandGET api/execution/color-guideare{ code, message, args }objects, not strings. - Web API: from 3.2.56 on,
MachiningStateis a physics key: with Show Physics Options offGET api/execution/step-propertiesleaves it out, and while it is the project's color index,currentKeyofGET api/execution/step-propertiesanswersMachiningStateGeometry;GET api/execution/strip-chartasked forMachiningStateanswerspending: truewithitemsempty, and asked forMachiningStateGeometryitscolorTreecarriesstandsInFor: "MachiningState". - Web API: from 3.2.56 on, the
categoriesofGET api/preference/step-present-keyscarry one more stable code,engineeringView, which takes every color tree's key out ofcustom. - Web API: from 3.2.56 on,
GET api/execution/step-color-trees/{key}answers a built-in tree where the project holds none under its key, and under review, while theluggageStateof thereviewinGET api/Execution/statusreadsLoaded,GET api/execution/cycle-line/forceandGET api/execution/cycle-line/sim-spindle-momentanswer with the recorded step's samples. - Loading: a machine under
<SolidMachiningChainSource>loads, and so does an equipment's spindle tool saved as<StickMachiningTool>or as a bare<XmlSource>; machines withW/Tend anchors or nowload, but a run on one with nowstops at its start; from 3.2.56 on, a project whose file holds its motion resolution as<FixedNcResolution>plays at the Fixed linear and rotary resolutions it holds, so its step counts and step results change. - The run skips a mission entry saved as
<CommandEntry IsEnabled="false">, and runs the commands of a mission saved as<ListCommand><CommandList>. - From 3.2.55 on, the step file and the step CSV export carry three more columns,
IsRapid,StressOverloadRevolutionsandIsRapidCut; a comparison by column position made on an earlier build shifts. - The step file and the step CSV export carry the spindle's overload runs by cause —
SpindleTorqueOverloadRevolutions,SpindleTorqueOverloadPeakRatio,SpindlePowerOverloadRevolutionsandSpindlePowerOverloadPeakRatio, which replace 3.2.55'sMaxBreakageRatio,SpindleOverloadRevolutionsandSpindleOverloadPeakRatio; a comparison by column position made on an earlier build shifts, and one by those three names finds no column. - The step file and the step CSV export name the columns of the stress ratio, the thermal stress ratio and the stress overload revolutions
StressRatio,ThermalStressRatioandStressOverloadRevolutions, the new keys; the columns stand in the alphabetical order of their keys, so these move: a comparison by column position made on an earlier build shifts, and one by the old names finds no column. - From 3.2.56 on, the step file and the step CSV export carry four more columns,
StressCriticalHeight_mm,StressCriticalZone,StressOnsetHeight_mmandStressOnsetZone; a comparison by column position made on an earlier build shifts. - A play result that 3.2.55's Record Play Result saved is still reviewed, its steps reading those four as not recorded (a height NaN, a zone 0); record the play again to have them.
- From 3.2.56 on, with a project open, the step file and the step CSV export carry two more columns,
MachiningStateandMachiningStateGeometry, the leaves of HiNC's built-in color trees; a comparison by column position shifts. - From 3.2.56 on, the colours of a run coloured by
StressOverloadRevolutionswith no colour range saved for the key: the first range runs 0 to 10 revolutions, not 0 to 1.
Re-baseline comparisons made on 3.1.