기본 콘텐츠로 건너뛰기

9월, 2017의 게시물 표시

PLC - PLC Data Read/Write

Mitsubishi PLC Data Read/Write 1, MX Component(이하 MX) 이용  2, MELSEC Communication Protocol(이하 MCP) 이용  1번 MX Component를 이용하는 방법은 ActiveX 컴포넌트 활용하는 방법으로 프로그래밍이 매우 간단합니다.  제공 함수를 이용하여 간단히 Read, Write가 가능합니다.  2번 MC프로토콜을 이용하는 방법은  SocketClient를 이용하여 접속한 후  읽기 전문, 쓰기 함수를 직접 만들어 사용

C++ - Padding (10진수를 2진수로 변경 후 자릿수 맞춰 '0' 삽입 : 예제는 16자리)

AnsiString Cell_Data_To_Bin(int cell_data) { AnsiString result = ""; while(cell_data != 0) { result = (cell_data % 2 == 0 ? "0" : "1") + result; cell_data = cell_data / 2; }     int n_zero = 16 - result.Length(); if(result.Length() > 0) result = StringOfChar('0', n_zero) + result; return result; }

C++ - PLC 에서 음수 표현

- 16비트 모두 1일 경우 (1111111111111111 => -1) - 2 ^ 16 = 0 - 2 ^ 16 - a = -a - 2 ^ 16 - 1 = -1 (즉 1111111111111111) void __fastcall TComm_PLC::SetDouble(unsigned char (*data)[2], int column, double value) { int temp = value; if(temp < 0){         temp = temp * -1; data[column][1] = 255 - temp / 256; data[column][0] = 256 - temp % 256; }else{ data[column][1] = temp / 256; data[column][0] = temp % 256; } }

C++ - 부호비트와 시프트 연산

2. 부호비트와 시프트 연산     수치 데이터를 저장하는 데이터 타입에는 부호가 있는 데이터와 부호가 없는 데이터가 있습니다.      부호가 없는 데이터 값을 시프트 연산하는 것과 달리 부호가 있는 데이터 값을 시프트 연산할 때에는     부호비트에 따라 연산 과정이 조금 달라집니다.      2.1 부호비트와 왼쪽 시프트 연산(Left - Shift)         왼쪽으로 시프트 연산을 수행하는 경우 값은 2배씩 증가하게 됩니다. 이때 아래의 그림과 같이         최상위 비트와 그 다음 비트가 서로 다른 값인 경우 오버플로우(Overflow)가 발생합니다.                  위의 그림이 왼쪽 시프트 연산을 하기 전 값은 79 이지만 "79 << 1" 을 연산한 결과는 "10011110" 이         되며 10진수로 변환한 결과 값은 -98이 됩니다. 최상위 비트가 부호비트가 아니라면 연산 결과는         79 의 2 배인 158 이지만 최상위비트가  변경되어 오버플로우가 발생하였기 때문에 부호가 바뀌고         결과 값이 원하는 값과 다르게 나온 것입니다.       ...

C++ - 시프트 연산자

데이터 << 이동할 비트 수  (왼쪽으로 이동)    ==>  데이터 * (2 ^ 이동할 비트 수) 데이터 >> 이동할 비트 수  (오른쪽으로 이동)  ==>  데이터 / (2 ^ 이동할 비트 수) 1. 시프트 연산자란?     시프트 연산자는 데이터를 비트 단위로 이동시켜 값을 증감시키는 연산자입니다. 비트는 2진수의     형태를 가지고 있기때문에 비트를 이동시키는 방향에 따라서 값이 2배씩 증가 혹은 감소하게됩니다.     그래서 2의 제곱으로 값을 변경시키는 경우에 유용하게 사용할 수 있습니다.     프로그램에서 시프트 연산자는 "<<" 혹은 ">>" 키워드를 사용하여 아래와 같은 형식으로 표현합니다.      데이터 << 이동할 비트 수     데이터 >> 이동할 비트 수     "<<" 키워드는 데이터를 왼쪽으로 비트 수만큼 이동시키기 때문에 2의 "이동할 비트수" 를 제곱한 값과     데이터가 곱해진 값이 결과 값으로 도출됩니다. 아래의 코드는 값을 왼쪽으로 시프트 시키는 예입니다.     // int 형 변수에 5를 저장     int number = 5;     // 5를 왼쪽으로 3비트 이동하는 시프트 연산을 한다. 연산결과는 40 이다.     // 5 * (2^3) = 5 * 8 = 40     int result...