På papperet är det en en-till-en-konvertering. Det är det aldrig.
Jag flyttade ett Mitsubishi FX-ladderprogram från 1990-talet till funktionsblock i ABB 800xA. Det såldes in som ett lika-för-lika-byte. Här är var det sprack och hur jag faktiskt gjorde jobbet.
En översättning på ditt språk är inte klar ännu — visar det engelska originalet.
Den här artikeln skrevs ursprungligen på engelska. Översättningen är gjord av en AI och kan innehålla fel.
Migreringar som den här säljs in som en-till-en. Ta det gamla systemet, gör samma sak i ny hårdvara och mjukvara, lämna tillbaka det med exakt samma beteende. På försättsbladet läser det som copy-paste med en budget vidhängd.
Det här var en gammal Mitsubishi FX-PLC med ett ladderprogram från 1990-talet. Jobbet var att flytta in det i ABB 800xA, ombyggt som en styrmodul i FBD. Samma beteende, ny plattform.

”En-till-en” är en säljmening
Jag tror inte att någon ljuger när de kallar det 1:1. Från kundens stol är det sant: samma knappar, samma sekvens, samma utsignaler, linjen kör som den alltid gjort. Det är det de betalar för. Från ingenjörens stol följer nästan ingenting med som det är. Här är vad jag stötte på.
Mjukvaran är äldre än jag
Originalprojektet gick inte att öppna i GX Developer. Det öppnades i GX IEC Developer, den europeiska IEC 61131-3-grenen av Mitsubishis verktyg, som växte fram ur den gamla MEDOC-mjukvaran från 1990-talet. Projektet var antagligen skrivet i den linjen från början.
Första överraskningen var hårdvarukonfigurationen. Den ligger inte på en egen sida. Den skrivs som kod i block i själva programmet, oftast allra sist så att man slipper gräva sig igenom allt för att ändra den. Jag tyckte det var svårare att läsa än något annat jag jobbat med. De grafiska hårdvarueditorerna i nyare ABB- och Siemens-verktyg är helt enkelt bättre.
Ladder och FBD tänker inte likadant
Ladder är kontakter och spolar, ström som går från vänster till höger, en bild av en reläpanel. FBD är signaler som går genom block. En självklar rung i ladder kan bli ett klumpigt kluster av block, och något som är rent i FBD skulle bli en röra av rungar på vägen tillbaka. Man får utsignalerna att stämma medan strukturen under blir något helt annat än originalet. För att bevisa att det beter sig likadant måste man förstå det gamla programmet mycket djupare än att bara läsa det uppifrån och ner.
Delarna utan motsvarighet
En del av det de här programmen lutar sig på har ingen tvilling i 800xA. Varje sådan bit hittar man genom att läsa noga, och sedan bygger man om den för hand.
DECO-blocket. Ladder avkodar ett tal till en av många utgångar med en enda instruktion. 800xA har inget liknande. Jag landade i MOD och DIV för att dela upp ental och tiotal, och tio EQ-block mot utgångarna.
Hoppinstruktioner. Villkorliga hopp, CJ, hoppar över hela logiksektioner.
Fysiska justeringar i logiken. Vissa timerförinställningar trimmades på maskinen med potentiometrar. På FX:en landar de i särskilda dataregister, D8030 och D8031, och programmet skalar om dem till en förinställning. I den nya modulen blir de parametrar.
Speciella hjälpreläer. Systemreläer i M8000-serien formar delar av logiken. M8028 växlar tidsbasen på ett block av timers.
Oktal adressering. In- och utgångar på FX:en är numrerade i bas 8, inte bas 10. Ingångarna X000 till X007 visade sig vara inkopplade till 20 ventiler, och programmet läser dem för att avgöra hur många ventiler som ska öppna. Ett ventilantal på ”19” betyder 20, det är nollindexerat. Att få det rätt tog en hel dag av att läsa på om BCD, om hur bitar och bytes lagras i de här äldre styrsystemen, och om tecknade och teckenlösa värden. Innan dess gick rungarna inte ihop.
Det som inte funkade: att be en AI göra hela jobbet
Det första jag gjorde när jag fick jobbet, mest på skoj, var att ge ladderprogrammet till en AI och be den bygga en komplett 800xA-styrmodul av det, upplagt som ett HTML-dokument med FBD-blocken utritade. Det funkade inte. Resultatet var inte korrekt på något sätt. Värt tio minuter för att veta säkert: den här sortens uppgift kan man inte lämna över till en modell och vänta sig ett mirakel.
Det som funkade
Jag är 21 och, när det här skrivs, ungefär två år in i yrket. Ett ladderprogram från 1990-talet var helt främmande för mig.
I stället för att be om en översättning exporterade jag laddern till PDF och bad AI:n göra ett dokument av den som förklarar programmet del för del, steg för steg. Gör det på en företagsintern on-prem-plattform, och först efter att det är godkänt med ditt företag och kunden. Jag läste det dokumentet, och det var där jag först lärde mig om BCD, oktal adressering och hur minnet är upplagt i de här styrsystemen. Det gjorde något som ingen rört på årtionden till något jag kunde resonera kring. AI:n har fel ibland, och gissar med självsäkerhet, ibland väldigt mycket självsäkerhet, så dubbelkolla alltid allt som inte riktigt går ihop.
Sedan papper. Jag skrev ut hela ladderprogrammet på A3 och gick igenom det rad för rad med en blyertspenna, anteckningar och streck som band ihop det, tills jag förstod vad som hände var. Det var då det lossnade på riktigt.
Sedan började jag skriva FBD:n. Den biten är inte linjär. Man börjar inte uppe till vänster och skriver till slutet. Jag kom till ställen där jag inte visste hur något skulle kopplas, lämnade det, gick vidare, och hittade längre ner logiken som lät mig gå tillbaka och göra klart det.
När FBD:n var klar skrev jag ut den på A3 också, la den bredvid laddern och gick igenom båda med en grön märkpenna och strök över varje sektion som gjorde samma sak logiskt. En simulering i huvudet, på papper. När allt var grönt gick jag vidare.
Sedan en riktig simulering. Jag byggde en simuleringsstyrmodul i Control Builder M med ett fönster där jag kunde sätta varje ingång och se varje utgång, och körde den på soft controllern på min laptop. Det gamla programmet kunde jag inte simulera. Jag visste inte om GX Developer ens klarade det, och original-PLC:n körde en anläggning i drift en timme från kontoret som inte kunde stoppas för min skull. Så jämförelsen fick stanna på papper.
Sist hårdvaran. De nya ABB-skåpen kom och det tog två hela dagar bara att få igång dem: ett termineringsmotstånd som saknades på det redundanta systemet, firmwareuppdateringar, stationsnamn, allt sånt som bara tar tid. När det väl gick laddade jag ner programmet och kunde se cykeltider och minnesbelastning på riktigt. AC 800M är en DCS-styrenhet, inte en snabb PLC, men det här programmet behövde vara snabbt, och jag fick ner tasktiden till 30 millisekunder, med processorkraft och minne över.
Slutsatsen
En-till-en är sant från kundens stol och en fiktion från ingenjörens. När ett jobb säljs så, leta tidigt upp de tre ställen där det inte kan vara det: där de två systemen tänker olika, funktionerna och blocken utan motsvarighet, och hårdvaran och signalerna runt omkring.
Lär dig hur det här hänger ihop med vår vision och kärna
Läs mer på tianengineering.com — https://tianengineering.com/articles/on-paper-its-one-to-one-sv/