Profibus DP を介して PLC と通信しているハードウェアがあり、「44 79 FF FF」である 16 進数で 4 バイトのデータを送信し、PLC プログラムでこの入力データの BYTE 配列を宣言しました。問題はPLCにあり、BYTE配列で受信したデータは「66 121 255 255」であり、これは16進数の10進値ですが、私の目標はその値をREALに変換することであり、そうすると私はそうではありません私が期待した値を取得します。
4bytesData
すべての BYTES を挿入する DWORD( ) を作成しました。したがって、4 バイトをバイトに挿入する前に4bytesData
: in1 = 68
, in2 = 121
, in3 = 255
&in4 = 255
4bytesData := (SHL(SHL(SHL(BYTE_TO_DWORD(in1), 8) OR BYTE_TO_DWORD(in2), 8) OR BYTE_TO_DWORD(in3), 8) OR in4);
realValue := DWORD_TO_REAL(4bytesData);
in1、in2、in3、in4 はバイト 0 ~ 3 です。
私が得ている値は次のとおりです。4bytesData
= 1148846079 & realValue
= 1.148846e+009
私が期待している値realValue
は = 9.9999993896484375E2 です
この Web サイト ( IEEE754 アナライザー/コンバーター) を使用して 16 進数値 (4479FFFF) を変換すると、必要な値が得られます。10 進数値 (1148846079) を挿入すると、 PLC。
私の問題を理解していただければ幸いです。よろしくお願いします。