Profibus DP를 통해 PLC와 통신하는 하드웨어를 가지고 있는데, 이는 "44 79 FF FF"인 16 진수의 데이터 4 바이트를 보내고 내가 선언 한 PLC 프로그램에서 을 BYTE 이 입력 데이터의 배열. 문제는 PLC에서 내가받은 바이트 데이터 배열은 16 진수의 10 진수 값인 "66 121 255 255"이지만, 내 목표는 에 해당 값을 실제 값으로 변환하는 것이며, 내가 예상 한 가치를 얻지 못했습니다.PLC 구조화 된 텍스트로 10 진수를 실수 (실수)로 변환합니다. 내가 기대하는 가치를 얻지 못한다. (IEEE-754)
모든 BYTES를 삽입하는 DWORD (4bytesData
)를 만들었습니다. 내가 4bytesData
에 4 바이트를 삽입하기 전에 그래서 바이트는 다음과 같습니다 in1 = 68
, in2 = 121
,
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);
& in4 = 255
in3 = 255
경우 IN4 바이트 0-3 & IN3 IN1, IN2.
나는 값을 얻는다. 4bytesData
= 1,148,846,079 & realValue
= 1.148846e + 009
내가 realValue
에서 얻을 것으로 예상하고있어 값은 = 9.9999993896484375E2
나는이 웹 사이트 ( IEEE754 Analyzer/Converter)과 변환을 사용하는 경우 16 진수 값 (4479FFFF) 내가 원하는 값을 얻었습니다. 그리고 십진수 값 (1148846079)을 삽입하면 PLC에서받은 값과 동일한 값을 얻게됩니다.
내 문제를 이해하시기 바랍니다. Advance에서 많은 감사를드립니다.
in1 = 68 ... 생각합니다;) –
맞습니다! 나는 그것을 편집했다. 감사. – hijack