CNC, robots & PLCs New
Connect Machine Logs to Excel, Sheets and AI
Your machines already write the data — query it with SQL. Every CNC control, robot controller and PLC gateway keeps a log — alarm histories, operation histories, message logs. Point Query Streams at the folder those files land in and they become SQL tables, complete with alarms, cycles, downtime and OEE inputs. No PLC programming, no MES rollout, no software installed on the machine.
A folder of controller logs becomes a downtime table.
Query Streams reads the files the control already writes, pins their format, and derives the tables a plant actually asks for. The raw lines stay queryable too — a line the parser cannot read is kept as a row with a reason, never silently dropped.
OPRT_HIS.TXTFANUC
AlarmHistory.txtHaas
msg_log.txtCentroidRotations, re-punched exports and duplicate lines — handled
SELECT date, identity,
running_s / planned_s AS availability,
down_unplanned_s, small_stops
FROM fileset.oee_inputs
WHERE identity = 'MILL-04'
ORDER BY date DESCJoin it to your ERP work orders in the same query
Files the machine already writes, now a table you can report on
Twelve controller brands, out of the box
Each card names the exact files Query Streams reads on that controller, where they come from, and how the file behaves — appended live, rewritten whole on every export, or one new file per event.
Supported controller logs
19 formats · 12 brands
MazakMTConnect
/shdr/*.txtMTConnect adapter stream capture- One file per machine per day
- Appends live while the machine runs
KUKARobot controller
Logbuch_*.txtcontroller diagnostics export- UTF-16 text, decoded for you
- Rewritten in full on every export
- woodWOP NC run file, written at Cycle Start
.prl .ctt .pctCutRite planning files, eleven per optimisation- One new file per run
Fanuc30i / 31i · robots
OPRT_HIS.TXToperation history, punched from the controlMD/ERRALL.LSrobot alarm history from a controller backup- Ring buffer — re-punched whole, never appended
HaasSystem Data backup
AlarmHistory.txtalarm history with codes and timestamps- Unzipped from
HaasBackup(mm-dd-yyyy)on the USB stick - One new file per backup
OkumaOSP control
ALARM_HISTORY.DATOSP alarm history- From the
NCBACKUPfolder of a control backup - Rewritten whole each backup
SiemensSINUMERIK
ac_log/*.logHMI action log and alarm log- From
/user/sinumerik/hmi/ac_logon the control - Rewritten whole on export
HeidenhainTNC control
TNC:\LOGBOOK.Acontrol logbook dump- Pulled with MOD code LOGBOOK, or TNCremo
- Rewritten whole on each dump
MitsubishiM7 / M8
LOG\ALMLOG.LOGalarm log- From a control backup written to a memory card
- Rewritten whole each backup
CentroidCNC12
c:\cncm\msg_log.txtmessage log —cncton a lathe- Also read from the F7 Create Report zip
- Appends, then trims from the head — handled without losing rows
HurcoWinMax
Output Files\NavErrone file per errorOutput Files\NavESTOPone file per E-stop- New file per event, folder grows without limit
KawasakiRobotics
ERRLOGrobot error log- Saved with the controller data backup (SAVE / ELOG)
- Rewritten whole each backup
Logs/*_YYYY-MM-DD.logCNC controller syslogLogs/plc*.logPLC key=value telemetry*.jsonlrobot controller JSON lines*_YYYYMMDD.csvheaderless laser CSV, decimal comma
New controller formats are added with each Agent release. Because Agents keep themselves up to date, a controller supported later shows up in your connector without anyone walking a USB stick to a machine.
Controller logs from every plant, read where the machine is
A controller log is stranded by default. It sits on the machine or on a share on the shop floor, behind a plant firewall, in a building your reporting tools were never going to reach. Each plant runs a Network Agent that reads those files in place and dials out to Query Streams. As far as the plant firewall is concerned that is an ordinary outbound connection — nothing to open, no site-to-site VPN, and no ticket per machine.
Three outbound connections, one place to query them — no inbound port, no VPN, no firewall change
One Agent per plant
An Agent covers a whole site rather than a single machine: every controller share at that plant becomes its own File Set connector on the same Agent. The free tier runs a single Agent and higher tiers run more.
1 plant = 1 Agent = many controllers
Nothing to open
The Agent makes one encrypted outbound connection, and the request out and the rows back both travel over it. No inbound port, no site-to-site VPN, and nothing for plant IT to expose — credentials stay inside the plant network.
one connection, both directions
One query across plants
Every source in a federated query names its own Agent, so a single statement can compare downtime at two plants on different continents, or join either of them to your ERP work orders. Included on Business and Enterprise.
2 plants → 1 result set
They keep themselves current
Agents update themselves, so a controller format added in a later release reaches every plant without anyone walking a USB stick onto the shop floor. That is what makes the wall above a starting point rather than a fixed list.
new formats arrive with the Agent
Machine logs do not behave like server logs
A controller rarely appends politely to one growing file. Query Streams recognises four different growth patterns, so re-punched exports and trimmed logs do not turn into duplicate rows.
Append
The familiar case — new lines are added to the end of the file and the earlier lines never move.
MTConnect SHDR capture · CNC syslog
Append with head trim
Lines are appended, then the control periodically deletes lines from the top to cap the file size. Following a byte offset alone would silently skip data.
Centroid CNC12 msg_log.txt
Snapshot rewrite
Every export rewrites the whole file from a fixed-size ring buffer in the control. Two exports overlap heavily, so the overlap has to be recognised rather than re-imported.
FANUC OPRT_HIS.TXT · Okuma · Heidenhain · Kawasaki
One file per event
The control writes a brand new file for each alarm, estop or program run. The folder grows in file count, not file size.
Hurco NavErr · Haas · HOMAG woodWOP
From log lines to the five tables a plant reports on
Parsing is the easy half. Query Streams turns parsed lines into interval tables — then into the availability inputs your OEE board needs.
The seconds add up: planned time always equals running plus setup plus every down bucket — no unexplained time.
Aligned to the standards your plant already reports in
The classification vocabulary is not invented. It follows the published models, so the numbers reconcile with what your quality and continuous-improvement teams already use.
Every idle interval resolves to one of the six standard equipment states.
Availability is computed the way the standard defines it — actual production time over planned busy time — with planned stops inside the shift window treated as availability losses.
Downtime lands in a named loss bucket, including an honest bucket for time we cannot attribute.
A small, fixed reason vocabulary drives the mapping — and a reason we cannot resolve is reported by name rather than guessed.
Where your machine log data can go
A downtime table nobody can reach is not much use. Connect the log folder once and the same read-only connection feeds every surface Query Streams supports — no second setup, no second copy of the data, and no difference in treatment from a database connector.
Machine logs to Excel
Microsoft Excel · Excel add-in
Pull live machine log results straight into a worksheet and refresh them on demand — desktop Excel, Excel Online, Microsoft 365.
How Excel worksMachine logs to Google Sheets
Sheets add-on
Run a saved machine log query from the sidebar and drop the rows into the sheet. Shared collaborators can refresh it themselves.
How Google Sheets worksMachine logs MCP server
Claude, Cursor and MCP clients · MCP server
Give an AI assistant read-only access to machine log with the schema it needs to write correct SQL — no credentials in the chat.
How MCP worksMachine logs REST API
HTTP endpoint
Publish a machine log query as an authenticated JSON endpoint any application can call, with an OpenAPI 3.1 spec and ready-made Postman, Insomnia and Hoppscotch collections. No database port is opened.
How REST API worksMachine logs to Airtable
Automation platform
Sync machine log rows into an Airtable base on a schedule, or fetch them inside an Airtable automation script.
How Airtable worksMachine logs to Baserow
Automation platform
Feed a Baserow table from machine log over the REST endpoint — self-hosted or Baserow cloud.
How Baserow worksMachine logs to SeaTable
Automation platform
Keep a SeaTable base current with machine log data without exporting a file or exposing the database.
How SeaTable worksMachine logs to Smartsheet
Automation platform
Push machine log results into a Smartsheet grid so plans and reports read from the source system, not last week's export.
How Smartsheet worksMachine logs to Anvil
Anvil Works · App platform
Back an Anvil Python app with machine log through the REST endpoint instead of embedding database credentials in the app.
How Anvil worksMachine logs to Power BI
Power Query M
Paste the generated Power Query M into the Power BI Advanced Editor and the report reads live machine log results over HTTPS — no ODBC driver, no database port opened.
How Power BI worksMachine logs alerts and reports
Slack · Discord · Email · Webhook
Put a machine log query on a schedule and have the rows delivered to Slack, Discord, email or a signed webhook — or hold the message until a row count, threshold or percentage change crosses the line you set.
How alerts and reports workHow it works
Three steps, and nothing gets installed on the control.
Point at the folder
Copy or sync the control’s logs to a folder your Query Streams Agent can reach — a share, a backup target, the machine PC itself. The Agent reads it; the machine is never touched.
It recognises the format
Query Streams matches the files against the catalogue, pins the format it detects, and builds the tables. A file that violates the pinned format is parked with a reason instead of corrupting the table.
Query it, or join it
Run SQL from the portal, land it live in Microsoft Excel or Google Sheets, or use a federated query to join machine downtime to work orders in your ERP database — in one statement.
Machine log FAQ
Do I have to install anything on the machine control?
No. Query Streams reads files, so nothing is installed on the control and nothing is written back to it. You point a Query Streams Agent at whatever folder the logs already reach — a network share, the folder a USB backup gets copied into, or the machine PC. Access is read-only.
Have you actually seen my controller’s logs, or just the documented format?
Both cases exist, and it is worth knowing which one you are in. Three brands have parsers built and tested against real files captured off the machine: Mazak via MTConnect, KUKA, and HOMAG. The other nine were built against the vendor’s published format description.
Every one of them is supported and tested — but we would rather say this plainly than let you assume we have seen your exact control. If yours is in the second group and something does not parse, send us a sample and it moves into the first.
My control is not on the list. Is it out of luck?
Probably not. Alongside the twelve named brands there are four generic shapes that cover a great deal of shop-floor equipment: CNC controller syslog, PLC key=value telemetry, robot JSON lines, and headerless CSV exports of the kind laser cutters produce. If your log looks like any of those, it will read.
What happens to lines that do not parse?
They are kept. An unparsed line is stored as a row carrying the reason it could not be read, so it stays visible and queryable. The same applies at file level — a file that no longer matches the pinned format is parked and reported rather than quietly merged in. You can always account for every line in the folder.
Can I join machine downtime to my ERP data?
Yes — that is the point of putting logs in SQL. A federated query can join the derived idle_intervals or oee_inputs tables to work orders, part masters or schedules living in a completely separate SQL Server, Postgres or MySQL database, and return one joined result set.
Is this a log monitoring or alerting product?
No, and we would rather be clear about it. This is not a log shipping pipeline or an operations monitoring platform. It makes existing log files queryable with SQL and reportable in a spreadsheet. If you need streaming ingest and real-time alerting at infrastructure scale, that is a different category of tool.
Stop retyping alarm histories into spreadsheets.
Point Query Streams at the folder your controller logs already land in, and get downtime, cycles and OEE inputs as SQL.
Free forever tier · No credit card required












