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 | 설명 | 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비트 전송 |
모드버스 RTU 마스터 모드를 시작합니다.
Modbusmaster channel, timeout
Opencom 0, 115200, PROTO_8N1 Modbusmaster 0, 100
위 예제는 응답이 100ms 안에 오지 않으면 에러로 처리합니다.
데이터를 읽어옵니다.
Modbusread channel, slaveId, funcCode, address, count, buf()
Dim Buf(10) As Integer Modbusread 0, 1, 3, 0, 10, Buf()
데이터를 전송합니다.
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()
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