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 |
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 |
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.GetThermalYieldRatio(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) |
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.
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. YieldingStressRatioon 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 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. - 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. - 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. A request still answers200and Shell says why: 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.
- 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. - A class implementing
IXyzabcMachineTooladdsGetSpindleTransformer(); returning null keeps the machine as it played before. A class implementingIStructureMaterialanswersYieldingStressLimit_MPa, or the yielding 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. - 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. 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.- 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. - 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. - 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 yielding 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. - 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 yield 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. - 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. An NC Optimization Config (NcOptOptionCommand) keeps its values when scripts below it setOpt*: check one an earlier build saved after such a run. - 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.
- 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. - 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. - 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. - 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. - 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 six more columns,
IsRapid,MaxBreakageRatio,SpindleOverloadRevolutions,SpindleOverloadPeakRatio,YieldingStressOverloadRevolutionsandIsRapidCut; a comparison by column position made on an earlier build shifts.
Re-baseline comparisons made on 3.1.