목차

Modbus RTU Master

CUBLOC2의 Modbus RTU Master는 Block 방식으로 동작합니다.

파라미터 규칙

항목 설명
channel 0 또는 1
slaveId 1..247
address 0-base 주소 사용
timeout ms 단위
buf() Integer 배열 사용
Register 데이터 하위 16비트 사용

address는 0-base 기준입니다.

예:

즉 주소는 0부터 시작합니다.

주의:

지원 Function Code

Function Code 설명 count 의미 buf 규칙
FC1 Read Coils 읽을 Coil 개수 (1..2000) buf(i)에 0 또는 1 저장
FC3 Read Holding Registers 읽을 Register 개수 (1..125) buf(i)에 Register 값 저장
FC5 Write Single Coil 항상 1 0=OFF, 그 외=ON
FC6 Write Single Register 항상 1 buf(0)의 하위 16비트 전송
FC15 Write Multiple Coils 쓸 Coil 개수 (1..1968) 0=OFF, 그 외=ON
FC16 Write Multiple Registers 쓸 Register 개수 (1..123) 각 buf(i)의 하위 16비트 전송

초기화

Modbusmaster

모드버스 RTU 마스터 모드를 시작합니다.

Modbusmaster channel, timeout

Opencom 0, 115200, PROTO_8N1
Modbusmaster 0, 100

위 예제는 응답이 100ms 안에 오지 않으면 에러로 처리합니다.

데이터 읽기

Modbusread

데이터를 읽어옵니다.

Modbusread channel, slaveId, funcCode, address, count, buf()

Dim Buf(10) As Integer
Modbusread 0, 1, 3, 0, 10, Buf()

데이터 쓰기

Modbuswrite

데이터를 전송합니다.

Modbuswrite channel, slaveId, funcCode, address, count, buf()

Dim Buf(10) As Integer
Buf(0) = 123
Buf(1) = 456
Modbuswrite 0, 1, 16, 0, 2, Buf()

4. 에러 확인

Modbuserror

variable = Modbuserror()

마지막 실행된 Modbus 명령의 결과를 반환합니다.

설명
0 성공
1 잘못된 채널
2 파라미터 오류
3 Master 미시작 또는 통신 미준비
4 예약 코드 (향후 확장용)
5 타임아웃
6 송신 실패
7 응답 형식 오류 또는 에코 불일치
8 CRC 오류
0x100 + 예외코드 슬레이브 예외 응답
Dim Err As Integer
 
Modbusread 0, 1, 3, 0, 10, Buf()
 
Err = Modbuserror()
 
If Err = 0 Then
    Debug "Read OK", Cr
Else
    Debug "Error = ", Dec Err, Cr
End If

사용 예제

← CUBLOC2 목차로 돌아가기