Autor |
Beitrag |
delphisual
      
Beiträge: 89
WIN 2000
D5 Prof
|
Verfasst: Fr 16.12.05 16:56
Hallo zusammen!
Ich suche nach einer Möglichkeit einen 42-stelligen, binären Wert so zu formatieren, dass es in eine 16- oder 32-bit vorzeichenlose Variable aufgenommen werden kann. Später sollte natürlich auch dieser Wert in seine ursprüngliche Form gebracht werden.
Hat vielleicht jemand eine Idee oder einen Tipp?
Mit freundlichen Grüßen
delphisual
_________________ (Wer ein Problem definiert, hat es schon halb gelöst.)
|
|
Stefan.Buchholtz
      
Beiträge: 612
WIN 2000, WIN XP, Mac OS X
D7 Enterprise, XCode, Eclipse, Ruby On Rails
|
Verfasst: Fr 16.12.05 17:13
Wie soll das gehen? 42 > 32 - der passt in keine 32 Bit-Variable. In eine 16-Bit Variable natürlich erst recht nicht.
Stefan
_________________ Ein Computer ohne Windows ist wie eine Schokoladentorte ohne Senf.
|
|
Miri
      
Beiträge: 657
Delphi 3 Prof., Delphi 2005 PE
|
Verfasst: Fr 16.12.05 17:16
hmm... in ne Dezimalzahl umwandeln oder so?!
|
|
Stefan.Buchholtz
      
Beiträge: 612
WIN 2000, WIN XP, Mac OS X
D7 Enterprise, XCode, Eclipse, Ruby On Rails
|
Verfasst: Fr 16.12.05 17:21
42 binäre Stellen = 42 Bit. Da kannst du hin- und herwandelt wie du willst, die passen in keine 32-Bit Variable. Ein Int64 würde sich anbieten, der ist - wied er Name schon sagt - 64 Bit breit.
Stefan
_________________ Ein Computer ohne Windows ist wie eine Schokoladentorte ohne Senf.
|
|
delphisual 
      
Beiträge: 89
WIN 2000
D5 Prof
|
Verfasst: Fr 16.12.05 17:22
Genau das ist mein Dilemma!
Deswegen muss mein 42-stelliger Wert irgendwie schrumpfen um weitergegeben zu werden. Es ist einfach nur zum schreien. 
_________________ (Wer ein Problem definiert, hat es schon halb gelöst.)
|
|
Stefan.Buchholtz
      
Beiträge: 612
WIN 2000, WIN XP, Mac OS X
D7 Enterprise, XCode, Eclipse, Ruby On Rails
|
Verfasst: Fr 16.12.05 17:24
Beschreib mal dein Problem genau - wo kommt dieser 42 Bit Wert her und wo soll er hin? Hat er ein festes Format? Irgendwelche Redundanz drin, Prüfbits oder so, die man weglassen könnte? Warum bist du bei der Weitergabe auf einen 32 Bit Wert beschränkte?
Stefan
_________________ Ein Computer ohne Windows ist wie eine Schokoladentorte ohne Senf.
|
|
delphisual 
      
Beiträge: 89
WIN 2000
D5 Prof
|
Verfasst: Fr 16.12.05 17:47
Ich programmiere eine Visualisierung für eine Anlage. Die Anlage stellt ein Hochregallager mit insgesamt 42 Fächern auf die man nicht verzichten kann dar. Die Visualisierung läuft zwar synchron zu der Anlage muss sich aber ab und zu mit dem Bestand der Datenbanken abgleichen. Die Kommunikation zwischen der Anlage, Datenbank und der Visualisierung ist über OPC-Server realisiert, der wird wiederum von WinCC zur Verfügung gestellt.
1. Ich muss den Bestand der Datenbanken an WinCC weitergeben
2. WinCC übergibt den Bestand an die Visualisierung
3. Visualisierung verarbeiten den übergebenen Wert und stellt den Bestand visuell dar
WinCC bietet mir leider keine 64-bit an, daher auch meine suche nach Alternativen.
;(
_________________ (Wer ein Problem definiert, hat es schon halb gelöst.)
|
|
Stefan.Buchholtz
      
Beiträge: 612
WIN 2000, WIN XP, Mac OS X
D7 Enterprise, XCode, Eclipse, Ruby On Rails
|
Verfasst: Fr 16.12.05 18:24
Kannst du den 42 Bit-Wert dann nicht einfach zerlegen und zwei 32 Bit-Werte übergeben?
Ausgehend von einem Int64, in dem deine 42 Bits sind, würde das so gehen:
Delphi-Quelltext 1: 2: 3: 4: 5: 6:
| var highDWord : Cardinal; lowDWord : Cardinal;
lowDWord := Cardinal(wert42 and $00000000FFFFFFFF); highDWord := Cardinal((wert42 and $000003FF00000000) shr 32); |
Dann werden in lowDWord die unteren Bits 0-31 von wert42 gespeichert und und highDWord die Bits 32-41. Die oberen 22 Bits des Int64 sind ja unbenutzt, deswegen habe ich sie ausgeblendet.
Zusammensetzen kannst du es dann wieder so:
Delphi-Quelltext 1:
| wert42 := lowDWord + (Int64(highDWord) shl 32); |
Stefan
_________________ Ein Computer ohne Windows ist wie eine Schokoladentorte ohne Senf.
|
|
delphisual 
      
Beiträge: 89
WIN 2000
D5 Prof
|
Verfasst: Fr 16.12.05 22:47
Danke Stefan für deine rasche Hilfestellung, es sieht schon sehr viel versprechend aus.
Ich sehe momentan auch keine andere Möglichkeit als das in mehreren Stücken weiter zu geben.
Danke!
_________________ (Wer ein Problem definiert, hat es schon halb gelöst.)
|
|
Allesquarks
      
Beiträge: 510
Win XP Prof
Delphi 7 E
|
Verfasst: So 18.12.05 19:32
Es wird leider überhaupt nicht klar wie der Abgleich funktioniert etc. Insofern ist eine Hilfestellung fast unmöglich. Einfach mal spekulierend:
Ist dir schon einmal der Gedanke gekommen die Fächer einfach zu numerieren (<8Bit) Was in dem Fach ist wird ja wohl getrennt übertragen werden. Also einmal übertragung für die Addresse des Faches also ein Byte und anschließend der Inhalt!
|
|