1.2. Hi5 로봇 제어기 Modbus 기능
1.2. Hi5 로봇 제어기 Modbus 기능
Hi5 로봇 제어기는 Modbus의 슬레이브 기능만을 지원합니다.
(1) MODBUS 전송모드
n ASCII 모드
n RTU(binary) 모드
(2) 지원하는 function
n 01: read coils (bits)
n 02: read discrete inputs (bits)
n 03: read holding registers (multiple)
n 04: read input registers (multiple)
n 05: write single coil (bit)
n 06: write single holding register
n 15: write coils (multiple bits)
n 16: write holding registers (multiple)
(3) 슬레이브 주소 설정
n 슬레이브 주소: 1~247
n 명령어의 슬레이브 주소가 0인 경우, 설정된 주소와 무관하게 모든 슬레이브가 동작하는 Broadcasting 기능을 지원합니다.
(4) 통신매체
n CNSIO: RS232/RS422/RS485 선택사용 → 1:1(RS232/RS422), 1:N(RS485)
① RS232C의 pin배열: 2번(TxD), 3(RxD), 5(GND) → PC와 direct cable사용
② RS422/RS485의 pin배열: 1(Tx), 6(/Tx), 4(Rx), 9(/Rx)
n OPSIO: RS232/RS422/RS485 선택사용 → 1:1(RS232/RS422), 1:N(RS485)
RS232C의 pin배열: 3번(TxD), 2(RxD), 5(GND) → PC와 cross cable사용
RS422/RS485의 pin배열: 1(Tx), 6(/Tx), 4(Rx), 9(/Rx)
(5) 사용조건
n MODBUS기능으로 내장 PLC의 Relay들을 사용하기 위해서는 내장 PLC가 Run 상태이어야 합니다. (참고, Hi5의 PLC 유효는 TP에서 설정합니다)
n PLC의 동작모드 설정은 다음 그림과 같이 TP에서 『[F7]: 조건설정』 → 『[F1]: 응용조건』에서 설정합니다.
n 만일 내장 PLC가 무효이면, 내장 PLC의 Relay에 write하는 것을 지원하지 않습니다. 그러나 이 경우에도 모든 레지스터나 코일을 읽을 수는 있습니다.
(6) MODBUS 가상 운용 예
n 조작반 기능:
Serial MODBUS를 지원하는 저렴한 GP(Graphic Panel)로 한대 혹은 여러 대의 로봇을RS232/RS422/RS485로 연결하여 사용할 수 있습니다.
n PLC 통신:
MODBUD Master 기능을 갖는 PLC들과의 통신을 저렴한 solution으로 제공합니다.
n PC 로봇운영 시스템:
PC의 serial port를 이용하여 로봇의 입출력신호를 모니터링 하거나 제어하는 로봇운영시스템을 구축할 수 있습니다.
(7) Hi5 릴레이 매핑
Modbus Data Model |
| Relay mapping: Refer to Hi5 relay configuration & IO data flow | Function | |
| 1bit | |||
Relay name | Register | Logical Add. | ||
Input Discrete Add: 0x0000~0xffff Quantity: 1~2039(bit)
Input Registers Add: 0x0000~0xffff Quantity: 1~127 | External Input | X1~8192 | 0x0001~0x2000 | Read Function 02: read discrete Inputs (bits) 04: read input registers (multiple) |
PLC Input | DO1~4096 | 0x2001~0x3000 | ||
Fieldbus In #1 | FB1.X1~960 | 0x3001~0x33C0 | ||
~~Fieldbus In #2~~ | ~~FB2.X1~960~~ | ~~0x3401~0x37C0~~ | ||
Fieldbus In #3 | FB3.X1~960 | 0x3801~0x3BC0 | ||
~~Fieldbus In #4~~ | ~~FB4.X1~960~~ | 0x3C01~0x3FC0 | ||
CC-Link In | FB5.X1~256 | 0x4001~0x4100 | ||
Fieldbus Node In | FN1~64.X1~128 | 0x5001~0x8F80 | ||
Timer | T1~256 | 0xF001~0xF100 | ||
Counter | C1~256 | 0xF201~0xF300 | ||
Analog In |
|
| 1000배율 Data(ex, 6250→6.250) | |
Coils Add: 0x0000~0xffff Quantity: 1~2039(bit)
Holding Registers Add: 0x0000~0xffff Quantity: 1~127 | External Out | Y1~8192 | 0x0001~0x2000 | Read Function 01: read coils (bits) 03: read holding registers (multiple)
Write Function 05: write single coil (bit) 15: write coils (multiple bits) 06: write single holding register 16: write holding registers (multiple)
AO: 1000배율 Data(Range: ±12.000) System Memory는 reserved임 |
PLC Out | DI1~4096 | 0x2001~0x3000 | ||
Fieldbus Out #1 | FB1.Y1~960 | 0x3001~0x33C0 | ||
~~Fieldbus Out #2~~ | ~~FB2.Y1~960~~ | ~~0x3401~0x37C0~~ | ||
Fieldbus Out #3 | FB3.Y1~960 | 0x3801~0x3BC0 | ||
~~Fieldbus Out #4~~ | ~~FB4.Y1~960~~ | ~~0x3C01~0x3FC0~~ | ||
CC-Link Out | FB5.Y1~256 | 0x4001~0x4100 | ||
Fieldbus Node Out | FN1~64.Y1~128 | 0x5001~0x8F80 | ||
Special | SP1~128 | 0x9101~0x9180 | ||
Auxiliary | R1~1024 | 0x9201~0x9600 | ||
Keep | K1~1024 | 0x9801~0x9C00 | ||
Timer |
|
| ||
Counter |
|
| ||
Analog Out |
|
| ||
System Memory | SW1~512.1~16 | 0xA001~0xC000 | ||
Shared Registers | Data Memory | MW1~1000.1~16 | 0xC001~0xFE80 | |
HRBASIC | V% variable |
|
| |
RN Register |
|
| Data range: 0~255 | |
V$ variable |
|
| 36 bytes/V$ → 40 x 36/2 = 720 | |
| V! variable |
|
| IEEE single-precision 32bit float point |
Modbus Data Model |
| Relay mapping: Refer to Hi5 relay configuration & IO data flow | Function | ||||
| Register Prefix Name |
| |||||
Relay name | 8bit | 16bit | 32bit | Float(32bit) | Logical Add. | ||
Input Discrete Add: 0x0000~0xffff Quantity: 1~2039(bit)
Input Registers Add: 0x0000~0xffff Quantity: 1~127 | External Input | XB1~1024 | XW1~512 | XL1~256 | XF1~256 | 0x0001~0x0200 | Read Function 02: read discrete Inputs (bits) 04: read input registers (multiple) |
PLC Input | DOB1~512 | DOW1~256 | DOL1~128 | DOF1~128 | 0x2001~0x2100 | ||
Fieldbus In #1 | FB1.XB1~120 | FB1.XW1~60 | FB1,XL1~30 | FB1.XF1~30 | 0x3001~0x303C | ||
~~Fieldbus In #2~~ | ~~FB2.XB1~120~~ | ~~FB2.XW1~60~~ | ~~FB2,XL1~30~~ | ~~FB2.XF1~30~~ | ~~0x3401~0x343C~~ | ||
Fieldbus In #3 | FB3.XB1~120 | FB3.XW1~60 | FB3,XL1~30 | FB3.XF1~30 | 0x3801~0x383C | ||
~~Fieldbus In #4~~ | ~~FB4.XB1~120~~ | ~~FB4.XW1~60~~ | ~~FB4,XL1~30~~ | ~~FB4.XF1~30~~ | ~~0x3C01~0x3C3C~~ | ||
CC-Link In | FB5.XB1~32 | FB5.XW1~16 | FB5,XL1~8 | FB5.XF1~8 | 0x4001~0x4010 | ||
Fieldbus Node In | FN1~64.XB1~16 | FN1~64.XW1~8 | FN1~64.XL1~4 | FN1~64.XF1~4 | 0x5001~0x8F08 | ||
Timer |
|
|
|
|
| ||
Counter |
|
|
|
|
| ||
Analog In |
| AI1~32 |
|
| 0x9A01~0x9A20 | 1000배율 Data(ex, 6250→6.250) | |
Coils Add: 0x0000~0xffff Quantity: 1~2039(bit)
Holding Registers Add: 0x0000~0xffff Quantity: 1~127 | External Out | YB1~1024 | YW1~512 | YL1~256 | YF1~256 | 0x0001~0x0200 | Read Function 01: read coils (bits) 03: read holding registers (multiple)
Write Function 05: write single coil (bit) 15: write coils (multiple bits) 06: write single holding register 16: write holding registers (multiple)
AO: 1000배율 Data(Range: ±12.000) System Memory는 reserved임 |
PLC Out | DIB1~512 | DIW1~256 | DIL1~128 | DIF1~128 | 0x2001~0x2100 | ||
Fieldbus Out #1 | FB1.YB1~120 | FB1.YW1~60 | FB1,YL1~30 | FB1.YF1~30 | 0x3001~0x303C | ||
~~Fieldbus Out #2~~ | ~~FB2.YB1~120~~ | ~~FB2.YW1~60~~ | ~~FB2,YL1~30~~ | ~~FB2.YF1~30~~ | ~~0x3401~0x343C~~ | ||
Fieldbus Out #3 | FB3.YB1~120 | FB3.YW1~60 | FB3,YL1~30 | FB3.YF1~30 | 0x3801~0x383C | ||
~~Fieldbus Out #4~~ | ~~FB4.YB1~120~~ | ~~FB4.YW1~60~~ | ~~FB4,YL1~30~~ | ~~FB4.YF1~30~~ | ~~0x3C01~0x3C3C~~ | ||
CC-Link Out | FB5.YB1~32 | FB5.YW1~16 | FB5,YL1~8 | FB5.YF1~8 | 0x4001~0x4010 | ||
Fieldbus Node Out | FN1~64.YB1~16 | FN1~64.YW1~8 | FN1~64.YL1~4 | FN1~64.YF1~4 | 0x5001~0x8F08 | ||
Special | SPB1~16 | SPW1~8 | SPL1~4 | SPF1~4 | 0x9001~0x9008 | ||
Auxiliary | RB1~128 | RW1~64 | RL1~32 | RF1~32 | 0x9101~0x9140 | ||
Keep | KB1~128 | KW1~64 | KL1~32 | KF1~32 | 0x9201~0x9240 | ||
Timer | TB1~1024 | TW1~512 | TL1~256 | TF1~256 | 0x9301~0x9500 | ||
Counter | CB1~1024 | CW1~512 | CL1~256 | CF1~256 | 0x9701~0x9900 | ||
Analog Out |
| AO1~32 |
|
| 0x9A01~0x9A20 | ||
System Memory | SB1~1024 | SW1~512 | SL1~256 | SF1~256 | 0xA001~0xA200 | ||
Shared Registers | Data Memory | MB1~2000 | MW1~1000 | ML1~500 | MF1~500 | 0xA401~0xA7E8 | |
HRBASIC | V% variable |
| V%[1~400] |
|
| 0xB001~0xB190 | |
RN Register |
| RN1~16 |
|
| 0xC001~0xC010 | Data range: 0~255 | |
V$ variable | V$[1~40] | 0xD001~0xD2D0 | 36 bytes/V$ → 40 x 36/2 = 720 | ||||
| V! variable |
|
|
| V![1~400] | 0xE001~0xE320 | IEEE single-precision 32bit float point |
n 상기 표의 기울임 꼴 큰 숫자는 Modbus에서 사용하는 relay 그룹임.
n Data형식: Float형식은 IEEE single-precision 32bit float point을 사용하고, 8bit/16bit/32bit 들은 전부 signed 정수를 사용함(RN Register는 제외), 8bit형식의 경우 GP에 따라 읽기만 가능할 수 있음
n Relay의 Endian은Little Endian을 사용함;
예, Float 형식인YF1=6.515625(0x40D08000)인 경우,
YL1=0x40D08000 →YW1=0x8000, YW2=0x40D0 → YB1=0x00, YB2=0x80, YB3=0xD0, YB4=0x40
참고) Modbus전송은16 bit align의 Big Endian임. 즉, 상기 전송은 0x80, 0x00, 0x40, 0xD0의 순서로 전송됨
n Hi4a대비 변경사항
32bit형식인 L(long)형과F(Float)형 추가, AI/AO개수 확장(4→32), SP/SPB/SPW/SPL/SPF개수확장(SPW: 2→8), SB/SW/SL/SF개수확장(SW: 256→512), MB/MW/ML/MF크기축소(MW: 5000→1000)
Timer(Tn)와Counter(Cn)의 bit수 확장(16bit→32bit); Cf) Tn(Cn)과 TLn(CLn)의 관계: TLn(CLn)의 값이 0이면Tn(Cn)=1(activation)이고, 0이 아니면0임.
DI/DO, X/Y relay 확장: DI/DO1~256 → 1~4096, X/Y1~256 →1~8192
Quantity확대: Bit=2000→2039, Reg=125→127
n Fieldbus Node In/Out: Address는 상위 byte는 Node번호(1~64:0x50~0x8F, offset: 0x50)를 지정하고, 하위 byte는 번지를 지정(bit: 1~128, word: 1~8)한다.
Ex,
FN1.X1~128: 0x5001~0x5080, FN2.X1~128: 0x5101~0x5180, FN3.X1~128: 0x5201~0x5280, FN4.X1~128: 0x5301~0x5380, ……, FN64.X1~128: 0x8F01~0x8F80
Ex,
FN1.XW1~8: 0x5001~0x5008, FN2.XW1~8: 0x5101~0x5108, FN3.XW1~8: 0x5201~0x5208, FN4.XW1~8: 0x5301~0x5308, ……, FN64.XW1~8: 0x8F01~0x8F08
(8) Hi5 제어기의 릴레이 구성
Hi5 제어기의 입출력 데이터 흐름
HRBasic에서 DI를 읽거나 DO에 값을 쓰는 것은 application layer이고 출력된DO를 읽는 것은 device layer입니다. 그 외 입출력 모니터링, Modbus, 그리고 PLC에서 읽고 쓰는 것은 전부 DI/DO의 device driver layer입니다. 따라서 둘 간에는 속성(논리/펄스/지연) 설정에 따라 차이가 있을 수 있습니다.