Berekening in S1200

Hello
in een S1200 moet ik een getal gaan spreiden over twee woorden.

elke bitverhoging in het minst beduidende woord komt overeen met 0.01
elke bitverhoging in het meest beduidende woord komt overeen met 655.36

hoe kan ik nu elk willekeurig getal spreiden over deze woorden.

Frederick E. Terman

Honourable Member

Ik moet een bedrag verdelen over euro's en centen.
Elke verhoging in de centenkolom komt overeen met 0,01 euro
Elke verhoging in de eurokolom komt overeen met 1,00 euro.

Antwoord: kijk eerst hoeveel euro's eruit gaan; de rest gaat in de centen.

Keramisch, kalibratie, parasitair: woordenlijst.org

ik denk dat ik gebruik moet maken van modulo
maar is er niets simpeler door bv te shiften oid

Frederick E. Terman

Honourable Member

Het begint een beetje als een schoolvraag te klinken?

Keramisch, kalibratie, parasitair: woordenlijst.org
Arco

Special Member

Wat is een S1200?
Enige wat ik kan vinden is een Intel Atom processor, een CD speler, en een beamer...

Arco - "Simplicity is a prerequisite for reliability" - hard-, firm-, en software ontwikkeling: www.arcovox.com

Ik gok dat het over een Siemens PLC gaat.

Het klinkt voor mij ook ernstig als een schoolvraag, dus ik zal hem als zodanig behandelen.

@TS: hoe groot is een "woord"? Wat is de maximale grootte van een variabele die je kunt aanmaken? Waar komt het geval dat je moet "spreiden" eigenlijk vandaan? Als dat het resultaat is van een berekening, waarbij je dat resultaat tussentijds niet kunt opslaan, zal het sowieso een uitdaging worden, want na het uitvoeren van de berekening ben je alle bitjes die je niet kon opslaan al kwijt, nog voordat je de kans kreeg ze te "spreiden" over die 2 woorden.

Je "moet" helemaal niets; er zijn 1000 wegen die naar Rome leiden, maar sommige gaan via een enorme omweg. Er zijn dus ook talloze manieren om jouw probleem op te lossen, en sommige zijn beter dan anderen.

[Bericht gewijzigd door SparkyGSX op zaterdag 7 december 2013 14:36:00 (15%)

Een manager is iemand die denkt dat negen vrouwen in één maand een kind kunnen maken

er moet een getal afkomstig van een real naar twee woorden van 16 bits geschreven worden. niet naar een variabele maar direct naar de periferie.

de minst en meest beduidende woorden hebben dus resp een gewicht van 0.01 en 655.36

inderdaad voor dit probleem zullen er wel meerdere oplossingen bestaan maar ik zoek diegene met de minste berekeningen en code

[Bericht gewijzigd door shortcircuit op zaterdag 7 december 2013 14:39:51 (43%)

Wat heb je zelf al bedacht? Hoe denk je dat bitshiften in zijn werk gaat, met een real als uitgangspunt? Als je eenmaal een methode bedacht of gekozen hebt, hoe ga je bewijzen dat het resultaat in alle gevallen correct is?

Je zou het getal kunnen vermenigvuldigen met 100, en het resultaat opslaan in het laagst woord (bits "achter de komma" en boven de grootte van het woord vallen vanzelf weg), en het getal delen door 655.36, waarbij je het resultaat opslaan in het hoogste woord.

Voorbeeld:

getal: 1234.56
1234.56 * 100 = 123456 (decimaal) = 1 E240 (hex), wordt dus E240 (hex) oftewel 57920 (decimaal) in het laagst woord
1234.56 / 655.36 ~= 1.884, dus 1 in het hoogste woord.

Controle: 1 * 655.36 + 57920 / 100 = 1234.56

Correct! Nu is de vraag of deze methode in alle gevallen correct is...

[Bericht gewijzigd door SparkyGSX op zaterdag 7 december 2013 15:36:35 (57%)

Een manager is iemand die denkt dat negen vrouwen in één maand een kind kunnen maken
GJ_

Moderator

Ik neem ook aan dat het om een S7-1200 gaat. En om een schoolvraag, dit lijkt me niet iets uit de praktijk! Voorlopige move->schoolvragen dus.

Op 7 december 2013 14:37:43 schreef shortcircuit:...maar ik zoek diegene met de minste berekeningen en code

Dat is zeker als het om wat spannender zaken gaat meestal erg onverstandig. Liever wat regels extra en een boel commentaar om het vooral zo duidelijk mogelijk te maken. Handig als je het twee jaar later nog eens wil aanpassen. Of als je hard tegen een boom rijdt en een ander het verder moet onderhouden.