<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:media="http://search.yahoo.com/mrss/" xmlns:discourse="http://discourse.org/rss/modules/discourse/">
<channel>
<title>OIB on Roque</title>
<link>https://j-roque.com/tags/oib/</link>
<description>Recent content in OIB on Roque</description>
<generator>Hugo -- gohugo.io</generator>
<language>en</language>
<managingEditor>joao.roque.94@gmail.com (João Roque)</managingEditor>
<webMaster>joao.roque.94@gmail.com (João Roque)</webMaster>
<copyright>© 2026 João Roque</copyright>
<lastBuildDate>Tue, 08 Sep 2026 00:00:00 +0000</lastBuildDate><atom:link href="https://j-roque.com/tags/oib/index.xml" rel="self" type="application/rss+xml"/>
<item>
<title>Integrating with OIB: Board Gatekeeper and Eventing</title>
<link>https://j-roque.com/posts/20260908-oib/</link>
<pubDate>Tue, 08 Sep 2026 00:00:00 +0000</pubDate>
<author>joao.roque.94@gmail.com (João Roque)</author>
<guid>https://j-roque.com/posts/20260908-oib/</guid>
<description>What ASMPT&amp;rsquo;s Operations Information Broker actually is, and why the SMT line asks the MES for permission.</description>
<content:encoded>&lt;p&gt;&lt;img src="https://j-roque.com/posts/20260908-oib/featured.png" alt="Integrating with OIB: Board Gatekeeper and Eventing" /&gt;&lt;/p&gt;&lt;p&gt;Right now, on some SMT line, a printed circuit board is sitting motionless in a conveyor while the line waits — because a web service has not yet said whether that board may continue.&lt;/p&gt;
&lt;p&gt;That is &lt;em&gt;ASMPT WORKS&lt;/em&gt; OIB working exactly as designed.&lt;/p&gt;
&lt;h2 class="relative group"&gt;Overview
&lt;div id="overview" class="anchor"&gt;&lt;/div&gt;
&lt;span
class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
&lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#overview" aria-label="Anchor"&gt;#&lt;/a&gt;
&lt;/span&gt;
&lt;/h2&gt;
&lt;p&gt;The &lt;strong&gt;Operations Information Broker&lt;/strong&gt; — OIB — is ASMPT&amp;rsquo;s integration platform for the WORKS software suite. It has been around since 2008, it is built on WCF web services, and it is the only sanctioned way into SIPLACE Pro, WORKS Setup Center, Line Control, Traceability, and the rest of the ASMPT stack. The native interfaces those products used to expose (COM, direct SQL, Secs-GeM, parsed XML files) are gone from public use.&lt;/p&gt;
&lt;p&gt;ASMPT&amp;rsquo;s own training decks list five things OIB lets your software do:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;query for operational data&lt;/li&gt;
&lt;li&gt;create or modify data&lt;/li&gt;
&lt;li&gt;control the line&lt;/li&gt;
&lt;li&gt;be informed about line events&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;be requested by the line for individual decisions&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Four of those are ordinary. The fifth is the one this post is about.&lt;/p&gt;
&lt;p&gt;This post covers what OIB is and how CM has learned from it and has created turn key integration strategies.&lt;/p&gt;
&lt;hr&gt;
&lt;h2 class="relative group"&gt;What OIB Actually Is
&lt;div id="what-oib-actually-is" class="anchor"&gt;&lt;/div&gt;
&lt;span
class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
&lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#what-oib-actually-is" aria-label="Anchor"&gt;#&lt;/a&gt;
&lt;/span&gt;
&lt;/h2&gt;
&lt;p&gt;OIB is not an MES and does not try to be one. It is a &lt;strong&gt;Service Oriented Architecture&lt;/strong&gt; layer whose only job is to unify and abstract the shop floor so that higher-level software stops caring about deployment topology. Its goal is to monitor, control and handle the logistics of an SMT line that runs ASMPT machines.&lt;/p&gt;
&lt;p&gt;&lt;figure&gt;&lt;img
class="my-0 rounded-md"
loading="lazy"
decoding="async"
fetchpriority="low"
alt="ASMPT Line"
src="https://image.j-roque.com/posts/20260908-oib/asmpt_asm_line.png"
&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;It splits into two halves.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;OIB Core&lt;/strong&gt; is the infrastructure: the OIB database plus a set of core services.&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th style="text-align: left"&gt;Core service&lt;/th&gt;
&lt;th style="text-align: left"&gt;Responsibility&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;Configuration Manager&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;Owns and persists the OIB Factory Layout&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;Service Locator&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;Service registration and discovery — the yellow pages&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;WS Eventing&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;Guaranteed-delivery event dispatch&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;Display Service&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;Messages and questions to line-side and station viewers&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;Central Settings&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;Shared configuration, scoped per factory element&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;Factory Calendar&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;Shifts, maintenance downtime, appointments&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;User Manager&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;Authentication and authorisation — local users, AD, or both&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;Health Check&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;Polls registered services for availability; can e-mail admins&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;Each of those has an ASM Studio plugin in front of it — Factory Explorer, Service Manager, Factory Calendar, User Manager, Operation Manager, and a Test Box for poking endpoints by hand. Configuration is a GUI activity.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;OIB Adapters&lt;/strong&gt; are the endpoints that expose actual business functionality:&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th style="text-align: left"&gt;Adapter&lt;/th&gt;
&lt;th style="text-align: left"&gt;What it gives you&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;SPI&lt;/code&gt; (SIPLACE Pro Interface)&lt;/td&gt;
&lt;td style="text-align: left"&gt;CRUD on SIPLACE Pro — components and shapes, placement lists, panels and sub-panels, setups, recipes, line and machine configuration&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;Optimizer&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;Configure, start/stop, and read results of job optimisation; progress events&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;Line Control&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;Start/continue/stop the line, block/unblock station conveyors, download recipes, read line and recipe status&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;Setup Center&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;Read/write packaging units; events for feeder, table and material movement and quantity change&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;Traceability&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;Per-board production result — where, when, which errors, which recipe and order, which packaging units&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;Monitoring&lt;/code&gt; (OIS)&lt;/td&gt;
&lt;td style="text-align: left"&gt;Real-time machine state, pickup and reject rate, active recipe, feeder track info&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;Board Gatekeeper&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;Board-level GO/NOGO at a scan point&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;Material Manager&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;Material flow events, including moisture sensitivity&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;Maintenance Data Interface&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;Station and setup configuration with unique IDs, plus station health data every 15 minutes&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;Core is typically installed once per factory on a central server, while an Adapter instance is installed for each installed instance of the software product it fronts — not a fixed rule of &amp;ldquo;one per line&amp;rdquo;. For Setup Center that instance happens to be per-line: a customer with ten lines running Setup Center has ten Setup Center Adapter instances, each registering independently. A different adapter could just as easily be one per factory or one per station, depending on how that product is deployed.&lt;/p&gt;
&lt;p&gt;In practice the split lands like this: the central server carries OIB Core, the OIB DB, Eventing, and the SPI Adapter; each line computer carries its own Setup Center Adapter, Line Control Adapter, Monitoring Adapter, Traceability, and Board Gatekeeper.&lt;/p&gt;
&lt;h3 class="relative group"&gt;The Factory Layout
&lt;div id="the-factory-layout" class="anchor"&gt;&lt;/div&gt;
&lt;span
class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
&lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#the-factory-layout" aria-label="Anchor"&gt;#&lt;/a&gt;
&lt;/span&gt;
&lt;/h3&gt;
&lt;p&gt;Part of the OIB concept is a persisted model of the factory, following ISA-95:&lt;/p&gt;
&lt;pre&gt;&lt;code class="language-text"&gt;Enterprise
└── Site
    └── Area              (optional — lines can attach directly to sites)
        └── Production line
            └── Work cell (can nest)&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;A production line is a printer, some placement stations, an oven. A work cell is one of those stations. Areas are optional and work cells nest, which is the escape hatch for real factories that never match the diagram.&lt;/p&gt;
&lt;p&gt;&lt;figure&gt;&lt;img
class="my-0 rounded-md"
loading="lazy"
decoding="async"
fetchpriority="low"
alt="ASM Works"
src="https://image.j-roque.com/posts/20260908-oib/asm_works.png"
&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;This layout lives in the OIB DB, is edited in WORKS Studio under Factory Explorer → Factory Layout, and can be read and written programmatically through the Configuration Manager. It is not decoration — discovery is built on top of it, and so are Central Settings and the Factory Calendar, both of which attach to individual factory elements.&lt;/p&gt;
&lt;hr&gt;
&lt;h2 class="relative group"&gt;Board Gatekeeper
&lt;div id="board-gatekeeper" class="anchor"&gt;&lt;/div&gt;
&lt;span
class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
&lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#board-gatekeeper" aria-label="Anchor"&gt;#&lt;/a&gt;
&lt;/span&gt;
&lt;/h2&gt;
&lt;p&gt;Process control on an ASMPT line belongs to SIPLACE Pro Line Control. &lt;strong&gt;WORKS Board Gatekeeper&lt;/strong&gt; — BGK — extends it with something Line Control does not do: it lets an external system make a decision about a specific PCB, at a specific point in the line, &lt;em&gt;before&lt;/em&gt; that board is allowed to continue.&lt;/p&gt;
&lt;p&gt;Two capabilities:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;get informed about PCBs — optionally identified by barcode — transported anywhere in the factory line&lt;/li&gt;
&lt;li&gt;stop a PCB in the conveyor if requirements are not fulfilled&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;BGK is an agent sitting between barcode scanners and conveyor hardware on one side, and your MES on the other. You choose where the scan points are — line entry, line exit, into a station, out of a station.&lt;/p&gt;
&lt;p&gt;&lt;figure&gt;&lt;img
class="my-0 rounded-md"
loading="lazy"
decoding="async"
fetchpriority="low"
alt="ASM BGK"
src="https://image.j-roque.com/posts/20260908-oib/asm_bgk.png"
&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;It runs in one of three modes:&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th style="text-align: left"&gt;Mode&lt;/th&gt;
&lt;th style="text-align: left"&gt;Conveyor stop&lt;/th&gt;
&lt;th style="text-align: left"&gt;MES informed&lt;/th&gt;
&lt;th style="text-align: left"&gt;Use case&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;Notification&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;No&lt;/td&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;Track boards, don&amp;rsquo;t gate them&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;Interlocking&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: left"&gt;Yes, and waits for confirmation&lt;/td&gt;
&lt;td style="text-align: left"&gt;Real gatekeeping&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;No MES&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;No&lt;/td&gt;
&lt;td style="text-align: left"&gt;No&lt;/td&gt;
&lt;td style="text-align: left"&gt;Barcode whispering only&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&lt;code&gt;Notification&lt;/code&gt; is tracking — you learn that a registered board entered a machine.
&lt;code&gt;Interlocking&lt;/code&gt; is control — nothing moves until you say so. Same contract, wildly different risk profile.&lt;/p&gt;
&lt;p&gt;Hardware integration is not BGK&amp;rsquo;s domain, you need conveyor and scanner hardware wired into its import interfaces, with the CogiScan Product Flow Controller available as an all-in-one box. And &lt;strong&gt;PCB validation is not BGK&amp;rsquo;s problem either&lt;/strong&gt;. BGK asks the question. Deciding whether a board may proceed is entirely the MES&amp;rsquo;s job.&lt;/p&gt;
&lt;h3 class="relative group"&gt;BoardRequest Is a Synchronous Veto
&lt;div id="boardrequest-is-a-synchronous-veto" class="anchor"&gt;&lt;/div&gt;
&lt;span
class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
&lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#boardrequest-is-a-synchronous-veto" aria-label="Anchor"&gt;#&lt;/a&gt;
&lt;/span&gt;
&lt;/h3&gt;
&lt;p&gt;&lt;code&gt;BoardRequest&lt;/code&gt; is the whole reason Board Gatekeeper exists. The request is small:&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th style="text-align: left"&gt;&lt;code&gt;BoardRequestData&lt;/code&gt;&lt;/th&gt;
&lt;th style="text-align: left"&gt;Meaning&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;Board&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;Barcode&lt;/code&gt; (empty string if nothing was scanned) and &lt;code&gt;BoardTime&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;Position&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;Where in the line this happened&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;Context&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;A GUID correlating Request / Released / Failed for the same board&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&lt;code&gt;Context&lt;/code&gt; is the field you build your tracking on. It is the only thing tying a &lt;code&gt;BoardRequest&lt;/code&gt; to the &lt;code&gt;BoardReleased&lt;/code&gt; or &lt;code&gt;BoardFailed&lt;/code&gt; that eventually follows it.&lt;/p&gt;
&lt;p&gt;The response is where the MES exercises control:&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th style="text-align: left"&gt;&lt;code&gt;BoardRequestResult&lt;/code&gt;&lt;/th&gt;
&lt;th style="text-align: left"&gt;Effect&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;RequestResult&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;The verdict — see below&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;Reason&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;Free text, surfaced on error&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;BoardPath&lt;/code&gt; / &lt;code&gt;BoardSide&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;Which board and side the result applies to — &lt;code&gt;Top&lt;/code&gt;, &lt;code&gt;Bottom&lt;/code&gt;, &lt;code&gt;Undefined&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;OverridingBarcode&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;Rewrite the barcode and whisper the new one down the line&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;RecipeName&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;Tell the stations which program to run (Process Lens only)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;VIHResult&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;Virtual Inkspot Handling — mark individual subpanels to be skipped&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;BoardCorrection&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;Per-placement delta on x, y, theta, per subpanel&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;AdditionalBoardData&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;Extra board and subpanel data for BGK&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;And the verdict itself:&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th style="text-align: left"&gt;&lt;code&gt;RequestResult&lt;/code&gt;&lt;/th&gt;
&lt;th style="text-align: left"&gt;What the line does&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;Confirmed&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;Board proceeds to the next processing step&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;Rejected&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;Board is locked in the conveyor and must not enter the next step&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;Internal_Error&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;Conveyor stops, board must be removed from the line&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;&lt;code&gt;PassThrough&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;Board passes through without being produced&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;Two things about this table. First, &lt;code&gt;Internal_Error&lt;/code&gt; is not a soft failure — it is an operator walking to the line with a pair of gloves. Throwing an unhandled exception out of your validation logic is a production stop.&lt;/p&gt;
&lt;p&gt;Second, everything here is a &lt;em&gt;string&lt;/em&gt;. &lt;code&gt;RequestResult&lt;/code&gt; is the string representation of &lt;code&gt;BoardNotificationResultValues&lt;/code&gt;, and so is &lt;code&gt;BoardSide&lt;/code&gt;, and so are the enums on &lt;code&gt;Position&lt;/code&gt;. That was deliberate: serializing enums as strings means adding a new enum member in a later interface version does not break software built against the old one. It is a small, unfashionable decision, and it is precisely what lets one adapter serve five interface versions at once.&lt;/p&gt;
&lt;hr&gt;
&lt;h2 class="relative group"&gt;OIB Eventing
&lt;div id="oib-eventing" class="anchor"&gt;&lt;/div&gt;
&lt;span
class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
&lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#oib-eventing" aria-label="Anchor"&gt;#&lt;/a&gt;
&lt;/span&gt;
&lt;/h2&gt;
&lt;p&gt;Board Gatekeeper is request/response. Nearly everything else in OIB flows through Eventing — it is the central nervous system of the platform, and every adapter publishes into it.&lt;/p&gt;
&lt;p&gt;OIB draws a sharp line between two kinds of adapter-initiated communication.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Simple eventing&lt;/strong&gt; is for data of minor importance. Your client opens its own web service, the adapter calls it directly, and if a message is lost nobody notices. The canonical example is the Optimizer Adapter reporting progress on an optimization run. A dropped progress update is a progress bar that jumps.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Safe eventing&lt;/strong&gt; — what OIB actually means by &lt;em&gt;OIB Eventing&lt;/em&gt; — is for mission-critical data that is not allowed to get lost while the client is down. The Setup Center packaging unit consumption and movement. Miss one of those and your MES is planning production against material that no longer exists, which the docs describe, accurately, as causing &amp;ldquo;painful production problems&amp;rdquo;.&lt;/p&gt;
&lt;p&gt;&lt;figure&gt;&lt;img
class="my-0 rounded-md"
loading="lazy"
decoding="async"
fetchpriority="low"
alt="Subscriptions"
src="https://image.j-roque.com/posts/20260908-oib/asm_eventing.png"
&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;hr&gt;
&lt;h2 class="relative group"&gt;Connect IoT
&lt;div id="connect-iot" class="anchor"&gt;&lt;/div&gt;
&lt;span
class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
&lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#connect-iot" aria-label="Anchor"&gt;#&lt;/a&gt;
&lt;/span&gt;
&lt;/h2&gt;
&lt;p&gt;OIB is complex: many adapters, many configurations. It requires the user to create a .net framework application and integrate with each different type of adapter. This easily leads to bespoke applications that exist and spread inside your shopfloor.&lt;/p&gt;
&lt;p&gt;With CM MES Connect IoT this is all seamless. Let&amp;rsquo;s build a simple integration using OIB &lt;code&gt;Board Gate Keeper&lt;/code&gt; for interlocking on Track-In and use &lt;code&gt;Eventing&lt;/code&gt; to perform a trackout.&lt;/p&gt;
&lt;h3 class="relative group"&gt;Setup
&lt;div id="setup" class="anchor"&gt;&lt;/div&gt;
&lt;span
class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
&lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#setup" aria-label="Anchor"&gt;#&lt;/a&gt;
&lt;/span&gt;
&lt;/h3&gt;
&lt;p&gt;In the setup we can configure the all the typical configuration of OIB Core access, like the sdk, configuration manager and address, the lines and sites we want to handle and the lines we want to ignore.&lt;/p&gt;
&lt;p&gt;&lt;figure&gt;&lt;img
class="my-0 rounded-md"
loading="lazy"
decoding="async"
fetchpriority="low"
alt="Setup"
src="https://image.j-roque.com/posts/20260908-oib/workflow_setup.png"
&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;In the task &lt;code&gt;Extensions Setup&lt;/code&gt; we can configure all the OIB extensions we want to use for our implementation.&lt;/p&gt;
&lt;p&gt;&lt;figure&gt;&lt;img
class="my-0 rounded-md"
loading="lazy"
decoding="async"
fetchpriority="low"
alt="Board Gate Keeper Setup"
src="https://image.j-roque.com/posts/20260908-oib/setup_bgk.png"
&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;Here, you will have access to features like selecting where the Board Gate Keeper should be registered in the ISA95 tree and what are the port ranges it should use.&lt;/p&gt;
&lt;p&gt;&lt;figure&gt;&lt;img
class="my-0 rounded-md"
loading="lazy"
decoding="async"
fetchpriority="low"
alt="Eventing"
src="https://image.j-roque.com/posts/20260908-oib/setup_eventing.png"
&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;For eventing we can set where in the ISA 95 tree to listen to. Crucially, we also can choose when we consider an event &lt;em&gt;stale&lt;/em&gt; to be discarded. Important in reconnect cases.&lt;/p&gt;
&lt;h3 class="relative group"&gt;Material In
&lt;div id="material-in" class="anchor"&gt;&lt;/div&gt;
&lt;span
class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
&lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#material-in" aria-label="Anchor"&gt;#&lt;/a&gt;
&lt;/span&gt;
&lt;/h3&gt;
&lt;p&gt;Sending the information to the MES querying if a particular panel can enter a machine via board gate keeper is very transparent. We use the &lt;code&gt;Gate Keeper Board Request&lt;/code&gt; task to receive a request. We can then perform transformations and call the MES to signal we want to track-in a particular panel. The MES is already very robust in making sure that we only produce what we should produce and that everyting is in the proper conditions to produce.&lt;/p&gt;
&lt;p&gt;If the MES finds any problem in the request it will reply back with an error. We will catch that error and reply back to the OIB, with a requestResult of Error and an error message that will be displayed in the HMI of the machine. If it&amp;rsquo;s ok, we will simply reply back with a requestResult &lt;em&gt;Confirmed&lt;/em&gt;.&lt;/p&gt;
&lt;p&gt;&lt;figure&gt;&lt;img
class="my-0 rounded-md"
loading="lazy"
decoding="async"
fetchpriority="low"
alt="Material In"
src="https://image.j-roque.com/posts/20260908-oib/material_in.png"
&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h3 class="relative group"&gt;Material Out
&lt;div id="material-out" class="anchor"&gt;&lt;/div&gt;
&lt;span
class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
&lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#material-out" aria-label="Anchor"&gt;#&lt;/a&gt;
&lt;/span&gt;
&lt;/h3&gt;
&lt;p&gt;For material out we won&amp;rsquo;t apply interlocking.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;It&amp;rsquo;s true that we could with the OIB &lt;em&gt;Traceability&lt;/em&gt; module Board Produced Request, but this is not a common request.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;We will just be notified that the panel has finished by eventing and we will track-out the material in the MES.&lt;/p&gt;
&lt;p&gt;&lt;figure&gt;&lt;img
class="my-0 rounded-md"
loading="lazy"
decoding="async"
fetchpriority="low"
alt="Material Out"
src="https://image.j-roque.com/posts/20260908-oib/material_out.png"
&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;hr&gt;
&lt;h2 class="relative group"&gt;Modelling OIB with Connect IoT
&lt;div id="modelling-oib-with-connect-iot" class="anchor"&gt;&lt;/div&gt;
&lt;span
class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
&lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#modelling-oib-with-connect-iot" aria-label="Anchor"&gt;#&lt;/a&gt;
&lt;/span&gt;
&lt;/h2&gt;
&lt;p&gt;In reality these kind of integrations are fairly uncommon.&lt;/p&gt;
&lt;p&gt;The Electronics industry template, ships OIB support out of the box. It covers a plethora of adapters and MES scenarios &lt;a
href="https://help.criticalmanufacturing.com/userguide/industrytemplates/smt/equipmentintegration/oib/"
target="_blank"
&gt;here&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;For example, mapping the same scenario with the Electronics industry template (EIT) is just filling in a smart table.&lt;/p&gt;
&lt;p&gt;&lt;figure&gt;&lt;img
class="my-0 rounded-md"
loading="lazy"
decoding="async"
fetchpriority="low"
alt="EIT Integration"
src="https://image.j-roque.com/posts/20260908-oib/EID_Integration.png"
&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;The workflow may seem complex, but it implements a full coverage of OIB use cases and adapters. It also supports different ways you can use OIB for all these MES actions. It also is resilient and robust and has already been battle tested against naive implementations of these integrations.&lt;/p&gt;
&lt;p&gt;&lt;figure&gt;&lt;img
class="my-0 rounded-md"
loading="lazy"
decoding="async"
fetchpriority="low"
alt="OIB Workflow"
src="https://image.j-roque.com/posts/20260908-oib/EIT_oib_Integration.png"
&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;The EIT comes out of the box with typical integrations for Electronics ready to use, from Hermes, OIB, IPC-CFX, Fuji-Nexim, etc.&lt;/p&gt;
&lt;p&gt;We can then leverage those integrations as they are or use extendable controllers to adapt them to our particular use case &lt;a
href="https://j-roque.com/posts/20250730-iot-extensibility-iv/"
target="_blank"
&gt;here&lt;/a&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h2 class="relative group"&gt;Final Thoughts
&lt;div id="final-thoughts" class="anchor"&gt;&lt;/div&gt;
&lt;span
class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
&lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#final-thoughts" aria-label="Anchor"&gt;#&lt;/a&gt;
&lt;/span&gt;
&lt;/h2&gt;
&lt;p&gt;OIB is a complex and protocol, it&amp;rsquo;s industry and vendor specific. But with CM MES Connect IoT and Industry Template it becomes as simple as configuring a table. It buys you the peace of mind of having a resilient, turn key solution to one of the hardest nuts to crack on an electronics shopfloor.&lt;/p&gt;
&lt;p&gt;Right now, on some SMT line, a printed circuit board is sitting motionless in a conveyor while the line waits — because a web service has not yet said whether that board may continue. The MES receives this requests validates all is well, the recipe is correct, the line setup is ok, the machine is the correct one, the lot is as expected and it has the required raw materials and replies back with an ok, and the board can continue.&lt;/p&gt;
</content:encoded>
<enclosure url="https://j-roque.com/posts/20260908-oib/featured.png" type="image/png" length="0"/>
<media:content url="https://j-roque.com/posts/20260908-oib/featured.png" type="image/png" medium="image"/>
</item>
</channel>
</rss>