Konverteringsoperationer
Skalning & Typer
Datakonvertering är bron mellan den fysiska världen och digital kod. Behärska skalning av analoga signaler och transformering av datatyper.
Vad är konverteringsoperationer i TIA Portal?
Konverteringsoperationer gör det möjligt att transformera ett värde från en datatyp till en annan (t.ex. från heltal till realtal) eller manipulera precisionen hos flyttal. De inkluderar även verktyg för normalisering och skalning, nödvändiga för att bearbeta analoga signaler.
TIA Portal erbjuder moderna instruktioner som SCALE_X och NORM_X som ersätter de gamla SCALE/UNSCALE-blocken från S7-300, vilket ger större flexibilitet och precision.
Typkonvertering
Transformering och avrundning av numeriska format
CONVERT — Konvertera värde
CONVVad den gör
Konverterar ett värde från en källdatatyp till en måldatatyp. Hanterar konverteringar mellan heltal, realtal, tecken, tid och strängar.
När den ska användas
Förbereda ett heltal för komplexa beräkningar genom att omvandla det till Real, eller konvertera en felkod till String för HMI.
Proffstips
I LAD, klicka på blockets datatyper för att välja källa och mål.
I SCL: myReal := INT_TO_REAL(myInt);
Se upp för precisionsförlust vid konvertering från stora typer till kortare.
ROUND / TRUNC
ROUNDVad de gör
ROUND avrundar ett flyttal till närmaste heltal. TRUNC tar helt enkelt bort decimaldelen (trunkering).
När den ska användas
Visa ett fysiskt mätvärde som ett enkelt heltal eller konvertera ett Real-resultat till ett array-index (Int).
Proffstips
Om decimaldelen är exakt .5 avrundar ROUND till närmaste jämna heltal (IEC-standard).
TRUNC är att föredra om du bara vill ignorera decimaler utan avrundning.
Båda accepterar Real/LReal och returnerar vanligtvis en DInt.
CEIL / FLOOR
CEILVad de gör
CEIL (Tak) genererar närmast högre eller lika heltal. FLOOR (Golv) genererar närmast lägre eller lika heltal.
När den ska användas
Beräkna antal behållare som behövs (avrunda alltid uppåt med CEIL).
Proffstips
CEIL(10.1) = 11 ; FLOOR(10.9) = 10.
Viktigt för logistikalgoritmer.
Användbart för att säkerställa att ett värde stannar inom strikta heltalsgränser.
Skalning (Scaling)
Bearbetning av analoga signaler
NORM_X — Normalisera
NORM_XVad den gör
Transformerar ett värde inom ett område [MIN..MAX] till ett normaliserat värde mellan 0.0 och 1.0.
När den ska användas
Läsa ett rått analogvärde (t.ex. 0-27648) och omvandla det till procent.
Proffstips
Följs vanligtvis omedelbart av ett SCALE_X-block.
Om ingången överskrider gränserna kommer utgången överskrida 0.0 eller 1.0.
Se till att MIN skiljer sig från MAX.
SCALE_X — Skala
SCALE_XVad den gör
Tar ett normaliserat värde [0.0..1.0] och projicerar det på ett fysiskt område (t.ex. 0-100°C).
När den ska användas
Konvertera resultatet från NORM_X till en läsbar teknisk enhet.
Proffstips
Kombinationen NORM_X + SCALE_X är den moderna Siemens-standarden.
Gör det enkelt att byta givarområde.
Kan även användas för det omvända: skicka ett fysiskt börvärde till en analog utgång.
Legacy-instruktioner
S7-300 kompatibilitet (FC105 / FC106)
SCALE / UNSCALE
Vad den gör
Gamla block som utför direktkonvertering i ett enda steg.
När den ska användas
Underhåll av program migrerade från Step 7 Classic.
Proffstips
SCALE motsvarar gamla FC105.
Använd BIPOLAR för negativa signaler (+/- 10V).
Föredra NORM_X/SCALE_X för nyutveckling.
Jämförelse av metoder
Välj rätt instruktion efter behov
| Du vill... | Rekommenderad | Exempel |
|---|---|---|
| Byta typ (Int -> Real) | CONVERT | Exakt beräkning |
| Ta bort decimaler | TRUNC | Enkel temperaturvisning |
| Avrunda | ROUND | Statistik |
| 4-20mA givare | NORM_X + SCALE_X | Tryck 0-16 bar |
| Säkerhetsavrundning uppåt | CEIL | Beräkning av pallar |
| Gammal S7-300 kod | SCALE (FC105) | Migrering |
Vanliga frågor
Varför använda NORM_X och SCALE_X istället för ett enda block?
Det ger större flexibilitet att filtrera eller begränsa det normaliserade värdet innan skalning.
Vad är standardvärdet för Siemens analogingångar?
Vanligtvis 0 till 27648 för unipolära signaler.
Hur konverterar jag till String?
CONVERT gör det inbyggt, eller använd VAL_STRG för mer kontroll.
Skillnad mellan ROUND och TRUNC?
ROUND avrundar till närmaste, TRUNC klipper helt enkelt bort decimalerna.