1. The Problem

Food Manufacturer’s ERP system used standard costing models with assumptions that often varied up to 50% from reality. With sales demand exceeding capacity, management needed to decide which orders to accept or decline, but ERP data couldn’t reliably show true profitability by SKU.

2. The Solution:

<div style="margin:0;padding:0;line-height:0;">
  <svg xmlns="http://www.w3.org/2000/svg"
       viewBox="0 0 900 220"
       width="100%"
       style="display:block;margin:0;padding:0;vertical-align:top;font-family:ui-monospace,Menlo,Consolas,monospace;font-size:13px;">
    <defs>
      <marker id="arrow" viewBox="0 0 10 10" refX="10" refY="5" markerWidth="10" markerHeight="10" orient="auto">
        <path d="M0 0 L10 5 L0 10 Z" fill="#333"/>
      </marker>
    </defs>

    <!-- Header -->
    <text x="335" y="16">[ DataHub (TapProvider) / UI ]</text>

    <!-- Vertical to split -->
    <line x1="450" y1="22" x2="450" y2="40" stroke="#333"/>

    <!-- Split bar -->
    <line x1="40" y1="40" x2="860" y2="40" stroke="#333"/>

    <!-- Left branch (label sits above path to save vertical space) -->
    <text x="160" y="32">reads historical + alarms</text>
    <line x1="160" y1="40" x2="160" y2="70" stroke="#333"/>

    <!-- Right branch -->
    <text x="640" y="32">reads live device values</text>
    <line x1="740" y1="40" x2="740" y2="70" stroke="#333"/>

    <!-- Left box: Historian -->
    <rect x="40" y="70" width="330" height="90" rx="8" ry="8" fill="#f9f9f9" stroke="#333"/>
    <text x="58" y="90">[ Postgres + TimescaleDB ]</text>
    <text x="58" y="112">Historian + Alarms</text>

    <!-- Right box: Edge Sites -->
    <rect x="470" y="70" width="390" height="120" rx="8" ry="8" fill="#f9f9f9" stroke="#333"/>
    <text x="488" y="90">[ Edge Sites ×5 ]</text>
    <text x="488" y="110">FrameworX EdgeConnect</text>
    <text x="506" y="128">• Collects Modbus (read)</text>
    <text x="506" y="144">• Publishes to DNP3 (write)</text>
    <text x="506" y="160">• Exposes device values (read)</text>
    <text x="506" y="176">• Sends timeseries/alarms ? Historian</text>

    <!-- Arrow from Edge Sites to Historian -->
    <line x1="470" y1="130" x2="370" y2="130" stroke="#333" marker-end="url(#arrow)"/>
  </svg>
</div>

Integrated real production data from MES, historian, and ERP with costing models to determine actual cost per SKU. Data included:

  • Raw material consumption

  • Packaging usage

  • Changeover times

  • Waste and rework

  • OEE and production states

FrameworX dashboards visualized this costing intelligence, enabling sales and operations to base decisions on actual margins rather than ERP standards.

Technical Specifications:

  • ERP: Microsoft D365 (Cloud)

  • MES: GE Plant Applications

  • Historian: GE Proficy Historian

  • Front End: Tatsoft FrameworX (dashboards for costing analysis)

  • PLCs: Rockwell Automation

  • Scope: Cost modeling based on years of historical production data

3. Key Enablers:

  • Real-time integration of production metrics with ERP costing

  • FrameworX dashboards to visualize true SKU profitability

  • Flexible data model that grows as more production metrics are tracked

4. The Results:

  • Identified SKUs and customers that appeared profitable but actually lost money

  • Allowed sales to prioritize high-margin orders during capacity constraints

  • Improved bottom line by 10–12% simply by shedding low-margin products

  • Provided sales and marketing tools for negotiating based on real costs


In this section...