PLC 측에서 PC로 1워드로 전송되는 데이타의 음수/ 양수 구분은 다음과 같이 구분됩니다.
HEX 값 : 0 ∼ 7FFF => 양수 ( 십진수 : 0 ∼ 32767 )
HEX 값 : 8000 ∼ FFFF => 음수 ( 십진수 : 32768 ∼ 65535 )
=> PLC Mointoring DATA ( -32768 ∼ -1 )
PLC측의 데이타를 PC에 표시하기 위해서는
1) 전송되어진 데이타 ( EX) D1 => 16진수) 를 십진수로 전환 하시고
2) 십진수로 전환된 데이타값이 32767을 넘는지 아니지를 비교하여
0 < 전송데이타의 십진수 <= 32767 : +
327698 <= 전송데이타의 십진수 < 65535 : -
※ 각각의 기호는 별도의 변수에 저장할것
3) 0 < 전송데이타의 십진수 <= 32767 : + => 일 경우
전송데이타를 그대로 표시하시고
4) 327698 <= 전송데이타의 십진수 < 65535 : - => 일경우
표시할 데이타 = ( 65535 (FFFF) - 전송데이타의 십진수 ) + 1
=> 표시할데이타 앞에 "-" 를 붙인다. ( "-" + 표시할데이타 )
PLC 의 데이터 레지스터에 있는 16진수 값을 PC(VB6.0)로 가져와서
정수로 표현할려고 하는데요 근데 음수도 표현해야 합니다.
양수 음수 표현하기 위해 어떤 방법을 써야 하는지 궁금합니다.
예)
16진수의 데이터(2 바이트) 에 대해서 정수 표현을 할려고 합니다.
그냥 십진수 표현은 Cdec("H&" & 16진수 데이터) 하면 출력이 되는데
음수 표현은 예를 들어 FF9C 같은 16진수는 정수(음수)로 표현하면
-100이 되어야 합니다.
저 -100은 FFFF - FF9C 를 하면 양수 99가 나오는데 여기에 +1 을하고
(2의 보수와 동일 방법이라 생각이 들어서)
앞에 "-" 문자를 붙여 표시하고 있는데.
어디서 부터 음수 표현을 해야 할지르 모르겠습니다.
처음에는 FFFF 값이 65535 라 Int 형의 최대 값인 32767 이 넘으면
음수표현하니 정확한 음수 값이 안나와서 현재 16진수 데이터 중 젤 앞자리가 F 이면
"-" & FFFF - 16진수 데이터 + 1 이런식으로 처리하고 있습니다.
궁금한것은 16진수 데이터가 얼마부터 음수로 표현하면 되는지 알려주시면
감사하겠습니다.
LS산전 사이트를 방문해 주셔서 감사합니다.
문의하신 내용에 대한 답변입니다.
문의 주신 내용에 대해서 16진수 1워드의 데이터 계산을
위해서는 데이터 표시형식을 2가지로 할 수 있습니다.
먼저 Unsigned로 할 경우 데이터 표현이 0~65535로 표시가 됩니다.
이와는 반대로 signed로 할 경우에는 데이터 표현이 -32767~32768까지 표시가 됩니다.
그럼 32768이 넘어서게 되면 -부호로 표시가 되는데 16진수에서 32768이 넘어서게 되는
데이터의 경우 H8000을 넘어서게 되면 음수로 표시가 되게 됩니다.
그렇기 때문에 HEX코드에서 H7FFF까지가 양수가 되고 그 이상일 경우
음수로 표현됩니다.
확인하여 보시고 문의 사항이 있으시면 문의 주시기 바랍니다.
감사합니다. 좋은 하루 되십시오.
GetValue := PLC 워드 데이터;
if GetValue > 32767 then begin
GetValue := -(65537 - GetValue - 1) ;
end;
요래 함 되나?