Autor Beitrag
delphisual
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 89

WIN 2000
D5 Prof
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 612

WIN 2000, WIN XP, Mac OS X
D7 Enterprise, XCode, Eclipse, Ruby On Rails
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 657


Delphi 3 Prof., Delphi 2005 PE
BeitragVerfasst: Fr 16.12.05 17:16 
hmm... in ne Dezimalzahl umwandeln oder so?!
Stefan.Buchholtz
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 612

WIN 2000, WIN XP, Mac OS X
D7 Enterprise, XCode, Eclipse, Ruby On Rails
BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 89

WIN 2000
D5 Prof
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 612

WIN 2000, WIN XP, Mac OS X
D7 Enterprise, XCode, Eclipse, Ruby On Rails
BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 89

WIN 2000
D5 Prof
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 612

WIN 2000, WIN XP, Mac OS X
D7 Enterprise, XCode, Eclipse, Ruby On Rails
BeitragVerfasst: 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:

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
var
  highDWord : Cardinal;
  lowDWord  : Cardinal;
{...}
  lowDWord  := Cardinal(wert42 and $00000000FFFFFFFF);
  highDWord := Cardinal((wert42 and $000003FF00000000shr 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:

ausblenden Delphi-Quelltext
1:
  wert42 := lowDWord + (Int64(highDWord) shl 32);					


Stefan

_________________
Ein Computer ohne Windows ist wie eine Schokoladentorte ohne Senf.
delphisual Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 89

WIN 2000
D5 Prof
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 510

Win XP Prof
Delphi 7 E
BeitragVerfasst: 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!