OFFLINE TOOL / IPC-CFX WORKBENCH V1.6
INTEGRATION / 029OFFLINE

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.

Tool

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

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.

Message

Envelope

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)

    “$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

    —Errors
    —Warnings
    —Documents
    —Read as

    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

    —Example message vs your queue
    —Kind
    —AMQP subject
      Boxes inside the broker frame and the binding line follow a RabbitMQ topic exchange (not verified here); the endpoint side and the direct request follow the SDK source.

      Publishing (the endpoint)

        Routing and subscribing (the broker)

          Request and response (point to point)

            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

            The envelope

            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.

            The generator

            CFX over AMQP 1.0

            Worked examples (the tool’s examples)

            1. 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.
            2. 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”.
            3. 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

            Files

            Not verified

            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.