C로 구현해본데 이어 이번엔 java로 구현해 보았다. 추가로 시리얼모드외에 TCP모드의 프로토콜 생성함수도 포함 ^^. [Java Souce] package hclass.solra; import hclass.util.HtypeCast; /** * MODBUS 통신 프로토콜 * 작정자명: HwangKyuseok(황규석) * 작성일자: 2013.06.011 ~ 06. 18 * 비 고: * 1. Modbus RTU (바이너리) 통신: CRC16 체크섬 생성, 주소생성모듈(시리얼용, TCP/IP용) * *2. 2013.06.18 완료: 현재 펑션코드 0x03 Read Multipe Registers * (워드 단위 입/출력포트 상태읽기) 의 주소 체계만 진행됨 * */ public class Modbus ex..
※ Modbus 통신중 시리얼통신 외에 TCP 소켓통신은 CRC 체크섬이 없는 대신 앞쪽 헤더가 더들어간다. ※ 아래 이미지는 모드버스 프로토콜의 TCP/IP용 로그를 캡쳐해서 보관했던 자료입니다. - 각 필드의 간단한 설명 - ○ Transaction identifier (드랙잭션 아이디) : 0x0000부터 매 명령마다 1씩 증가시킨다. 슬레이브(서버)로 동작 할 땐 마스터(클라이언트)가 설정 한 값에 맞게 응답 ○ Protocol identifier : 프로토콜 아이디를 나타내며 0x0000으로 고정 ○ Unit identifier : 유닛 아이디 ○ Lenght: LENGTH 이후부터 해당 프로토콜의 마지막까지의 길이를 나타낸다 (단위 Byte) page 1/3 page 2/3 page 3/3
모드버스 TCP socket 통신에서는 CRC 체크를 하지 않지만 시리얼통신 에서는 CRC 체크를 한다. 아리내느 Modbus CRC16 를 구하는 함수다.//------------------------------------------------------------------------------------ WORD __fastcall TfrmMain::CRC16 (const BYTE *nData, WORD wLength) { static const WORD wCRCTable[] = { 0X0000, 0XC0C1, 0XC181, 0X0140, 0XC301, 0X03C0, 0X0280, 0XC241, 0XC601, 0X06C0, 0X0780, 0XC741, 0X0500, 0XC5C1, 0XC481, 0X..
- Total
- Today
- Yesterday
- 한빛미디어
- CRC16
- 세월호
- 소설
- C#
- 책
- MenuBar
- 쓰레드
- 김정환
- XML
- 티스토리 초대장
- 자바
- java
- SQLite
- 안드로이드
- 특별법
- rJava
- 서블릿
- Modbus
- R
- flex
- Post
- 모드버스
- C++Builder
- 동적할당
- 통계
- Servlet
- 플렉스
- MySQL
- 독서
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |