IPC-CFX message workbench
Look up IPC-CFX (IPC-2591) messages by topic, generate a message envelope from a form, validate messages and logs against definitions derived from the official IPC CFX SDK, and see how CFX travels over AMQP 1.0: exchange, subject, queue, and direct requests. It does not connect to any broker.
Message definitions derived from the IPC CFX SDK 2.1.1 source (Apache-2.0, commit 880255d, CFX 2.1), not from the IPC-2591 document itself. Nothing here connects to a broker or an endpoint.
Topics and messages
183 messages shown.
An event is published to everyone who subscribes (WorkCompleted, FaultOccurred …); a request goes to one endpoint, which answers with the matching response. The search needs JavaScript; without it the whole catalogue is shown.
CFX · 10
Root CFX Topic. All CFX endpoints must implement this topic
CFX.AreYouThereRequestRequestAllows any CFX endpoint to determine if another particular CFX endpoint is present on a CFX network
Members: CFXHandle (string)
CFX.AreYouThereResponseResponseAllows any CFX endpoint to determine if another particular CFX endpoint is present on a CFX network
Members: Result (RequestResult), CFXHandle (string), RequestNetworkUri (string), RequestTargetAddress (string)
CFX.EndpointConnectedEventSent when an Endpoint joins a CFX network after it has been established
Members: CFXHandle (string), RequestNetworkUri (string), RequestTargetAddress (string)
CFX.EndpointShuttingDownEventSent when an endpoint is about to shut down and disconnect from a CFX network
Members: CFXHandle (string)
CFX.GetEndpointInformationRequestRequestRequests detailed information about a single endpoint, as specified by its CFX Handle
Members: CFXHandle (string)
CFX.GetEndpointInformationResponseResponseAllows any CFX endpoint to request the capabilities of a specified single endpoint
Members: Result (RequestResult), EndpointInformation (Endpoint)
CFX.HeartbeatEventsince 1.2All endpoints are obligated to publish a Heartbeast message on all Publish type no less than once every 5 minutes
Members: CFXHandle (string), HeartbeatFrequency (duration (TimeSpan)), ActiveFaults (list of Fault), ActiveRecipes (list of ActiveRecipe)
CFX.NotSupportedResponseResponseAllows a CFX endpoint to indicate to the sender of a request that it is not able to answer to this particular request There can be several reasons : - Unknown request/response message : appeared in a more recent version of CFX than the one used by the…
Members: RequestResult (RequestResult)
CFX.WhoIsThereRequestRequestAllows any CFX endpoint to discover all of the other endpoints participating in this CFX network, and their capabilities
Members: SupportedTopicQueryType (SupportedTopicQueryType), SupportedTopics (list of SupportedTopic)
CFX.WhoIsThereResponseResponseAllows any CFX endpoint to discover all of the other endpoints participating in this CFX network, and their capabilities
Members: Result (RequestResult), CFXHandle (string), RequestNetworkUri (string), RequestTargetAddress (string)
CFX.InformationSystem.DataTransfer · 2
CFX Topic implemented by enterprise information systems (such as an MES or ERP system) and other types of endpoints capable of performing secure data transfer
CFX.InformationSystem.DataTransfer.FileTransferRequestRequestsince 1.4Sent by an endpoint to another endpoint to initiate a file transfer
Members: FileTitle (string), FileLocation (string), TransferDirection (FileTransferDirection), TransferMode (FileTransferMode), File (File)
CFX.InformationSystem.DataTransfer.FileTransferResponseResponsesince 1.4Sent by an endpoint in response to a FileTransferRequest. File transfers may proceed either from the initiator/requester to the recipient (PUSH Mode), OR from recipient to initiator/requester (PULL Mode)
Members: Result (RequestResult), FileTitle (string), FileLocation (string), TransferMode (FileTransferMode), File (File)
CFX.InformationSystem.OperatorValidation · 2
CFX Topic implemented by enterprise information systems (such as an MES or ERP system) that are capable of validating operators qualified to perform certain tasks
CFX.InformationSystem.OperatorValidation.ValidateOperatorRequestRequestsince 1.7Request that an operator take action now or be responsible for a process endpoint
Members: Operator (Operator)
CFX.InformationSystem.OperatorValidation.ValidateOperatorResponseResponsesince 1.7Response to a request that the operator's login was successful or not
Members: Result (RequestResult)
CFX.InformationSystem.ProductionScheduling · 2
CFX Topic implemented by enterprise information systems (such as an MES or ERP system) that are capable of scheduling production orders
CFX.InformationSystem.ProductionScheduling.WorkOrdersScheduledEventSent when a Work Order (or Work Order sub-batch) has been scheduled to be executed at a particular work area at a particular time
Members: ScheduledWorkOrders (list of ScheduledWorkOrder)
CFX.InformationSystem.ProductionScheduling.WorkOrdersUnscheduledEventSent when a previously scheduled Work Order (or Work Order sub-batch) has been unscheduled at a particular work area at a particular time
Members: ScheduledWorkOrderIdentifiers (list of ScheduledWorkOrderIdentifier)
CFX.InformationSystem.TopicValidation · 2
CFX Topic implemented by an endpoint which allows other endpoints to discover the validation types supported by a the responding endpoint
CFX.InformationSystem.TopicValidation.ValidateTopicRequestRequestsince 2.0Request that a specific topic needs to be validated before continuing the process / operations
Members: ValidationTopic (ValidationTopic), ValidationTopicData (ValidationData)
CFX.InformationSystem.TopicValidation.ValidateTopicResponseResponsesince 2.0Response to a request that a specific topic (e.g., tool, material carrier, recipe, material) was successfull validated or not
Members: ValidationTopic (ValidationTopic), Result (list of RequestResult)
CFX.InformationSystem.UnitValidation · 2
CFX Topic implemented by enterprise information systems (such as an MES or ERP system) capable of validating the production history and status of a production unit, and its readiness for processing
CFX.InformationSystem.UnitValidation.ValidateUnitsRequestRequestSent from a process endpoint in order to validate the identifier of the next production unit
Members: Validations (list of ValidationType), PrimaryIdentifier (string), HermesIdentifier (string), Units (list of UnitPosition), Lane (integer or null)
CFX.InformationSystem.UnitValidation.ValidateUnitsResponseResponseSent from a process endpoint in order to validate the identifier of the next production unit
Members: Result (RequestResult), PrimaryResult (ValidationResult), ValidationResults (list of ValidationResult)
CFX.InformationSystem.WorkOrderManagement · 5
CFX Topic implemented by enterprise information systems (such as an MES or ERP system) involved in the creation and management of production Work Orders and Work Order sub-batches
CFX.InformationSystem.WorkOrderManagement.WorkOrderQuantityUpdatedEventSent when the status of a Work Order (or Work Order sub-batch) has been updated
Members: WorkOrderIdentifier (WorkOrderIdentifier), NewQuantity (number), PreviousQuantity (number or null)
CFX.InformationSystem.WorkOrderManagement.WorkOrderStatusUpdatedEventSent when the status of a Work Order (or Work Order sub-batch) has been updated
Members: WorkOrderIdentifier (WorkOrderIdentifier), NewStatus (WorkOrderStatus), PreviousStatus (WorkOrderStatus)
CFX.InformationSystem.WorkOrderManagement.WorkOrdersCreatedEventSent when a new production Work Order is created by an information system (such as ERP or MES)
Members: NewOrders (list of WorkOrder)
CFX.InformationSystem.WorkOrderManagement.WorkOrdersDeletedEventSent when a Work Order (or sub-batch of a Work Order) has been deleted within an information system (such as ERP or MES)
Members: WorkOrderIdentifiers (list of WorkOrderIdentifier)
CFX.InformationSystem.WorkOrderManagement.WorkOrdersUpdatedEventA Work Order (or Work Order sub-batch) has been modified / updated within an information systsem (such as ERP or MES)
Members: UpdatedOrders (list of WorkOrder)
CFX.Maintenance · 12
CFX Topic implemented by endpoints which manage maintenance information
CFX.Maintenance.GetResourceInformationRequestRequestsince 1.3Requests detailed resource information about a single endpoint, as specified by its CFX Handle
Members: CFXHandle (string)
CFX.Maintenance.GetResourceInformationResponseResponsesince 1.3Allows any CFX endpoint to request the resource and sub-resources of a specified single endpoint
Members: Result (RequestResult), ResourceInformation (Resource)
CFX.Maintenance.GetResourceMaintenanceAndServiceRequestRequestsince 1.3Requests detailed resource maintenance information about a single endpoint, as specified by its CFX Handle
Members: CFXHandle (string)
CFX.Maintenance.GetResourceMaintenanceAndServiceResponseResponsesince 1.3Allows any CFX endpoint to request the resource and sub-resources maintenance and services of a specified single endpoint
Members: Result (RequestResult), Machine (Resource), MachineServiceAndMaintenanceData (list of ServiceAndMaintenanceData)
CFX.Maintenance.GetResourceMaintenanceStatusRequestRequestsince 1.3Dynamic response from external systems with detailed information about a resource maintenance status
Members: Machine (Resource), ResourceMaintenanceDetails (list of ResourceInformation)
CFX.Maintenance.GetResourceMaintenanceStatusResponseResponsesince 1.3Dynamic response from external systems with detailed information about a resource maintenance status
Members: Result (RequestResult), Machine (Resource), ResourceMaintenanceDetails (list of ResourceInformation)
CFX.Maintenance.GetResourceSetupRequestRequestsince 1.3Requests detailed resource setup information about a single endpoint, as specified by its CFX Handle
Members: CFXHandle (string)
CFX.Maintenance.GetResourceSetupResponseResponsesince 1.3Allows any CFX endpoint to request the resource and sub-resources setup of a specified single endpoint
Members: Result (RequestResult), ResourceSetup (Resource)
CFX.Maintenance.ResourceInformationEventEventsince 1.3Allows any CFX endpoint to send the resource and sub-resources of a specified single endpoint
Members: EventDateTime (date and time or null), ResourceInformation (Resource)
CFX.Maintenance.ResourceMaintenanceAndServiceEventEventsince 1.3Allows any CFX endpoint to send the resource and sub-resources maintenance and services of a specified single endpoint
Members: EventDateTime (date and time or null), Machine (Resource), MachineServiceAndMaintenanceData (list of ServiceAndMaintenanceData)
CFX.Maintenance.ResourceMaintenanceStatusEventEventsince 1.3Dynamic event from external systems with detailed information about a resource maintenance status
Members: EventDateTime (date and time or null), Machine (Resource), ResourceMaintenanceDetails (list of ResourceInformation)
CFX.Maintenance.ResourceSetupEventEventsince 1.3Allows any CFX endpoint to send data about the resource and sub-resources setup
Members: EventDateTime (date and time or null), ResourceSetup (Resource)
CFX.Materials.Management · 13
Messages related to the management of raw materials. Includes creation and labeling of material instances, decommissioning spent materials, etc
CFX.Materials.Management.BlockMaterialsRequestRequestA request to block one or more particular lots or instances of material from use in production
Members: MaterialPackageIdentifiers (list of string), Reason (BlockReason), Comments (string), Blocker (Operator)
CFX.Materials.Management.BlockMaterialsResponseResponseResponse to a request block one or more instances of material from use in production
Members: Result (RequestResult), MaterialsPackagesNotBlocked (list of string)
CFX.Materials.Management.GetMaterialInformationRequestRequestA request (typically to an factory level software system) to obtain detailed information about a particular material package (or collection of material packages)
Members: MaterialPackageIdentifiers (list of string)
CFX.Materials.Management.GetMaterialInformationResponseResponseResponse to a request to obtain detailed information about one or more material packages
Members: Result (RequestResult), Materials (list of MaterialPackageDetail)
CFX.Materials.Management.MaterialsChainSplitEventSent when a certain material package chain is is been modified by opening the splice plate and therefore create 2 material chains out of one
Members: SplittedMaterialPackage (MaterialPackage), RemainingMaterialPackage (MaterialPackage)
CFX.Materials.Management.MaterialsConsumedEventSent by a process endpoint when materials are consumed
Members: ConsumedMaterials (list of ConsumedMaterial)
CFX.Materials.Management.MaterialsInitializedEventSent whan one or more new material packages are introduced into the factory environment
Members: Materials (list of MaterialPackageDetail)
CFX.Materials.Management.MaterialsJoinedEventSent when two separate material packages (containing the same part) are joined together
Members: LeadingMaterialPackage (MaterialPackage), TrailingMaterialPackage (MaterialPackage)
CFX.Materials.Management.MaterialsModifiedEventSent when the attributes of one or more specific material packages have been altered
Members: Reason (MaterialModifyReason), Materials (list of MaterialPackageDetail)
CFX.Materials.Management.MaterialsRetiredEventSent when one or more material packages are fully exhausted / depleted
Members: Materials (list of MaterialPackage)
CFX.Materials.Management.MaterialsSplitEventSent when a a certain quantity of material is removed from a material package to form a new material package
Members: SourceMaterialPackageIdentifier (string), SourceMaterialPackageRemainingQuantity (number), NewMaterialPackageIdentifier (string), NewMaterialPackageQuantity (number)
CFX.Materials.Management.UnblockMaterialsRequestRequestA request to unblock one or more particular lots or instances of material from use in production
Members: MaterialPackageIdentifiers (list of string), Comments (string), Unblocker (Operator)
CFX.Materials.Management.UnblockMaterialsResponseResponseResponse to a request to unblock one or more particular lots or instances of material from use in production
Members: Result (RequestResult)
CFX.Materials.Management.MSDManagement · 5
Specialized messages related to moisture sensitive materials management
CFX.Materials.Management.MSDManagement.MaterialsExpiredEventSent when one or more MSD material packages have reached their maximum exposure time, and may no longer be used in production (unless reconditioned)
Members: Materials (list of MaterialPackageDetail)
CFX.Materials.Management.MSDManagement.MaterialsOpenedEventSent when one or more MSD material packages have been opened and exposed to the environment
Members: Materials (list of MaterialPackageDetail)
CFX.Materials.Management.MSDManagement.MaterialsPlacedInDryStorageEventSent when one or more MSD material packages have been placed into dry storage
Members: Materials (list of MaterialPackageDetail)
CFX.Materials.Management.MSDManagement.MaterialsRemovedFromDryStorageEventSent when one or more MSD material packages have been removed from dry storage
Members: Materials (list of MaterialPackageDetail)
CFX.Materials.Management.MSDManagement.MaterialsRestoredEventSent when one or more MSD material packages have been reconditioned, and restored for use in production
Members: Materials (list of MaterialPackageDetail)
CFX.Materials.Storage · 10
Related to events that occur when materials are stored, including consumption
CFX.Materials.Storage.GetLoadedMaterialsRequestRequestA request to a material storage endpoint to obtain a list of all the materials currently stored within the endpoint
Members: LocationIdentifiers (list of string), ResourceUniqueIdentifier (string)
CFX.Materials.Storage.GetLoadedMaterialsResponseResponseA response to a request to a material storage endpoint to obtain a list of all the materials currently stored within the endpoint
Members: Result (RequestResult), Materials (list of MaterialLocation)
CFX.Materials.Storage.MaterialCarriersLoadedEventSent when a material carrier (typcially containing 1 or more material packages) is loaded at an endpoint
Members: Carriers (list of MaterialCarrierLocation)
CFX.Materials.Storage.MaterialCarriersUnloadedEventSent when a material carrier (typcially containing 1 or more material packages) is unloaded at an endpoint
Members: CarrierIdentifiers (list of string)
CFX.Materials.Storage.MaterialsEmptyEventSent when one or more material packages stored at a particular location become fully exhausted / depleted
Members: EmptyMaterials (list of MaterialLocation)
CFX.Materials.Storage.MaterialsLoadedEventSent when a material package (potentially contained within a material carrier) is loaded at an endpoint
Members: Materials (list of MaterialLocation)
CFX.Materials.Storage.MaterialsUnloadedEventSent when a material package (potentially contained within a material carrier) is unloaded at an endpoint
Members: MaterialPackageIdentifiers (list of string)
CFX.Materials.Storage.SplicePointDetectedEventSent when an endpoint detects a splice point. A splice point is a juncture between two different material packages of the same part that have been pre-joined prior to loading at the material location, or were joined-in-place during production
Members: DepletedMaterial (MaterialLocation), NewlyActiveMaterial (MaterialLocation)
CFX.Materials.Storage.ValidateStationSetupRequestRequestRequest to a process endpoint to validate that the currently loaded materials comply with the setup requirements supplied in this request
Members: SetupRequirements (StationSetupRequirements)
CFX.Materials.Storage.ValidateStationSetupResponseResponseResponse to a request to a process endpoint to validate that the currently loaded materials comply with the setup requirements supplied by the request
Members: Result (RequestResult)
CFX.Materials.Transport · 10
Messages used for the transportation of raw materials from one location in the factory to another location
CFX.Materials.Transport.CheckpointReachedEventSent when a group of materials or production units that is being transported through the factory environment arrives at a way point along its path source to destination
Members: TransportOrderId (string), Comments (string), Status (TransportOrderStatus), TrackedBy (Operator), RelatedWorkOrderId (string), Checkpoint (string), FinalDestination (string), NextCheckpoint (string)
CFX.Materials.Transport.CreateTransportOrderRequestRequestsince 2.0Message request to create transport order; it shall contain all necessary data for one or more transports while leaving sufficient flexibility to make use of different Fleet Manager capabilities
Members: TransportOrderId (string), RelatedWorkOrderId (string), Materials (TransportedMaterial), Source (string), FinalDestination (string), StartedBy (string), Priority (TransportPriority), TargetDeliveryTime (date and time)
CFX.Materials.Transport.CreateTransportOrderResponseResponsesince 2.0Message response for a corresponding transport order request
Members: TransportOrderId (string), FleetManagerTransportOrderId (string), Result (RequestResult)
CFX.Materials.Transport.GetTransportOrderStatusRequestRequestA request to an endpoint (such as an upper level system, MES, ERP, etc.) to check the status of a particular transport order
Members: TransportOrderId (string)
CFX.Materials.Transport.GetTransportOrderStatusResponseResponseA response to a request to an endpoint (such as an upper level system, MES, ERP, etc.) to check the status of a particular transport order
Members: Result (RequestResult), TransportOrderId (string), FinalDestination (string), Status (TransportOrderStatus), History (list of TransportOrderHistory)
CFX.Materials.Transport.StartTransferRequestRequestsince 2.0This message informs a machine that an AMR has arrived at its location and materials can be transferred from/to the AMR to/from the machine
Members: TransportOrderId (string), RelatedWorkOrderId (string), Materials (TransportedMaterial), StartedBy (string)
CFX.Materials.Transport.StartTransferResponseResponsesince 2.0This message is the response to the corresponding StartTransferRequest
Members: TransportOrderId (string), Result (RequestResult)
CFX.Materials.Transport.TransportOrderCompletedEventSent when a transport order has arrived at its final destination
Members: TransportOrderId (string), Comments (string), AcceptedBy (Operator), RelatedWorkOrderId (string), FinalDestination (string)
CFX.Materials.Transport.TransportOrderStartedEventSent when a new transport order is initiated. A transport order is a directive to move materials / WIP / production units from one location to another
Members: TransportOrderId (string), StartedBy (Operator), Comments (string), Status (TransportOrderStatus), RelatedWorkOrderId (string), Source (string), FinalDestination (string), NextCheckpoint (string) … 9 in all
CFX.Materials.Transport.TransportOrderStatusChangedEventSent when the status of an existing transport order has changed
Members: TransportOrderId (string), Comments (string), Status (TransportOrderStatus), UpdatedBy (Operator), RelatedWorkOrderId (string), Source (string), FinalDestination (string), NextCheckpoint (string)
CFX.Production · 46
CFX Topic implemented by endpoints which are involved in the process of creating and testing production units
CFX.Production.ActivateRecipeRequestRequestUsed to activate a named recipe at the process endpoint. The response indicates whether this was successful or not
Members: RecipeName (string), Revision (string), Lane (integer or null), Stage (Stage)
CFX.Production.ActivateRecipeResponseResponseResponse to a request to activate a named recipe at the process endpoint
Members: Result (RequestResult)
CFX.Production.ActivitiesExecutedEventIndicates that one or more activities have been performed in the course of processing one or more production units
Members: TransactionID (GUID), Stage (Stage), Activities (list of Activity)
CFX.Production.BlockMaterialLocationsRequestRequestSent to a process endpoint to block or disable a particular material setup location
Members: Reason (BlockReason), Comments (string), Locations (list of MaterialLocation)
CFX.Production.BlockMaterialLocationsResponseResponseSent to a process endpoint to block or disable a particular material setup location
Members: Result (RequestResult)
CFX.Production.GetActiveRecipeRequestRequestUsed to request the name of the recipe that is activated at a process endpoint
Members: Lane (integer or null), Stage (Stage)
CFX.Production.GetActiveRecipeResponseResponseUsed to request the name of the recipe that is activated at a process endpoint
Members: Result (RequestResult), ActiveRecipeName (string), ActiveRecipeRevision (string)
CFX.Production.GetAvailableRecipesRequestRequestsince 1.4This message is used to request a process endpoint for the available recipes
Members: Path (string), MaxCount (integer)
CFX.Production.GetAvailableRecipesResponseResponsesince 1.4Response to a request of getting the available recipes. The response includes a list of recipes (name, revision), but not their data
Members: Result (RequestResult), ActualCount (integer), RecipeCount (integer), Recipes (list of RecipeIdentifier)
CFX.Production.GetRecipeRequestRequestThis message is used to request a process endpoint for the details of a named recipe
Members: RecipeName (string), Revision (string)
CFX.Production.GetRecipeResponseResponseThis message is used to request a process endpoint for the details of a named recipe
Members: Result (RequestResult), Recipe (Recipe)
CFX.Production.GetRequiredSetupRequestRequestSent to a process endpoint to request the setup requirements of the active recipe
Members: Lane (integer or null), Stage (Stage)
CFX.Production.GetRequiredSetupResponseResponseResponse from a process endpoint to a request to obtain the setup requirements of the active recipe
Members: Result (RequestResult), RecipeName (string), RecipeRevision (string), Lane (integer or null), Stage (Stage), SetupRequirements (StationSetupRequirements)
CFX.Production.GetUnitInfoRequestRequestsince 1.4This message is used to request a process endpoint for the details of a list of Unit
Members: PrimaryIdentifier (string), HermesIdentifier (string), UnitIdentifier (string)
CFX.Production.GetUnitInfoResponseResponsesince 1.4Response from a process endpoint to a request to obtatin Unit information
Members: Result (RequestResult), PrimaryIdentifier (string), HermesIdentifier (string), UnitCount (integer), Units (list of UnitInfo)
CFX.Production.LocalRecipeChangedEventsince 2.0Sent by a process endpoint to indicate the activation of a recipe by its name
Members: TransactionID (GUID), Lane (integer or null), Stage (Stage), LocalRecipeChanges (list of LocalRecipeChange)
CFX.Production.LockStationRequestRequestRequest that the endpoint cease active operation (locked) as soon as practically possible at a process endpoint
Members: Lane (integer or null), Stage (Stage), Reason (LockReason), Requestor (Operator)
CFX.Production.LockStationResponseResponseResponse to a request that the endpoint cease active operation (locked) as soon as practically possible at a process endpoint
Members: Result (RequestResult)
CFX.Production.OperatorActivatedEventIndicates that an operator is now active at or responsible for a process endpoint
Members: Operator (Operator)
CFX.Production.OperatorDeactivatedEventIndicates that an activated operator is no longer active or responsible at a process endpoint
Members: Operator (Operator)
CFX.Production.ReadingsRecordedEventA process endpoint uses this message to send a data object that has been acquired for example from a sensor or a reading taken during processing of the unit
Members: TransactionId (GUID or null), Readings (list of Reading)
CFX.Production.RecipeActivatedEventSent by a process endpoint to indicate the activation of a recipe by its name
Members: RecipeName (string), Revision (string), Lane (integer or null), Stage (Stage), ExpectedCycleTime (number), ExpectedWorkTime (number or null), ExpectedUnitsPerWorkTransaction (number), NumberOfComponentsPerUnit (number) … 12 in all
CFX.Production.RecipeDeactivatedEventsince 1.2Sent by a process endpoint to indicate the deactivation of a recipe by its name
Members: RecipeName (string), Revision (string), Lane (integer or null), Stage (Stage), WorkOrderIdentifier (WorkOrderIdentifier)
CFX.Production.RecipeModifiedEventSent by a process endpoint to indicate that a change has been made to a specified named recipe
Members: RecipeName (string), Revision (string), ModifiedBy (Operator), Reason (RecipeModificationReason), Notes (string), WorkOrderIdentifier (WorkOrderIdentifier)
CFX.Production.SetupRequirementsChangedEventSent whenever the setup requirement of materials, tools, etc. are changed for any reason at a process endpoint
Members: Lane (integer or null), Stage (Stage)
CFX.Production.ToolsCleanedEventsince 1.5This message is used when a tool such as stencil or squeegee is loaded into a cleaning machine
Members: TransactionID (GUID), Tools (list of Tool), CleaningSteps (list of CleaningStep)
CFX.Production.ToolsLoadedEventsince 1.5This message is used when a tool such as stencil or squeegee is loaded into a cleaning machine
Members: TransactionID (GUID), Tools (list of Tool)
CFX.Production.ToolsUnloadedEventsince 1.5This message is used when a tool such as stencil or squeegee is unloaded from a cleaning machine
Members: TransactionID (GUID), Tools (list of Tool)
CFX.Production.ToolsUsedEventSent by a process endpoint when one or more tools are used in the course of performing an assembly operation
Members: TransactionId (GUID), UsedTools (list of ToolUsed)
CFX.Production.UnblockMaterialLocationsRequestRequestSent to a process endpoint to release a material locations block which was put into place by a previously sent BlockMaterialLocationsRequest
Members: Locations (list of MaterialLocation)
CFX.Production.UnblockMaterialLocationsResponseResponseResponse to UnblockMaterialLocationsRequest
Members: Result (RequestResult)
CFX.Production.UnitsArrivedEventSent when production units physically arrives at a process endpoint, prior to any work or other activity commencing
Members: PrimaryIdentifier (string), HermesIdentifier (string), UnitCount (integer), Units (list of UnitPosition), Lane (integer or null)
CFX.Production.UnitsDepartedEventSent by a process endpoint when units physically depart from a process endpoint
Members: PrimaryIdentifier (string), HermesIdentifier (string), UnitCount (integer), Units (list of UnitPosition), Lane (integer or null)
CFX.Production.UnitsDisqualifiedEventSent by a process endpoint to identify that a specific production unit is disqualified or scrapped
Members: PrimaryIdentifier (string), HermesIdentifier (string), Reason (DisqualificationReason), Comments (string), UnitCount (integer), Units (list of UnitPosition)
CFX.Production.UnitsInitializedEventSent when one or more production units are first introduced into the production process flow
Members: TransactionID (GUID or null), PrimaryIdentifier (string), HermesIdentifier (string), WorkOrderIdentifier (WorkOrderIdentifier), UnitCount (integer), Units (list of UnitPosition)
CFX.Production.UnlockStationRequestRequestRequest that a process endpoint resume production, following a previous lock
Members: Lane (integer or null), Stage (Stage), Requestor (Operator)
CFX.Production.UnlockStationResponseResponseResponse to a request for a process endpoint to resume production, following a previous lock
Members: Result (RequestResult)
CFX.Production.UpdateRecipeRequestRequestThis message is used to send a named recipe to a process endpoint
Members: Overwrite (true / false), Recipe (Recipe), Reason (RecipeModificationReason or null)
CFX.Production.UpdateRecipeResponseResponseThis message is used to send a named recipe to a process endpoint
Members: Result (RequestResult)
CFX.Production.WorkCompletedEventSent by a process endpoint when all work has been completed at a process endpoint
Members: TransactionID (GUID), Result (WorkResult), PrimaryIdentifier (string), HermesIdentifier (string), UnitCount (integer), Units (list of UnitPosition), PerformanceImpacts (list of PerformanceImpact)
CFX.Production.WorkOrderActionExecutedEventsince 1.2Sent when a non-added value action (out of production) relative to a work order is started, aborted or completed by a process endpoint
Members: WorkOrderActionInstanceId (GUID), WorkOrderIdentifier (WorkOrderIdentifier), TimeStamp (date and time), Type (WorkOrderActionType), State (WorkOrderActionState), Comments (string), RelevantSurface (Surface), RecipeName (string) … 10 in all
CFX.Production.WorkStageCompletedEventSent by a process endpoint to indicate that a stage has been completed
Members: TransactionID (GUID), Stage (Stage), Result (WorkResult), PerformanceImpacts (list of PerformanceImpact)
CFX.Production.WorkStagePausedEventSent when activity pauses for some reason at a stage of the process endpoint
Members: TransactionID (GUID), Stage (Stage), PauseReason (WorkStagePauseReason)
CFX.Production.WorkStageResumedEventSent when activity recommences at a stage within a process endpoint, following a WorkStagePaused message
Members: TransactionID (GUID), Stage (Stage)
CFX.Production.WorkStageStartedEventSent by a process endpoint when the work-stage for a unit or group of units starts
Members: TransactionID (GUID), Stage (Stage)
CFX.Production.WorkStartedEventSent by a process endpoint when the work-cycle for a unit or group of units starts Example for version 2.0 and below: Example for version 2.1 and above:
Members: PrimaryIdentifier (string), HermesIdentifier (string), TransactionID (GUID), Lane (integer or null), UnitCount (integer), Units (list of UnitPosition), RecipeName (string), Revision (string) … 10 in all
CFX.Production.Application · 2
CFX Topic implemented by endpoints which are involved in the application of materials to production units, such as fluids, adhesives, metals, etc
CFX.Production.Application.MaterialsAppliedEventSent when material is applied to a production unit, such as glue, adhesives, coatings, solder, paste, etc
Members: TransactionId (GUID), AppliedMaterials (list of InstalledMaterial)
CFX.Production.Application.MaterialsUnappliedEventSent when material is unapplied or removed from a production unit, as in the case of paste being wiped clean, for example
Members: TransactionId (GUID), UnappliedMaterials (list of UninstalledMaterial)
CFX.Production.Application.Solder · 1
CFX Topic implemented by endpoints which are involved in the soldering of production units
CFX.Production.Application.Solder.PCBSelectiveSolderedEventMessage sent upon completion of the selective soldering process This was an early message; the standard has since moved to the UnitsProcessed with SelectiveSolderPCBProcessData as the data being sent
Members: TransactionId (GUID), HeaderData (SelectiveSolderData), SolderedPCBs (list of SelectiveSolderedPCB)
CFX.Production.Assembly · 3
Messages are used by a production resource performing any form of assembly of production units
CFX.Production.Assembly.MaterialsInstalledEventSent by a process endpoint when one or more materials (see note) are installed on to a production unit
Members: TransactionId (GUID), InstalledMaterials (list of InstalledMaterial)
CFX.Production.Assembly.MaterialsUninstalledEventSent by a process endpoint when one or more materials (see note) are removed from a production unit
Members: TransactionId (GUID), UninstalledMaterials (list of UninstalledMaterial)
CFX.Production.Assembly.UnitsPersonalizedEventSent by a process endpoint when a configuration or assignment is made (example MAC Address)
Members: TransactionId (GUID), PersonalizedUnits (list of PersonalizedUnit)
CFX.Production.Assembly.PressInsertion · 3
CFX.Production.Assembly.PressInsertion.ConditionCompletedEventSent by a press insertion machine when a condition has been completed
Members: TransactionID (GUID), ResultOfCondition (StatusResult)
CFX.Production.Assembly.PressInsertion.GetConditionPermissionRequestRequestThis message is used to request a process endpoint for permission to proceed with the recipe based on the results of a condition sequence action
Members: TransactionID (GUID), ConditionStep (ConditionStep), Data (string)
CFX.Production.Assembly.PressInsertion.GetConditionPermissionResponseResponseThis message is used to grant or reject permission for a process endpoint to proceed with the recipe based on the results of a condition sequence action
Members: TransactionID (GUID), ConditionStep (ConditionStep), Result (RequestResult)
CFX.Production.Hermes · 6
CFX.Production.Hermes.GetMagazineDataRequestRequestsince 1.3Sent from a Hermes endpoint to request magazine data
Members: MagazineId (string)
CFX.Production.Hermes.GetMagazineDataResponseResponsesince 1.3Reponse to a request by a Hermes enabled endpoint to acquire information related to a particular magazine
Members: Result (RequestResult), MagazineData (Magazine)
CFX.Production.Hermes.GetWorkOrderDataRequestRequestUsed by an endpoint to acquire information related to a particular work order (typically at the beginning of a Hermes enabled line)
Members: WorkOrderIdentifier (WorkOrderIdentifier), UnitIdentifier (string)
CFX.Production.Hermes.GetWorkOrderDataResponseResponseReponse to a request by a Hermes enabled endpoint to acquire information related to a particular work order
Members: Result (RequestResult), WorkOrderIdentifier (WorkOrderIdentifier), ProductTypeId (string), Length (number), Width (number), Thickness (number), TopClearanceHeight (number), BottomClearanceHeight (number) … 12 in all
CFX.Production.Hermes.MagazineArrivedEventsince 1.3Event triggered by a Hermes enabled endpoint when a magazine arrived
Members: MagazineData (Magazine)
CFX.Production.Hermes.MagazineDepartedEventsince 1.3Event triggered by a Hermes enabled endpoint when a magazine departed
Members: MagazineData (Magazine)
CFX.Production.LoadingAndUnloading · 2
Implemented when a production resource is capable of loading or unloading production units into any type of fixture or carrier
CFX.Production.LoadingAndUnloading.UnitsLoadedEventsince 1.2Sent when a unit is loaded from any form of carrier, including fixtures, pallets, trays, tubs, totes, carts, etc
Members: UniqueIdentifier (string), UnitCount (integer), Units (list of UnitPosition)
CFX.Production.LoadingAndUnloading.UnitsUnloadedEventsince 1.2Sent when a unit is unloaded into any form of carrier, including fixtures, pallets, trays, tubs, totes, carts, etc
Members: UniqueIdentifier (string), UnitCount (integer), Units (list of UnitPosition)
CFX.Production.Processing · 1
CFX Topic implemented by endpoints which are involved in the processing of production units
CFX.Production.Processing.UnitsProcessedEventSent when an endpoint processes one or more production units within the scope of a work transaction
Members: TransactionId (GUID), OverallResult (ProcessingResult), CommonProcessData (ProcessData), UnitProcessData (list of ProcessedUnit)
CFX.Production.ReworkAndRepair · 1
CFX Topic implemented by endpoints which are involved in the repair and rework of defective or otherwise problematic production units discovered at any point in the production process, or later
CFX.Production.ReworkAndRepair.UnitsRepairedEventsince 1.4Sent by a process endpoint when one or more units have been reworked or repaird
Members: TransactionId (GUID), RepairOperator (Operator), RepairedUnits (list of RepairedUnit)
CFX.Production.TestAndInspection · 4
Messages used when a production resource is performing any form of test or inspection of production units, including both automated and manual inspections, of all kinds
CFX.Production.TestAndInspection.GetInspectionInfoRequestRequestsince 1.7This message is used to request a process endpoint for the inspections performed on a list of Units
Members: PrimaryIdentifier (string), HermesIdentifier (string), Units (list of UnitInfo)
CFX.Production.TestAndInspection.GetInspectionInfoResponseResponsesince 1.7Response from a process endpoint to a request to obtatin Inspection information for a list of Unit
Members: InspectedUnits (list of InspectedUnit)
CFX.Production.TestAndInspection.UnitsInspectedEventSent by a process endpoint when one or more units have been inspected
Members: TransactionId (GUID), InspectionMethod (InspectionMethod), SamplingInformation (SamplingInformation), Inspector (Operator), RecipeName (string), RecipeRevision (string), InspectedUnits (list of InspectedUnit), InspectedPanel (InspectedPanel)
CFX.Production.TestAndInspection.UnitsTestedEventSent by a process endpoint when one or more units undergo a series of tests
Members: TransactionId (GUID), TestMethod (TestMethod), Tester (Operator), RecipeName (string), RecipeRevision (string), SamplingInformation (SamplingInformation), TestedUnits (list of TestedUnit)
CFX.ResourcePerformance · 26
CFX Topic related to the performance of an endpoint (speed, OEE, fault rates, etc)
CFX.ResourcePerformance.CalibrationPerformedEventSent when calibration of any sort has been performed at an endpoint
Members: Calibration (Calibration), TransactionID (GUID or null)
CFX.ResourcePerformance.ChangeSleepStateRequestRequestsince 1.3This request allows an external source to change the sleep state of a Stage or Station ChangeSleepStateResponse message that it sends back to the requester
Members: StageName (string), NewSleepState (string)
CFX.ResourcePerformance.ChangeSleepStateResponseResponsesince 1.3Response to an external source to modify a generic configuration parameter of a process endpoint
Members: Result (RequestResult), OldSleepState (string), NewSleepState (string), Stage (Stage), Lane (integer or null), TransitionTimeRemaining (duration (TimeSpan) or null)
CFX.ResourcePerformance.ConsumptionDetailEventsince 2.1Members: SubsystemName (string), StartTime (date and time), EndTime (date and time), EnergyUsed (number), PeakPower (number), MinimumPower (number), MeanPower (number), PowerNow (number) … 36 in all
CFX.ResourcePerformance.EnergyConsumedEventSent by a process endpoint on a sampled interval of between 1 minute and 1 hour to indicate the energy usage and power consumption
Members: StartTime (date and time), EndTime (date and time), EnergyUsed (number), PeakPower (number), MinimumPower (number), MeanPower (number), PowerNow (number), PowerFactorNow (number) … 35 in all
CFX.ResourcePerformance.EnergyConsumptionRequestRequestsince 1.3This request allows an external source to inquire data regarding energy consumption of the endpoint EnergyConsumptionResponse message that it sends back to the requester
No members.
CFX.ResourcePerformance.EnergyConsumptionResponseResponsesince 1.3Response to an external source inquiring data regarding energy consumption of the endpoint
Members: Result (RequestResult), StartTime (date and time), EndTime (date and time), EnergyUsed (number), PeakPower (number), MinimumPower (number), MeanPower (number), PowerNow (number) … 35 in all
CFX.ResourcePerformance.FaultAcknowledgedEventSent when a fault has been acknowledged by the operator, but not yet corrected (cleared)
Members: FaultOccurrenceId (GUID), Operator (Operator)
CFX.ResourcePerformance.FaultClearedEventSent by a process endpoint when a fault is cleared as described in a FaultOccurred message
Members: FaultOccurrenceId (GUID), Operator (Operator)
CFX.ResourcePerformance.FaultOccurredEventSent by a process endpoint whenever a fault is encountered. A data structure must be included in the message related to specific equipment type
Members: Fault (Fault)
CFX.ResourcePerformance.GetActiveFaultsRequestRequestThis request allows an external source to query the equipment for a list of active faults
No members.
CFX.ResourcePerformance.GetActiveFaultsResponseResponseResponse to an external source to modify a generic configuration parameter of a process endpoint
Members: Result (RequestResult), ActiveFaults (list of Fault)
CFX.ResourcePerformance.HandleFaultRequestRequestThis request allows an external source to modify the behaviour for this dedicated fault in such a way that the equoipment itself is not indicating the operator to handle this fault
Members: FaultOccurrenceId (GUID), HandleRemote (true / false)
CFX.ResourcePerformance.HandleFaultResponseResponseResponse to an external source to modify the behaviour for the equipment to guide the operator process endpoint
Members: Result (RequestResult)
CFX.ResourcePerformance.LogEntryRecordedEventAn informational message sent by a process endpoint regarding the something that has occurred at the station
Members: InformationId (string), Message (string), Importance (LogImportance), Lane (integer or null), Stage (Stage), AdditionalData (LogEntryAdditionalData)
CFX.ResourcePerformance.MaintenancePerformedEventSent by an endpoint when maintenance has been performed. Information includes the type of maintenance, maintenance code, parts used, labor etc
Members: MaintenanceType (MaintenanceType), MaintenanceOrderNumber (string), MaintenanceJobCode (string), ConsumedMaterials (list of ConsumedMaterial), Tasks (list of MaintenanceTask)
CFX.ResourcePerformance.ModifyStationParametersRequestRequestThis request allows an external source to modify a generic configuration parameter of a process endpoint
Members: NewParameters (list of Parameter)
CFX.ResourcePerformance.ModifyStationParametersResponseResponseResponse to an external source to modify a generic configuration parameter of a process endpoint
Members: Result (RequestResult)
CFX.ResourcePerformance.ProcessDataRecordedEventsince 1.5Cleaning Agent needs to report the status of the cleaning liquid regularly as well as an alarm if certain values go out of the allowable range
Members: ProcessData (ProcessData)
CFX.ResourcePerformance.SleepStateChangedEventsince 1.3Sent by a process endpoint when the sleep state transitions from one state to another
Members: OldSleepState (string), NewSleepState (string), Stage (Stage), Lane (integer or null), TransitionTimeRemaining (duration (TimeSpan) or null)
CFX.ResourcePerformance.StageStateChangedEventSent by a process endpoint when the production state of one of its stages transitions from one state to another per its state model
Members: Stage (Stage), Lane (integer or null), OldState (ResourceState), OldStateDuration (duration (TimeSpan) or null), NewState (ResourceState), RelatedFault (Fault)
CFX.ResourcePerformance.StationOfflineEventSent by a process endpoint when it is about to transition to a state where it is not possible for further communication, for example when the endpoint is powered down, reset, put into maintenance mode, or simply set off-line
No members.
CFX.ResourcePerformance.StationOnlineEventSent by a process endpoint when it is ready for communication to resume, for example, powered up, maintenance over, etc
Members: OfflineDuration (duration (TimeSpan) or null)
CFX.ResourcePerformance.StationParametersModifiedEventSent by a process endpoint to indicate that an operator has modified a generic parameter or configuration setting
Members: ModifiedParameters (list of Parameter)
CFX.ResourcePerformance.StationStateChangedEventSent by a process endpoint when the production state transitions from one state to another per its state model
Members: OldState (ResourceState), OldStateDuration (duration (TimeSpan) or null), NewState (ResourceState), RelatedFault (Fault)
CFX.ResourcePerformance.ToolChangedEventSent when a new tool is selected for active use at a production endpoint Example 1 (Generic tool change): Example 2 (Nozzle change on SMT placement machine):
Members: OldTool (Tool), ReturnedToHolder (ToolHolder), NewTool (Tool), LoadedFromHolder (ToolHolder)
CFX.ResourcePerformance.PressInsertion · 1
Specialized messages related to the performance of press fit equipment
CFX.ResourcePerformance.PressInsertion.ComponentsPressedEventSent periodically by a Press Fit machine to indicate the number of presses which were successfully or unsuccessfully completed during the sample time window
Members: StartTime (date and time), EndTime (date and time), TotalComponentsPressed (integer), TotalComponentsNotPressed (integer)
CFX.ResourcePerformance.SMTPlacement · 1
Messages related to the performance of resources where SMT placement takes place (SMT placement equipment)
CFX.ResourcePerformance.SMTPlacement.ComponentsPlacedEventSent periodically by an SMT placement machine to indicate the number of placements which were successfully or unsuccessfully completed during the sample time window
Members: StartTime (date and time), EndTime (date and time), TotalComponentsPlaced (integer), TotalComponentsNotPlaced (integer)
CFX.ResourcePerformance.SolderPastePrinting · 6
Specialized messages related to the performance of solder paste printers
CFX.ResourcePerformance.SolderPastePrinting.CleanSqueegeeRequestRequestAllows an external source to direct a request to a stencil printer to perform a squeegee clean operation
Members: CleanTypeRequested (SMTSqueegeeCleanType)
CFX.ResourcePerformance.SolderPastePrinting.CleanSqueegeeResponseResponseResponse to a request from an external source for a squeegee clean operation to be performed
Members: Result (RequestResult)
CFX.ResourcePerformance.SolderPastePrinting.CleanStencilRequestRequestAllows an external source to direct a request to a stencil printer to perform a stencil clean operation
Members: CleanTypeRequested (SMTStencilCleanMode)
CFX.ResourcePerformance.SolderPastePrinting.CleanStencilResponseResponseA response to a request by a remote party for a stencil printer to perform a stencil clean operation
Members: Result (RequestResult)
CFX.ResourcePerformance.SolderPastePrinting.SqueegeeCleanedEventIndicates that a squeegee clean operation has been performed
Members: Squeegee (SMTSqueegee), SqueegeeCleanType (SMTSqueegeeCleanType), TimeSinceLastClean (duration (TimeSpan)), CyclesSinceLastClean (integer), SqueegeeCleanCycles (integer), SqueegeeCleanTime (duration (TimeSpan))
CFX.ResourcePerformance.SolderPastePrinting.StencilCleanedEventIndicates that a stencil clean operation has been performed
Members: Stencil (SMTStencil), StencilCleanMode (SMTStencilCleanMode), TimeSinceLastClean (duration (TimeSpan)), CyclesSinceLastClean (integer), StencilCleanCycles (integer), StencilCleanTime (duration (TimeSpan))
CFX.ResourcePerformance.THTInsertion · 1
Specialized messages related to the performance of through-hole insertion equipment
CFX.ResourcePerformance.THTInsertion.ComponentsInsertedEventSent periodically by an THT inserter to indicate the number of insertions which were successfully or unsuccessfully completed during the sample time window
Members: StartTime (date and time), EndTime (date and time), TotalComponentsInserted (integer), TotalComponentsNotInserted (integer)
CFX.Sensor.Identification · 4
Messages for devices that are responsible to reading or scanning identification labels or tags (barcodes, RFID’s, machine vision systems, etc.)
CFX.Sensor.Identification.IdentifiersNotReadEventSent by an identification device (barcode scanner, RFID reader, etc.) when the device attempts to read or interpret an identifier, but is unable to do so
Members: PositionsNotRead (list of integer)
CFX.Sensor.Identification.IdentifiersReadEventSent by an identification device (barcode scanner, RFID reader, etc.) when the device has identified one or more items Example 1 (Simple, single barcode read) Example 2 (Camera system capable of reading all barcodes on a multi-circuit PCB panel)
Members: PrimaryIdentifier (string), HermesIdentifier (string), Units (list of UnitPosition)
CFX.Sensor.Identification.IdentifyUnitsRequestRequestSent by a process endpoint to a unit identification device (such as a barcode scanner or RFID reader) to request the most recently scanned unit identifiers
No members.
CFX.Sensor.Identification.IdentifyUnitsResponseResponseResponse from a unit identification device (such as a barcode scanner or RFID reader) to a process endpoint which contains the most recently scanned unit identifiers
Members: Result (RequestResult), PrimaryIdentifier (string), HermesIdentifier (string), Units (list of UnitPosition)
Message
CFX.Production.WorkCompleted (event): Sent by a process endpoint when all work has been completed at a process endpoint
Message body
Empty fields are written as null. Objects that may be null start excluded: tick “Include” to fill them in. Where a member can hold a derived type, choose it under “Type ($type)”.
Runs in this browser. Data is not uploaded or stored.
CFX envelope (JSON)
{
"MessageName": "CFX.Production.WorkCompleted",
"Version": "2.1",
"TimeStamp": "2026-10-02T08:15:42.250+03:00",
"UniqueID": "6f1c2a3e-8d4b-4c71-9a0e-2b5d7f3c1e84",
"Source": "FactoKit.Example.Line1.AOI1",
"Target": null,
"RequestID": null,
"MessageBody": {
"$type": "CFX.Production.WorkCompleted, CFX",
"TransactionID": "c2e7a9d1-4f3b-4e6a-8b2c-9d0f1a7e5b36",
"Result": "Completed",
"PrimaryIdentifier": "PANEL-2026-0001",
"HermesIdentifier": null,
"UnitCount": 2,
"Units": [
{
"UnitIdentifier": "PCB-2026-0001-1",
"PositionNumber": 1,
"PositionName": "Circuit 1",
"X": 12.5,
"Y": 20.0,
"Z": null,
"Rotation": 0.0,
"FlipX": false,
"FlipY": false,
"Status": "Pass"
},
{
"UnitIdentifier": "PCB-2026-0001-2",
"PositionNumber": 2,
"PositionName": "Circuit 2",
"X": 112.5,
"Y": 20.0,
"Z": null,
"Rotation": 0.0,
"FlipX": false,
"FlipY": false,
"Status": "Pass"
}
],
"PerformanceImpacts": []
}
}Check of the generated message: no errors, no warnings.
“$type” first and the members in the SDK’s order (its own, then its base classes’), as the SDK’s Newtonsoft.Json writes them; whole numbers of double and float members get “.0”, decimals keep the digits typed. The JSON Schema download is FactoKit’s schema derived from the SDK, not an official IPC schema.
Messages
Drop a .json, .ndjson, .jsonl, .txt or .log file on the field or open one (up to 5 MB); it is read in this browser only.
Runs in this browser. Data is not uploaded or stored.
Validation
2 documents (array): 1 without findings, 5 errors and 2 warnings in all.
| Document | Line | Read as | Message | Errors | Warnings |
|---|---|---|---|---|---|
| 1 | 2 | envelope | CFX.Production.TestAndInspection.UnitsInspected | 0 | 0 |
| 2 | 93 | envelope | CFX.Production.WorkCompleted | 5 | 2 |
| Line : column | Document | Severity | Where | Description |
|---|---|---|---|---|
| 2 · WorkCompleted | Error | TimeStamp | TimeStamp: “2026-10-02T08:15:42.250” must be an ISO 8601 date and time with its offset or Z (such as 2026-10-02T08:15:30.125+03:00); the SDK requires the time zone. | |
| 2 · WorkCompleted | Error | UniqueID | UniqueID: “6f1c2a3e-8d4b-4c71-9a0e-2b5d7f3c1e8” is not a GUID (8-4-4-4-12 hex digits, such as 2c24590d-39c5-4039-96a5-91900cecedfa). | |
| 2 · WorkCompleted | Error | MessageBody.Result | MessageBody.Result: “Complete” is not a value of WorkResult: Completed, Failed, Aborted, Skipped. | |
| 2 · WorkCompleted | Error | MessageBody.UnitCount | MessageBody.UnitCount: 2.0 is written with a decimal point or exponent; the SDK reads whole-number members (integer) only as digits. | |
| 2 · WorkCompleted | Error | MessageBody.Units[0].PositionNumber | MessageBody.Units[0].PositionNumber: expected integer, found “1.0”. The SDK reads a whole number written as text only as digits with an optional sign. | |
| 2 · WorkCompleted | Warning | MessageBody.Units[0].Status | MessageBody.Units[0].Status: written as the number 0; the SDK writes the name (“Pass”). It reads both. | |
| 2 · WorkCompleted | Warning | MessageBody.Operator | “Operator” is not a member of WorkCompleted; the SDK ignores it. |
An error is something the SDK would refuse or read wrongly; a warning is accepted but probably not meant. Select a line and column to jump to it in the field.
Addresses
Addresses as amqp://host:5672 or amqps://host:5671 (TLS). Exchange and queue in the SDK documentation’s RabbitMQ form (/exchange/name, /queue/name). Topic patterns: “*” one word, “#” zero or more words, words separated by dots. This is an explanation only: nothing is sent.
Runs in this browser. Data is not uploaded or stored.
How the message travels
Publishing (the endpoint)
- The endpoint opens an AMQP 1.0 connection to the broker at amqp://broker.example.local:5672 (unencrypted: user and password travel in clear text), and a sender link whose target address is /exchange/cfx.line1.
- Every message is one CFX envelope as JSON (UTF-8), compressed with gzip (the SDK’s default codec; content-encoding gzip), marked durable. When the endpoint sends several envelopes in one AMQP message, the body is a JSON array of envelopes.
- The AMQP subject is “FactoKit.Example.Line1.AOI1.CFX.Production.WorkCompleted” (the SDK’s default: handle, a dot, the message name); the application properties repeat the topic, the message name, the handle and the target.
- The SDK publishes a Heartbeat as soon as a publish channel is added and then every minute by default (the message’s own documentation asks for one at least every 5 minutes).
Routing and subscribing (the broker)
- On a RabbitMQ-style broker, /exchange/cfx.line1 is an exchange (commonly a topic exchange, often one per line), and the subject “FactoKit.Example.Line1.AOI1.CFX.Production.WorkCompleted” is used as the routing key.broker convention, not verified
- The queue /queue/mes.line1 is bound to cfx.line1 with the pattern “#.CFX.Production.#”: the example message is routed to it. A queue receives a copy of every message whose routing key matches one of its bindings.broker convention, not verified
- A subscriber (an MES, a data collector) opens its own connection to amqp://broker.example.local:5672 and a receiver link whose source address is /queue/mes.line1; the SDK’s AddSubscribeChannel does this. Several subscribers on one queue share its messages; each application that needs every message gets its own queue.
- Messages wait in a durable queue while its subscriber is away.broker convention, not verified
- The SDK keeps messages it could not send in a local spool and sends them in their original order once the connection is back.
Request and response (point to point)
- Requests do not go through the broker. FactoKit.Example.MES opens an AMQP connection straight to amqp://aoi1.example.local:5672, where the endpoint listens itself, and sends the request on a link whose target address is the endpoint’s handle FactoKit.Example.Line1.AOI1.
- The request envelope has Source FactoKit.Example.MES, Target FactoKit.Example.Line1.AOI1 and a RequestID (the SDK fills in “REQUEST-” and a GUID when it is empty); its reply-to is a temporary address “FactoKit.Example.MES-<GUID>”.
- The endpoint answers on the same connection: Source FactoKit.Example.Line1.AOI1, Target FactoKit.Example.MES, the same RequestID. A request it does not handle gets a CFX.NotSupportedResponse. The SDK waits 30 s for the answer by default.
- An endpoint announces its request address in EndpointConnected (RequestNetworkUri, RequestTargetAddress) and in the GetEndpointInformation and AreYouThere responses.
| Section | Property | Value | Set from |
|---|---|---|---|
| Header | durable | true | AmqpCFXEndpoint.DurableMessages (default true) |
| Properties | message-id | <UniqueID of the envelope> | CFXEnvelope.UniqueID |
| Properties | to | null (an event has no Target) | CFXEnvelope.Target |
| Properties | reply-to | FactoKit.Example.Line1.AOI1 | CFXEnvelope.Source |
| Properties | correlation-id | null | CFXEnvelope.RequestID |
| Properties | subject | FactoKit.Example.Line1.AOI1.CFX.Production.WorkCompleted | SubjectFormat |
| Properties | content-type | application/json; charset="utf-8" | fixed |
| Properties | content-encoding | gzip | AmqpCFXEndpoint.Codec (default gzip) |
| Properties | creation-time | <TimeStamp of the envelope> | CFXEnvelope.TimeStamp |
| Application properties | cfx-topic | CFX.Production | namespace of the message |
| Application properties | cfx-message | CFX.Production.WorkCompleted | CFXEnvelope.MessageName |
| Application properties | cfx-handle | FactoKit.Example.Line1.AOI1 | CFXEnvelope.Source |
| Application properties | cfx-target | null | CFXEnvelope.Target |
| Pattern | Meaning | Routes the example |
|---|---|---|
| #.CFX.Production.# | your binding | yes |
| # | every message | yes |
| FactoKit.Example.Line1.AOI1.# | everything from this endpoint | yes |
| #.CFX.Production.WorkCompleted | WorkCompleted from every endpoint | yes |
| #.CFX.Heartbeat | heartbeats only | no |
| Item | Value |
|---|---|
| Endpoint handle | FactoKit.Example.Line1.AOI1 |
| Broker | amqp://broker.example.local:5672 |
| Publish target (exchange) | /exchange/cfx.line1 |
| Subject / routing key | FactoKit.Example.Line1.AOI1.CFX.Production.WorkCompleted |
| Queue binding | #.CFX.Production.# |
| Subscriber source (queue) | /queue/mes.line1 |
| Request address of the endpoint | amqp://aoi1.example.local:5672 |
| Request link target | FactoKit.Example.Line1.AOI1 |
| Requester | FactoKit.Example.MES |
Download offline versionSingle HTML file · v1.6 · 751 KB · works without internet
How the messages are checked and generated
IPC-CFX (IPC-2591, Connected Factory Exchange) messages are JSON envelopes sent over AMQP 1.0. The tool knows 183 messages (98 events, 42 requests, 43 responses) and the structures and enumerations they use, derived from the source of the official IPC CFX SDK. Everything runs in the browser and nothing connects to a broker or an endpoint.
Where the definitions come from
- Source: https://github.com/IPCConnectedFactoryExchange/CFX, commit 880255d2f7380f340f56b243a51d99f2136bdae3 (2026-04-17), package version 2.1.1, CFX version 2.1; Copyright 2018 IPC International, licensed under the Apache License 2.0 (license text). A FactoKit script reads the C# message and structure classes and writes the tool’s compact definitions; descriptions are shortened from the SDK’s documentation comments.
- Taken from the SDK as it is (verified against its source): the names of messages, members, structures and enumeration values, the member types, which members may be null, derived types and “$type” names, the version that added a member (where the SDK marks it), the order in which Newtonsoft.Json writes members, and which enumerations are written as names, numbers or codes.
- Not read here: the IPC-2591 document itself. Where the standard says more than the SDK (for example which members a message must carry), the tool does not know it.
The envelope
- Members in this order: MessageName (the full name, such as CFX.Production.WorkCompleted), Version (the CFX version, “2.1” for this SDK), TimeStamp (when the event happened, ISO 8601 with its time zone), UniqueID (a GUID; receivers use it to drop duplicates), Source (the sender’s CFX handle), Target and RequestID (for requests and responses), MessageBody.
- The body starts with “$type”: “<MessageName>, CFX”; then its members in the SDK’s order (those the class declares, then those of each base class; [JsonProperty(Order)] where set). The SDK writes null members too; doubles are written with a decimal point (20.0), a C# float member (ConveyingDistance, Air_Pressure …) with the fewest digits of its single-precision value (0.3, not 0.30000001192092896), a decimal member with its digits and scale (1.50).
- A member typed as a base class may hold a derived type: the object then starts with its own “$type” (a NumericMeasurement in a list of Measurements). Abstract classes always need it.
What the validator reports
An error is something the SDK would refuse or read wrongly; a warning is accepted by the SDK but probably not meant. Every finding has its line, column and JSON pointer.
- Errors: JSON syntax (with the position where reading stopped); a MessageName that is not a CFX message; envelope members missing (MessageName, Version, TimeStamp, UniqueID, MessageBody); a TimeStamp without its offset or Z; a GUID that is not 8-4-4-4-12 hex digits; a date that is not ISO 8601; a duration that is not .NET’s [-][d.]hh:mm:ss[.fffffff]; a value of the wrong JSON type (an object where a number belongs, null in a value type, text the SDK cannot read as the member’s number or boolean: “1.0” for a whole number, “12.5 mm”, “yes”); an enumeration value that does not exist; a whole number written with a decimal point or outside its range; a decimal beyond ±79228162514264337593543950335 (decimal.MaxValue); a double written as text beyond a double’s range; base64 that is not base64; a body “$type” that names another message; a “$type” that is not a CFX type, not derived from the declared type, or abstract; an abstract member without “$type”.
- Warnings: members the definitions do not know (the SDK ignores them); missing value-type members that are not documented as optional (the SDK reads them as their default value: messages written before a member was added lack it too); a body without “$type” (older SDK form, read by MessageName); “$type” not first or not written as “Name, CFX”; an enumeration written as a number where the SDK writes names (or the other way round); a number or boolean written as text that the SDK’s Newtonsoft.Json parses (“1”, “12.5”, “1.5e3”, “NaN”, “true” in any letter case; “12,5” is read as 125, the comma taken as a thousands separator; an empty string is null, accepted for a nullable member only); a decimal with more digits than a .NET decimal keeps (28 after the point, 96 bits in all: the SDK rounds it); a date in a body without its offset; a message or member newer than the envelope’s Version; a request without Target or RequestID, a response without RequestID; a key written twice.
- Input: one envelope, a JSON array of envelopes, or a log with one envelope per line (NDJSON / JSON Lines). A body alone is checked when it has a “$type” naming a message, or as the message chosen under “Check bodies as” (as in the SDK’s own documentation examples).
- FactoKit’s rules, not the SDK’s: which missing members are reported (value types not documented as optional), the strict forms of GUIDs, dates and durations (the .NET readers accept more forms), and that an enumeration name must match in case.
The generator
- The form is built from the definitions: text for strings, GUIDs (with “New GUID”, random version 4), dates (“Now”, local time with its offset) and durations; selects for enumerations and booleans; nested objects with “Include” (otherwise null) and a type choice where derived types exist; lists with “Add item”. A new message starts with values for value types (a new GUID, the current time, 0, false, the first choice) and null for the rest.
- Empty fields are written as null (or left out when “Write empty members as null” is off). Numbers may be typed with a decimal comma. A decimal keeps the digits and the scale typed (0.1234567890123456789, 1.50; an exponent is multiplied out), a long beyond 2^53 its digits. The output is checked by the validator at once, so a missing or malformed value shows up below it.
- “JSON Schema of this message” downloads a draft 2020-12 schema of the envelope and its body, built from the same definitions (FactoKit’s schema, not an official IPC one).
CFX over AMQP 1.0
- From the SDK source (CFX/Transport): an endpoint opens an AMQP 1.0 connection to a broker (amqp://, port 5672; amqps:// with TLS, port 5671) and a sender link to a target address such as /exchange/cfx.line1. Each AMQP message carries one envelope (or a JSON array of several), gzip-compressed by default, marked durable; message-id = UniqueID, subject = “<handle>.<MessageName>” (configurable with ${cfx-handle}, ${cfx-topic}, ${cfx-messagename}), to = Target, reply-to = Source, correlation-id = RequestID, content-type application/json; application properties cfx-topic, cfx-message, cfx-handle, cfx-target. A Heartbeat goes out when a publish channel opens and every minute by default.
- Subscribers open a receiver link on a source address such as /queue/mes.line1.
- Requests are point to point: the requester connects directly to the endpoint’s own listener (its RequestNetworkUri) and sends to a link target equal to the endpoint’s CFX handle; the response comes back on the same connection with Source and Target swapped and the same RequestID (“REQUEST-” and a GUID when the requester left it empty); unhandled requests get NotSupportedResponse; the SDK waits 30 s.
- Broker conventions, not verified here: on RabbitMQ with AMQP 1.0, “/exchange/name” and “/queue/name” address an exchange and a queue, a topic exchange uses the subject as the routing key, and a queue receives what matches its binding pattern (“*” one word, “#” zero or more, split at dots). One exchange per line is a common layout, not a rule of the standard. Other brokers (ActiveMQ Artemis, Azure Service Bus …) address and route differently.
Worked examples (the tool’s examples)
- Generator: an illustrative WorkCompleted for panel PANEL-2026-0001 with two circuits (Units at X 12.5 and 112.5 mm, Status Pass), Result Completed, sent by FactoKit.Example.Line1.AOI1. The check below the output reports no errors and no warnings.
- Validator: an array of two envelopes. The UnitsInspected (an AOI finding insufficient solder on R22, with a NumericMeasurement and its “$type”) passes. The WorkCompleted has deliberate mistakes: 5 errors — TimeStamp without its offset (line 96), a UniqueID one digit short, Result “Complete” (WorkResult has Completed, Failed, Aborted, Skipped), UnitCount written as 2.0, PositionNumber as the text “1.0” (the SDK reads a whole number written as text only as digits) — and 2 warnings: Status written as the number 0 (the SDK writes “Pass”) and an unknown member “Operator”.
- Routing: FactoKit.Example.Line1.AOI1 publishes to /exchange/cfx.line1 with the subject “FactoKit.Example.Line1.AOI1.CFX.Production.WorkCompleted”; the queue /queue/mes.line1 bound with “#.CFX.Production.#” receives it; a request from FactoKit.Example.MES (GetEndpointInformationRequest, for instance) goes directly to amqp://aoi1.example.local:5672, link target FactoKit.Example.Line1.AOI1.
Common mistakes
- A TimeStamp without its time zone: receivers cannot tell local time from UTC; the SDK writes the offset (2026-10-02T08:15:42.250+03:00).
- “$type” missing, not first, or without “, CFX”: Newtonsoft.Json reads it only as the first member and needs the assembly name.
- Enumeration values with another spelling (“Complete” for Completed, “PASS” for Pass) or a number the enumeration does not define.
- Reusing the UniqueID of an earlier message: receivers drop it as a duplicate.
- Sending requests through the exchange: the SDK expects them on the endpoint’s own request address.
Files
- The generated message as .json, its JSON Schema, the validation findings as CSV (one row per finding with line, column and pointer), the routing explanation as CSV, and one settings JSON for every part (the generator’s body as JSON); nothing is stored in the browser.
Not verified
- The IPC-2591 standard itself was not available: the definitions are the SDK’s (2.1.1); messages or members the standard defines differently, and anything newer than this SDK, are not known.
- The broker side of the routing explanation (RabbitMQ’s addresses, the subject as routing key, topic patterns, one exchange per line) is recalled, not checked against broker documentation.
- How the SDK writes values was read from its source, not observed by running it (no .NET here): in particular ResourceState as its code in a string (“1100”), very large or small doubles in exponent form (1E+15), floats as .NET Core writes them (.NET Framework may write some with other digits), that “$type” is read only as the first member (Newtonsoft.Json’s default), and which numbers and booleans written as text Newtonsoft.Json 13 parses (invariant culture; NaN and Infinity only in the case it writes them).
Questions
- What is IPC-CFX?
- IPC-CFX (Connected Factory Exchange, IPC-2591) is a standard for the messages machines and software exchange on an electronics assembly line: work started and completed, units inspected and tested, faults, materials, station states. Each message is JSON in an envelope (MessageName, Version, TimeStamp, UniqueID, Source, Target, RequestID, MessageBody) and travels over AMQP 1.0. The IPC publishes an open-source .NET SDK with the definitions of every message; this tool’s definitions are derived from it.
- What is the “$type” in a CFX message?
- The SDK serializes with Newtonsoft.Json and writes the .NET type of the body as its first member, for example "$type": "CFX.Production.WorkCompleted, CFX". It writes "$type" again wherever a derived type stands in for its base class, such as a NumericMeasurement in a list of Measurements. A reader built on the SDK needs it there, and only as the first member of the object; where the base class is abstract it cannot read the object at all without it.
- Does a CFX message need a broker?
- Events (WorkCompleted, UnitsInspected, Heartbeat …) are published to an AMQP 1.0 broker, usually to an exchange, and subscribers read them from queues. Requests and responses do not use the broker: the SDK opens a direct AMQP connection to the request address the endpoint announces. This page explains both with your addresses but connects to nothing.
- Why does a message from my machine fail here but work in our MES?
- The SDK is lenient where a validator is strict: it ignores members it does not know, fills missing ones with their default value (an empty GUID, 0, the first choice of an enumeration) and reads enumerations as names or numbers. Those are warnings here. Errors are what the SDK refuses or reads wrongly: a string where a number belongs, an unknown enumeration value, a GUID or a date in another form, a missing or wrong “$type”, a TimeStamp without its time zone.
- Are these the official CFX schemas?
- No. The message definitions are derived from the source of the official IPC CFX SDK (version 2.1.1, Apache License 2.0); the IPC-2591 document itself was not read. The JSON Schema offered for download is FactoKit’s, built from those definitions, and its rule that value-type members are required is FactoKit’s reading of the SDK. Check against the standard and your partners’ implementations.
Related tools
- Modbus tools: frames, CRC and a serial link for machines that speak Modbus instead.
- Control charts: chart the measurements the test and inspection messages carry.
- OEE calculator: what WorkStarted / WorkCompleted and StationStateChanged add up to.