본문 바로가기

프로그래밍37

BCD 코드 이용한 날짜 시간 표기 이번 포스팅에서는 미쯔비시 장비 프로토콜 맵에서 제공하는 Data Format을 이용하여 날짜와 시간을 표기하는 방법에 대해 정리해보겠습니다. 먼저 Address Map을 살펴보면 아래와 같습니다.(Melpro_D 시리즈) Address 44001 ~ 44004번까지 상위 비트와 하위 비트의 값을 이용해서 아래와 같이 표기할 수 있습니다. 2021년 2월 10일 16시 37분 50초 => 20 21 02 10 16 37 50 00 44001번지 상위 비트 20, 하위 비트 21 44002번지 상위 비트 02, 하위 비트 10 44003번지 상위 비트 16, 하위 비트 37 44004번지 상위 비트 50, 하위 비트 00 Modbus 패킷으로 분석해 보겠습니다. 패킷의 구조는 아래와 같습니다. 실제 마스터.. 2021. 3. 25.
디컴파일러(역컴파일러) 이번 포스팅에서는 디컴파일러에 대해 알아보겠습니다. 컴파일러가 소스코드를 바이너리 결과물로 만드는 것이라면 디컴파일러는 바이너리 결과물로부터 소스코드를 복원하는 것을 말합니다. 즉 실행파일로부터 개발 소스코드를 추출해 낼 수 있습니다. 비록 개발자가 작성한 원본과 완벽하게 같은 것은 아니지만 역컴파일된 소스코드로 다시 컴파일을 할 수 있을 정도는 되기 때문에 EXE/DLL 상태의 어셈블리 파일을 분석하는데 매우 큰 도움을 받을 수 있습니다. 닷넷 디컴파일러로 가장 유명한 제품으로는 ".NET Reflector"가 있는데 유료로 전환되어 개인적으로 연구 및 학습을 위해 사용하기엔 부담이 아닐 수 없습니다. 여기서는 Telerik 사에서 개발한 무료 제품 "JustDecompile"을 설치하여 역컴파일 방법.. 2021. 1. 31.
[C#]네트워크 프로토콜 비트 연산 이번 포스팅에서는 네트워크 프로토콜에서 경보나 Fault 정보를 비트 연산을 통해 비트 별 알람 정보로 담아 송수신하는 방법에 대해 정리해 보겠습니다. 아래 이미지는 ESS 안전정보시스템에서 배터리와 관련하여 Warning과 Fault 정보에 대한 프로토콜 정의 일부입니다. Warning과 Fault의 데이터 Type은 INT형으로 비트연산을 통해 경보나 고장 발생 여부를 송수신하도록 요구하고 있습니다. 실제 LG Chem에서 제공하는 배터리 프로토콜에서 관련 정보를 찾아보면 아래와 같습니다. 실제 Warning과 Fault에 대한 부분은 uint16으로 각 비트별(b0~b15) 경보 및 고장 정보를 담을 수 있도록 제공해 주고 있습니다. 안전정보시스템에서 요구하는 Warning과 Fault 정보를 아래.. 2020. 12. 24.
[C#] ushort를 상위 바이트와 하위 바이트로 추출하기 이번 포스팅에서는 네트워크 통신 프로토콜에서 ushort를 상위 Byte와 하위 Byte로 나누어 값을 송수신할 경우 사용하는 방법에 대해 정리해 보도록 하겠습니다. 아래의 이미지는 LG Chem에서 생산한 Battery의 프로토콜 예시 입니다. Modbus address 40068 번지를 보면 uint16 Type으로 하나의 Value에서 상위 Byte와 하위 Byte로 나누어 Max Module Number와 Min Module Number의 값을 참조할 수 있도록 명기하고 있습니다. 따라서 우리는 Modbus에서 받은 uint16을 Byte 배열로 나누어서 상위 Byte와 하위 Byte를 추출해 Data를 사용해야 합니다. 이러한 경우에는 가장 손쉽게 BitConverter 클래스를 사용하는 방법이.. 2020. 12. 22.