modbus 예제
홀딩 레지스터는 PLC 메모리와 같습니다. Modbus 프로토콜을 통해 읽고 쓸 수 있는 16비트 단어입니다. 입력 레지스터는 16비트 단어이기도 하지만 센서 판독값과 같이 읽기 전용입니다. ASCII는 정보 교환을 위한 미국 표준 코드를 의미합니다. 0에서 F까지 16개의 헥사데피문자 중 하나로 4비트를 결합하고 나타낼 수 있는 것과 같은 방식으로, 8비트(모든 바이트)마다 공통 키보드 문자를 포함하여 256개의 ASCII 문자 중 하나로 결합되고 표현될 수 있습니다. 예를 들어 ASCII 문자의 일부 값은… 이 함수는 C 언어를 사용하여 LRC BYTE를 계산하는 방법의 예입니다. BYTE LRC (BYTE *nData, WORD wLength) { BYTE nLRC = 0 ; // LRC 문자 초기화 (int i = 0; i < wLength; i++) nLRC += *nData++; 반환(BYTE)(-nLRC); }// End: LRC A Modbus 주소는 모든 데이터로 전송되는 16비트 서명되지 않은 정수입니다. 읽거나 써야 합니다.
주소는 Modbus 메시지에서 두 문자를 차지하며 가장 중요한 바이트가 먼저 전송됩니다(빅 엔디안). 다음은 장치(17)의 주소로 40108~40110으로 레지스터의 AI 값을 얻기 위한 Modbus RTU 요청의 예이다. Modbus RTU는 데이터를 바이너리로 인코딩하고 16비트 값에 대해 빅 엔디안 인코딩을 사용합니다. 즉, 16비트 단어의 가장 중요한 바이트가 먼저 전송됩니다. MBAP 헤더(Modbus 응용 프로그램 헤더)라는 새 7바이트 헤더가 메시지의 시작 부분에 추가됩니다. 이 헤더에는 다음 데이터가 있습니다: 메시지의 정확한 형식은 사용되는 Modbus 프로토콜의 변형에 따라 달라집니다: 경우에 따라 슬레이브가 마스터 요청을 처리하지 못할 수 있습니다. 이러한 경우 Modbus는 예외 응답 프레임을 정의합니다: Modbus 쓰기 다중 레지스터, 함수 코드 16, PLC에 1에서 123 레지스터 사이를 씁니다. Modbus ASCII는 Modbus RTU와 유사하게 작동하지만 텍스트 기반 데이터 인코딩을 사용합니다.
이렇게 하면 RTU에 비해 주요 이점인 사람이 읽을 수 있는 요청과 응답을 만들 수 있습니다. 반면에 메시지가 두 배 더 길어지기 때문에 효율성이 훨씬 낮습니다. 이 때문에 Modbus ASCII는 테스트용으로만 사용되며 프로덕션에서는 거의 사용되지 않습니다. 이 섹션에서는 Modbus 함수 코드를 살펴보고 각 코드에 대한 데이터 프레임 구성의 세부 사항을 설명합니다. 다음은 Modbus RTU 레지스터를 읽고 쓰는 코드가 있는 표입니다. MBAP는 Modbus 응용 프로그램 프로토콜을 의미합니다. MBAP 헤더 자체는 다음과 같은 구조를 가지고 있습니다: tM 시리즈는 M-7000 시리즈의 컴팩트한 버전입니다. 표준 DCON 및 Modbus RTU 프로토콜을 제외하고 Modbus ASCII 프로토콜을 사용할 수 있습니다. 모든 Modbus 메시지의 마지막 두 바이트는 CRC 바이트입니다.
이러한 프레임의 이전 바이트를 기반으로 계산 하 고 마스터와 슬 레이 브 모두 받은 된 메시지의 무결성을 확인 하려면 허용 합니다. 나중에 CRC 계산에 사용되는 알고리즘을 다룹니다. 트랜잭션 ID는 각 새 요청에 대해 마스터가 설정한 난수이며 응답에서 슬레이브에서 사용해야 합니다. 프로토콜 ID는 Modbus TCP에서 항상 0입니다. 길이는 단위 ID 및 나머지 데이터를 포함하여 다음 바이트 수입니다. 단위 ID는 Modbus TCP 지원을 지원하는 슬레이브 ID Modbus TCP 클라이언트와 유사한 장치 주소입니다. 모든 Modbus RTU 메시지(프레임)를 다운로드하여 두 개의 CRC 바이트를 끝에 넣습니다: 슬레이브 장치 17에서 코일 173 ON을 작성하라는 요청의 예는 다음과 같습니다: 기타 중요 문서:Modbus 응용 프로토콜: 전체 Modbus 프로토콜을 설명합니다. Velocio PLC는 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x0F, 0x10 및 0x17 명령을 지원합니다. FC03의 예는 레지스터 40108이 16 비트 1010 1110 0100 0001 Great로 변환하는 AE41을 포함하고 있음을 보여줍니다! 하지만 그것은 무엇을 의미 합니까? 글쎄, 그것은 몇 가지를 의미 할 수 있습니다. 이 함수는 C 언어를 사용하여 CRC 단어를 계산하는 방법의 예입니다. 예를 들어 AO 홀딩 레지스터의 첫 번째 레지스터에는 숫자 40001이 있지만 주소는 0000입니다.