[Chapter 14] 디바이스 드라이버
본문
14. 디바이스 드라이버
본 장에서는 eRun SCADA 에서 제공하는 디바이스 I/O 통신 드라이버의 종류와 설정 및 사용방법에 대하여 설명하겠습니다.
산업용 통신 드라이버에는 프로토콜이라는 통신규약에 따라서 디바이스 상호간 통신방식이 종류도 굉장히 다양합니다.
본 가이드에서는 주로 많이 사용하는 드라이버 중심으로 설명하도록 하겠습니다.
14.1 시리얼 통신이란?
시리얼은 또 다른 말로는 직렬(전송)이라고도 하며, 한번에 한가지 사건만이 일어나는 것을 의미합니다.
데이터비 트를 1개의 비트단위로 외부로 송수신하는 방식으로써 구현하기가 쉽고, 멀리갈 수가 있고,
기존의 통신선로(전화 선등)를 쉽게 활용할 수가 있어 비용의 절감이 크다는 장점이 있습니다.
직렬통신의 대표적인 것으로 모뎀, LAN, RS232 및 X.25등이 있습니다. 하지만 크게 직렬통신을 구분하면
비동기 식 방식과 동기식 방식 2가지로 나누어집니다. 많은 사람들이 비동기식 통신방식을 RS-232C로 알고있는데
실질 적으로 RS-232C라는 것은 비동기식 통신콘트롤러에서 나오는 디지털신호를 외부와 인터페이스 시키는 전기적인 신호 방식의 하나일 뿐이다.
그러나 일반적으로 RS-232C를 비동기식 통신방식으로 인식하고 있는 것도 큰무리는 없습니다.
비동기식 통신방식을 지원하는 대표적인 콘트롤러는 NS사의 16C450과 16C550이며
그 외 호환되는 콘트롤러가 다수의 회사에서 생산되지만 성능상의 차이는 없고 호환은 되지 않지만
비동기 통신의 기능을 갖는 콘트롤러는 수십가지의 종류가 있습니다.
비동기식 통신 콘트롤러를 일반적으로 UART(Universal Asynchronous Receiver/ TransmItter)라 부르는데,
UART에 서 나오는 신호는 보통 TTL신호레벨을 갖기 때문에 노이즈에 약하고 통신거리에 제약이 있습니다.
이러한 TTL신 호를 입력받아 노이즈에 강하고 멀리 갈 수 있게 해주는 인터페이스 IC를 LINE DRIVER/RECEIVER라 부르며
이중 대표적인 것이 RS-232C, RS-422 및 RS-485가 있습니다.
■ RS232, RS422, RS485 등의 Specification을 살펴보면 아래와 같습니다.
Specification |
RS232C |
RS422 |
RS485 |
동작 모드 | Single-Ended | Differential | Differential |
최대 Driver/Receiver 수 | 1 Driver 1 Receiver | 1 Driver 10 Receiver | 32 Driver 32 Receiver |
최대 통달거리 | 약 15 m | 약 1.2 km | 약 1.2 km |
최고 통신속도 | 20 Kb/s | 10 Mb/s | 10 Mb/s |
신호선 수 | 9 | 5 | 2/4 |
지원 전송방식 | Full Duplex | Full Duplex | Half Duplex |
최대 출력전압 | ±25V | -0.25V to +6V | -7V to +12V |
최대 입력전압 | ±15V | -7V to +7V | -7V to +12V |
장단점 | 저속통신 통달거리가 짧다. 가장 일반적 방식 | 통신속도가 빠름 통달거리가 길다. Multi-Drop 지원 | 통신속도가 빠름 통달거리가 길다. Multi-Drop 지원 |
적용 예 | 시리얼 마우스 모뎀 PC COM Port | 원거리 전광판 PLC 등 | CCTV PLC 등 |
■ RS232C 컨넥터 사양
■ 신호선에 대한 설명
PIN |
이름 |
설명 |
TxD | Transmit Data | 외부장치로 보낼 때 직렬통신 데이터가 나오는 신호선이다. |
RxD | Receive Data | 외부 장치에서 들어오는 직렬통신 데이터를 입력받는 신호선이다. |
RTS | Ready To Send | 컴퓨터와 같은 DTE장치가 모뎀 또는 프린터와 같은 DCE장치에게 데이터를 받을 준비가 됐음을 나타내는 신호선이다. |
CTS | Clear To Send | 모뎀 또는 프린터와 같은 DCE장치가 컴퓨터와 DTE장치에게 데이터를 받을 준비가 됐음을 나타내는 신호선이다. |
DTR | Data Terminal Ready | 컴퓨터 또는 터미널이 모뎀에게 자신이 송수신 가능한 상태임을 알리는 신호선이며 일반적으로 컴퓨터 등이 전원인가 후 통신 포트를 초기화한 후 이 신호를 출력시킨다. |
DSR | Data Set Ready | 모뎀이 컴퓨터 또는 터미널에게 자신이 송수신 가능한 상태임을 알려주는 신호선이며 일반적으로 모뎀에 전원인가 후 모뎀이 자신의 상태를 파악한 후 이상이 없을 때 이 신호를 출력시킨다. |
DCD | Data Carrier Detect | 모뎀이 상대편 모뎀과 전화선 등을 통해서 접속이 완료되었을 때 상대편 모뎀이 캐리어 신호를 보내오며 이 신호를 검출하였음을 컴퓨터 또는 터미널에 알려주는 신호선이다. |
RI | Ring Indicator | 상대편 모뎀이 통신을 하기위해서 먼저 전화를 걸어오면 전화 벨이 울리게 된다. 이때 이 신호를 모뎀이 인식하여 컴퓨터 또는 터미널에 알려주는 신호선이며 일반적으로 컴퓨터가 이 신호를 받게되면 전화벨 신호에 응답하는 프로그램을 인터럽터 등을 통해서 호출하게 된다. |
■ RS-232C 결선도(25-DSUB)
■ RS-232C 결선도(9-DSUB)
■ RS-422 컨넥터 사양
신호선에 할당된 핀번호는 제품 제조사에 따라 다를 수 있습니다. 일반적으로 사용되는 신호선은
TXD+, TXD-, RXD+ 및 RXD- 이고 나머지 신호선은 거의 사용되지 않습니다.
■ RS-422 결선도 (POINT to POINT 모드)
■ RS-422 결선도 (MULTI DROP 모드)
GND는 열결하지 않아도 됨.
극을 맞추어 Plus(+) 신호선은 Plus(+)신호선과, Minus(-) 신호선은 Minus(-)신호선과 연결함
■ RS-485 컨넥터 사양
RS-485 신호선도 RS-422과 마찬가지로 신호선에 할당된 핀번호는 제품 제조사에 따라 틀릴 수 있습니다.
일반적 으로 사용되는 신호선은 TXD+, TXD-, RXD+ 및 RXD- 이고 나머지 신호선은 거의 사용되지 않습니다.
■ RS-485 결선도
14.2 아스키(ASCII)코드 테이블
DEC |
HEX |
CHAR |
DEC |
HEX |
CHAR |
DEC |
HEX |
CHAR |
DEC |
HEX |
CHAR |
0 |
0x00 |
NUL |
32 |
0x20 |
SP |
64 |
0x40 |
@ |
96 |
0x60 |
` |
1 |
0x01 |
SOH |
33 |
0x21 |
! |
65 |
0x41 |
A |
97 |
0x61 |
a |
2 |
0x02 |
STX |
34 |
0x22 |
" |
66 |
0x42 |
B |
98 |
0x62 |
b |
3 |
0x03 |
ETX |
35 |
0x23 |
# |
67 |
0x43 |
C |
99 |
0x63 |
c |
4 |
0x04 |
EOT |
36 |
0x24 |
$ |
68 |
0x44 |
D |
100 |
0x64 |
d |
5 |
0x05 |
ENQ |
37 |
0x25 |
% |
69 |
0x45 |
E |
101 |
0x65 |
e |
6 |
0x06 |
ACK |
38 |
0x26 |
& |
70 |
0x46 |
F |
102 |
0x66 |
f |
7 |
0x07 |
BEL |
39 |
0x27 |
' |
71 |
0x47 |
G |
103 |
0x67 |
g |
8 |
0x08 |
BS |
40 |
0x28 |
( |
72 |
0x48 |
H |
104 |
0x68 |
h |
9 |
0x09 |
HT |
41 |
0x29 |
) |
73 |
0x49 |
I |
105 |
0x69 |
i |
10 |
0x0A |
LF |
42 |
0x2A |
* |
74 |
0x4A |
J |
106 |
0x6A |
j |
11 |
0x0B |
VT |
43 |
0x2B |
+ |
75 |
0x4B |
K |
107 |
0x6B |
k |
12 |
0x0C |
FF |
44 |
0x2C |
, |
76 |
0x4C |
L |
108 |
0x6C |
l |
13 |
0x0D |
CR |
45 |
0x2D |
- |
77 |
0x4D |
M |
109 |
0x6D |
m |
14 |
0x0E |
SO |
46 |
0x2E |
. |
78 |
0x4E |
N |
110 |
0x6E |
n |
15 |
0x0F |
SI |
47 |
0x2F |
/ |
79 |
0x4F |
O |
111 |
0x6F |
o |
16 |
0x10 |
DEL |
48 |
0x30 |
0 |
80 |
0x50 |
P |
112 |
0x70 |
p |
17 |
0x11 |
DC1 |
49 |
0x31 |
1 |
81 |
0x51 |
Q |
113 |
0x71 |
q |
18 |
0x12 |
DC2 |
50 |
0x32 |
2 |
82 |
0x52 |
R |
114 |
0x72 |
r |
19 | 0x13 | DC3 | 51 | 0x33 | 3 | 83 | 0x53 | S | 115 | 0x73 | s |
20 | 0x14 | DC4 | 52 | 0x34 | 4 | 84 | 0x54 | T | 116 | 0x74 | t |
21 | 0x15 | NAK | 53 | 0x35 | 5 | 85 | 0x55 | U | 117 | 0x75 | u |
22 | 0x16 | SYN | 54 | 0x36 | 6 | 86 | 0x56 | V | 118 | 0x76 | v |
23 | 0x17 | ETB | 55 | 0x37 | 7 | 87 | 0x57 | W | 119 | 0x77 | w |
24 | 0x18 | CAN | 56 | 0x38 | 8 | 88 | 0x58 | X | 120 | 0x78 | x |
25 | 0x19 | EM | 57 | 0x39 | 9 | 89 | 0x59 | Y | 121 | 0x79 | y |
26 | 0x1A | SUB | 58 | 0x3A | : | 90 | 0x5A | Z | 122 | 0x7A | z |
27 | 0x1B | ESC | 59 | 0x3B | ; | 91 | 0x5B | [ | 123 | 0x7B | { |
28 | 0x1C | FS | 60 | 0x3C | < | 92 | 0x5C | \ | 124 | 0x7C | | |
29 | 0x1D | GS | 61 | 0x3D | = | 93 | 0x5D | ] | 125 | 0x7D | } |
30 | 0x1E | RS | 62 | 0x3E | > | 94 | 0x5E | ^ | 126 | 0x7E | ~ |
31 | 0x1F | US | 63 | 0x3F | ? | 95 | 0x5F | _ | 127 | 0x7F | DEL |
14.3 MODBUS RTU/TCP
모드버스(modbus)는 1979년 모디콘(Modicon)이라는 회사에서 만든 시리얼 통신 프로토콜입니다.
프로토콜이 단 순하지만, 장비 제어와 모니터링에 필요한 기능들을 수행할 수 있기에 사실상의 표준 프로토콜로 현재까지 산업 용 전자 장치들을
서로 연결하는 목적으로 널리 사용됩니다.
네크워크 통신 환경의 발전에 따라서 시리얼 통신을 넘어서 TCP/IP 통신용 버전까지 확장되어 왔습니다.
eRun SCADA에서는 통합형 MODBUS 드라이버를 제공합니다.
● ACTIVE, PASSIVE 모드 지원
● RS-232/RS-485/TCP 통신가능
● RTU/TCP 모드 지원
● 큰 사이즈 데이터를 한번에 전송 가능 (스크립트)
● 로그기능
■ 통신포트 및 선택사항 설명
항목 |
설명 |
MODE | 두가지의 연결모드를 지원합니다. 디바이스로 연결을 할 것인지 아니면 디바이스가 eRun으로 연결할 것인지 결정합니다. ■ ACTIVE : 상대 디바이스에 PC에서 연결 시도합니다. (클라이언트 모드) ■ PASSIVE : 상대 디바이스가 PC로 연결 시도합니다. (서버 모드) |
미디어 | 통신장치에 따라 RS-232C / RS-485 / TCP 방식이 있습니다. |
통신 포트 | RS-232C, RS-485 방식일 경우 입력이 가능하며, RTU방식입니다. 포트이름/통신속도/데이터비트/패리티비트/스톱비트 설정합니다. |
TCP/IP | 미디어가 TCP/IP인 경우 입력이 가능하며 MODBUS-TCP방식으로 통신합니다. ACTIVE모드인 경우 TCP IP입력이 활성화 되며 상대 디바이스 연결주소를 입력합니다. |
KEEP ALIVE |
|
LOG KEEP | LOG COLLECT 옵션이 선택이 되어있어야 하며 통신로그 기록 파일의 보관 기간을 입력합니다. 기간이 지난 파일은 삭제합니다. 통신에 장애가 발생할 때 원인파악 분석을 위하여 남겨놓는 데이터 파일입니다. 일반적으로 3일 정도로 설정합니다. |
CHECK METHOD | 디바이스 제조사마다 MODBUS 통신 프로토콜 체크코드 계산방식을 변형해서 사용하기도 합니다. 그래서 여기서는 5가지 방식을 지원합니다.
표준 방식에서는 CRC-16 계산방식을 주로 사용합니다. |
LOG COLLECT | 통신 로그데이터를 파일에 기록할 것인지 선택합니다. 로그파일은 해당 프로젝트의 IOServerLog 폴더에 다음과 같은 파일명 규칙으로 텍스트파일 형태로 기록됩니다. "/Publish/프로젝트/Log/IOServerLog/DRV.MODBUS_2021_1_31.txt" |
MODBUS-TCP Mode | 모드버스 TCP 방식인 경우 선택합니다. MODBUS-RTU와 MODBUS-TCP의 프로토콜은 유사하지만 동일하지 않으므로 구반할 필요가 있습니다. TCP 방식은 BODY부분은 RTU와 동일하지만, CHECK-MOTHOD가 없고, 6바이트로 구성된 헤더데이터가 앞부분에 들어갑니다. |
Reset On Comm. Error | 디바이스로부터 통신요구에 대한 응답이 없을 경우 해당 프레임의 결과데이터를 모두 0으로 초기화 할 것인지 선택합니다. |
Add (Frame) | 통신 명령을 추가합니다. (이것을 프레임 추가한다고 합니다.) |
Insert (Frame) | 선택된 프레임을 뒤로 미루고 사이에 프레임을 삽입합니다. |
Delete (Frame) | 선택한 프레임을 리스트에서 삭제합니다. |
Load CSV | 다른 MODBUS 디바이스 통신프레임 설정파일을 불러옵니다. |
Save CSV | 통신 프레임 설정내용을 CSV포맷으로 저장합니다. |
Run Test | 설정된 내용으로 디바이스와 통신시험을 합니다. READ/WRITE 모두 가능합니다. |
Stop Test | 통신시험을 그만합니다. |
Send Test | 통신시험중에 디바이스로 특정 데이터를 출력하는 시험을 합니다. |
■ MODBUS 통신프레임 설명
항목 |
설명 |
Code | 프레임의 이름입니다. 실태그 추가할 때 어드레스로 사용됩니다. 어드레스의 선두번지를 이름으로 보통 사용합니다. |
Unit | MODBUS 통신은 254대의 디바이스를 하나의 네트워크에 연결이 가능하기 때문에 각 디바이스의 ID가 필요합니다. 그 ID번호를 입력합니다. |
Command | 모드버스 명령 레지스터를 선택합니다. 6가지의 명령이 있습니다. 자세한 설명은 뒤에 나오는 명령어 부분을 참고하시기 바랍니다.
|
Address | 시작 어드레스를 입력합니다. 모드버스 프로토콜을 사용하는 디바이스는 어드레스 리스트를 기본적으로 제공합니다. |
Read | 시작 어드레스부터 읽어들일 워드수를 입력합니다. |
Scan | 호출여부를 선택합니다. 0이면 스캔리스트에서 제외합니다. |
Timeout | PC에서 호출하고 응답이 돌아오는 시간을 설정합니다. |
Description | 프레임 내용을 설명합니다. |
■ Command 설명
항목 |
설명 |
ReadBits(1) | Read Coils (FC01) 디지털 출력포트 상태를 읽어옵니다. 포트 개수에 따라 바이트 단위로 추가되며 1바이트에 8개의 포트를 비트 단위로 나타냅니다. 시작 주소에 해당되는 포트부터 LSB에서 MSB방향으로 표시되고 비트 값 0은 OFF를 1은 ON을 의미하며 요청되지 않았거나 제품에 없는 포트에 해당되는 비트의 값은 0으로 채워집니다. |
ReadBits(2) | Read Discrete Inputs (FC02) 디지털 입력포트 상태를 나타냅니다. 포트 개수에 따라 바이트 단위로 추가되며 1바이트에 8개의 포트를 비트 단위로 나타냅니다. 시작 주소에 해당되는 포트부터 LSB에서 MSB방향으로 표시되고 비트값 0은 OFF를 1은 ON을 의미하며 요청되지 않았거나 제품에 없는 포트에 해당되는 비트의 값은 0으로 채워집니다. |
ReadWords(3) | Read Holding Registers (FC03) 디지털/아날로그 포트의 상태를 나타냅니다. 디지털 포트는 레지스터 하나에 16개의 포트를 비트 단위로 나타냅니다. 시작 주소에 해당되는 포트부터 LSB에서 MSB방향으로 표시되고 비트값 0은 OFF를 1은 ON을 의미하며 제품에 없는 포트에 해당되는 비트는 0으로 채워집니다. |
ReadWords(4) | Read Input Register (FC04) 디지털/아날로그 포트의 상태를 나타냅니다. 디지털 포트는 레지스터 하나에 16개의 포트를 비트 단위로 나타냅니다. 시작 주소에 해당되는 포트부터 LSB에서 MSB방향으로 표시되고 비트값 0은 OFF를 1은 ON을 의미하며 제품에 없는 포트에 해당되는 비트는 0으로 채워집니다. |
WriteBit(5) | Write Single Coil (FC05) 하나의 디지털 출력 포트 ON/OFF 제어에 사용됩니다. |
WriteWord(6) | Write Single Register (FC06) 출력포트 제어에 이용할 값이며 레지스터 하낭에 16개의 출력포트를 비트단위로 나타냅니다. 레지스터 주소에 해당되는 포트부터 LSB에서 MSB방향으로 적용되고 비트 값 0은 OFF를 1은 ON을 의미하며 출력포트 개수를 넘거나 제품에 없는 포트에 해당되는 비트의 값은 무시됩니다. |
■ MODBUS RTU 패킷구조
MODBUS-TCP 구조와는 다르게 CRC-16 체크코드가 추가되고 8바이트 길이 구조입니다.
1) DEVICE 요구포맷
2) DEVICE 응답포맷
■ MODBUS TCP 패킷구조
RTU와 다르게 6바이트의 헤더패킷이 추가되고, CRC 체크코드 2바이트가 생략됩니다.
1) DEVICE 요구포맷
2) DEVICE 응답포맷
■ MODBUS 드라이버 사용 예
1) 1번 프레임 추가
위와 같이 추가한 프레임에 대한 설명입니다.
항목 |
설명 |
비고 |
Code | 문자열 형식으로 태그에서 참조하는 어드레스 | 보통 Address와 동일한 이름을 주면 인식이 편합니다. |
Unit | 상대 디바이스의 국번 | 디바이스의 설정에 따름 |
Command | 통신명령 또는 방향 | 읽기/쓰기 명령 |
Address | 디바이스 어드레스 | 모드버스를 지원하는 디바이스 매뉴얼 참조 |
Read | 읽을 워드 개수 | 1 = 1*2바이트 -> 2바이트 5 = 5*2바이트 -> 10바이트 |
2) 통신 결과 (로그파일 참조)
5개의 WORD값을 요구했고, 수신된 데이터는 아래와 같이 5개 워드(10바이트)가 됩니다.
[40100] Tx :(1) 01, 04, 00, 64, 00, 05, 71, D6,
[40100] Rx :(1) 01 04 0A 00 0A 00 0B 00 0C 00 0D 00 0E
3) 태그생성 및 디바이스 어드레스 설정
4) 뷰페이지 문자열 오브젝트 추가
5) 실행 화면
6) 태그 모니터링 화면
■ 스크립트 함수호출로 다수개의 데이터 송출
연속적으로 보내야 하는 자료를 한번에 보낼 때 사용합니다. 다량의 데이터를 태그를 통해서 보내면
전체적인 통신에 영향을 주게 됩니다. 그래서 여러 번에 걸쳐서 내보내는 것을
한번에 내보낼 수 있는 방법이 스크립트 함수 를 통해서 할 수 있습니다. 모드버스 드라이버는 이함수를 지원합니다.
_DeviceWriteString(“디바이스명”, “프레임명”, string);
문자열(string)을 태그통하지 않고 디바이스로 직접 내보낸다. 최대 글자수는 4000바이트.
_DeviceWriteBytes(“device name", "frame code", offset, bytes_data[], bytesSize);
바이트 데이터를 디바이스로 직접 내보낸다. 4000바이트 이내.
_DeviceWriteBytes(“device name", "frame code", offset, word_data[], bytesSize);
워드 데이터를 디바이스로 직접 내보낸다. 4000바이트 이내.
14.4 MELSEC-Q Ethernet
MITSUBISHI PLC의 Q 대응 MELSEC Ethernet 모듈 인터페이스 통신 드라이버입니다
● ACTIVE 모드동작
● MC-PROTOCOL TCP 통신전용
● 큰 사이즈 데이터를 한번에 전송 가능 (스크립트)
● 로그기능
■ 통신포트 및 선택사항 설명
항목 |
설명 |
TCP/IP | PLC 네트워크에 설정된 IP주소를 입력합니다. |
PORT | PLC 네트워크에 설정된 TCP 포트번호를 입력합니다. |
LOG KEEP | LOG COLLECT 옵션이 선택이 되어있어야 하며 통신로그 기록 파일의 보관기간을 입력합니다. 기간이 지난 파일은 삭제합니다. 통신에 장애가 발생할 때 원인파악 분석을 위하여 남겨놓는 데이터 파일입니다. 일반적으로 3일정도로 설정합니다. |
LOG COLLECT | 통신 로그데이터를 파일에 기록할 것인지 선택합니다. 로그파일은 해당 프로젝트의 IOServerLog 폴더에 다음과 같은 파일명 규칙으로 텍스트파일 형태로 기록된다. "/Publish/프로젝트/Log/IOServerLog/DRV.MS001_2021_1_31.txt" |
ADD (Frame) | 통신 명령을 추가합니다. (이것을 프레임 추가한다고 말합니다.) |
Insert (Frame) | 선택된 프레임을 뒤로 미루고 사이에 프레임을 삽입합니다. |
Delete (Frame) | 선택한 프레임을 리스트에서 삭제합니다. |
Run Test | 설정된 내용으로 디바이스와 통신시험을 합니다. READ / WRITE 모두 가능합니다 |
Stop Test | 통신시험을 그만합니다. |
Send Test | 통신시험중에 디바이스로 특정 데이터를 출력하는 시험을 합니다. |
■ 통신프레임 설명
항목 |
설명 |
Code | 프레임의 이름입니다. 실태그 추가할 때 어드레스로 사용됩니다. 어드레스의 선두번지를 이름으로 보통 사용합니다. |
Unit | PLC 국번을 설정해줍니다. PLC국번은 MELSEC Config에서 설정된 국번을 입력해주어야 합니다. |
Device | MELSEC PLC에서 지원하는 디바이스명 어드레스를 붙여서 설정해줍니다. 사용하는 레지스터는 X, Y, B, W, D, M, L, SB, SW, ZR 등 입니다. |
Count | 시작 어드레스부터 읽어들일 워드수를 입력합니다. |
Scan | 호출여부를 선택합니다. |
Description | 프레임 내용을 설명합니다. |
■ [RunTest] 통신상태
[로그파일 내용]
[17:49:49.683] TO : 500000FF03FF000018000A04010000ZR0000000032
[17:49:49.692] FROM:
000065747473732072746E690067676E72666565000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000
[17:49:49.732] TO : 500000FF03FF000018000A04010000D*0090000064
[17:49:49.741] FROM:
0000022003300440055003E8004162616463666568676A696B696D6C6F6E717073747574777674782C7A323134 3336353837303900000000000000000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000
■ 스크립트 함수호출로 다수개의 데이터 송출
연속적으로 보내야 하는 자료를 한번에 보낼 때 사용합니다. 다량의 데이터를 태그를 통해서 보내면
전체적인 통신에 영향을 주게 됩니다. 그래서 여러 번에 걸쳐서 내보내는 것을 한번에 내보낼 수 있는 방법이
스크립트 함수를 통해서 할 수 있습니다. MELSECQEtn 드라이버는 이 함수를 지원합니다.
_DeviceWriteString(“디바이스명”, “프레임명”, string);
문자열(string)을 태그통하지 않고 디바이스로 직접 내보낸다. 최대 글자수는 4000바이트.
_DeviceWriteBytes(“device name", "frame code", offset, bytes_data[], bytesSize);
바이트 데이터를 디바이스로 직접 내보낸다. 4000바이트 이내.
_DeviceWriteBytes(“device name", "frame code", offset, word_data[], bytesSize);
워드 데이터를 디바이스로 직접 내보낸다. 4000바이트 이내.
14.5 XGTFEnet
LS XGT PLC Ethernet 모듈 인터페이스 통신 드라이버입니다.
● ACTIVE 모드동작
● LS XGK, XGI TCP 통신전용
● 큰 사이즈 데이터를 한번에 전송 가능 (스크립트)
● 로그 기능
■ 통신포트 및 선택사항 설명
항목 |
설명 |
TCP/IP | PLC 네트워크에 설정된 IP주소를 입력합니다. |
PORT | PLC 네트워크에 설정된 TCP 포트번호를 입력합니다. |
LOG KEEP | LOG COLLECT 옵션이 선택이 되어있어야 하며 통신로그 기록 파일의 보관기간을 입력합니다. 기간이 지난 파일은 삭제합니다. 통신에 장애가 발생할 때 원인파악 분석을 위하여 남겨놓는 데이터 파일입니다. 일반적으로 3일정도로 설정합니다. |
LOG COLLECT | 통신 로그데이터를 파일에 기록할 것인지 선택합니다. 로그파일은 해당 프로젝트의 IOServerLog 폴더에 다음과 같은 파일명 규칙으로 텍스트파일 형태로 기록된다. "/Publish/프로젝트/Log/IOServerLog/DRV.MS001_2021_1_31.txt" |
ADD (Frame) | 통신 명령을 추가합니다. (이것을 프레임 추가한다고 말합니다.) |
Insert (Frame) | 선택된 프레임을 뒤로 미루고 사이에 프레임을 삽입합니다. |
Delete (Frame) | 선택한 프레임을 리스트에서 삭제합니다. |
Run Test | 설정된 내용으로 디바이스와 통신시험을 합니다. READ / WRITE 모두 가능합니다 |
Stop Test | 통신시험을 그만합니다. |
Send Test | 통신시험중에 디바이스로 특정 데이터를 출력하는 시험을 합니다. |
■ 통신프레임 설명
항목 |
설명 |
Code | 프레임의 이름입니다. 실태그 추가할 때 어드레스로 사용됩니다. 어드레스의 선두번지를 이름으로 보통 사용합니다. |
Unit | PLC 국번을 설정해줍니다. PLC국번은 MELSEC Config에서 설정된 국번을 입력해주어야 합니다. |
Device | MELSEC PLC에서 지원하는 디바이스명 어드레스를 붙여서 설정해줍니다. 사용하는 레지스터는 X, Y, B, W, D, M, L, SB, SW, ZR 등 입니다. |
Count | 시작 어드레스부터 읽어들일 워드수를 입력합니다. |
Scan | 호출여부를 선택합니다. |
Description | 프레임 내용을 설명합니다. |
■ [RunTest] 통신상태
■ 로그파일 내용
[READ 내용]
[17:49:49.683] TO : 500000FF03FF000018000A04010000ZR0000000032
[17:49:49.692] FROM:
000065747473732072746E690067676E72666565000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000
[17:49:49.732] TO : 500000FF03FF000018000A04010000D*0090000064
17:49:49.741] FROM:
0000022003300440055003E8004162616463666568676A696B696D6C6F6E717073747574777674782C7A323134 3336353837303900000000000000000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000
[WRITE 이후 수신된 데이터 내용]
[WORD 값 100 을 M0 에 출력]
[13:43:33.401] TO : LSIS-XGT 00 00 00 00 a0 33 78 00 12 00 00 b8 58 00 02 00 00 00 01 00 04 00 25 4d 57 30 02 00 64 00
13:43:33.403] FROM : 59 00 02 00 00 00 00 00 01 00
[M0 Read]
[13:43:33.909] TO : LSIS-XGT 00 00 00 00 a0 33 79 00 10 00 00 b7 54 00 14 00 00 00 01 00 04 00 25 4d 42 30 02 00
[13:43:33.912] FROM : 55 00 14 00 00 00 00 00 01 00 02 00 64 00
■ 스크립트 함수호출로 다수개의 데이터 송출
연속적으로 보내야 하는 자료를 한번에 보낼 때 사용합니다. 다량의 데이터를 태그를 통해서 보내면 전체적인 통신에 영향을 주게 됩니다.
그래서 여러 번에 걸쳐서 내보내는 것을 한번에 내보낼 수 있는 방법이 스크립트 함수를 통해서 할 수 있습니다.
XGT-FEnet 드라이버는 이 함수를 지원합니다.
_DeviceWriteString(“디바이스명”, “프레임명”, string);
문자열(string)을 태그통하지 않고 디바이스로 직접 내보내며, 최대 글자수는 1400바이트 입니다.
void DeviceWriteString()
{
string str; str = "eRun";
_DeviceWriteString("XGT", "D100", str);
}
위 함수 실행한 후 문자열 태그로 수신된 상태를 보여줍니다.
_DeviceWriteBytes(“device name", "frame code", offset, word_data[], bytesSize);
워드 데이터를 디바이스로 직접 내보낸다. 1400바이트 이내. (최대 700개의 WORD)
void DeviceWriteBytes()
{
short bData[5]; // 2바이트 데이터형의 배열 5개를 선언. 총 10바이트 할당.
bData[0] = @TAG1.VAL1;
bData[1] = @TAG1.VAL2;
bData[2] = @TAG1.VAL3;
bData[3] = 40000;
bData[4] = 50000;
// Device name : XGT
// FRAME : ZR100
// OFFSET : 0
// 데이터 배열변수명 : bData
// 바이트단위의 길이
_DeviceWriteBytes("XGT", "ZR100", 0, bData, 10);
}
14.6 OMRON PLC - EtherNet/IP
OMRON PLC의 EtherNet/IP 프로토콜 지원 유니트 통신 인터페이스 드라이버입니다.
OMRON에서 제공하는 FINS/TCP 프로토콜을 사용합니다.
● FINS/TCP 프로토콜 전용
● EIP21 유니트
● NJ CPU 유니트 내장 EherNet/IP
● 큰 사이즈 데이터를 한번에 전송 가능 (스크립트 이용)
● FINS/TCP는 동시접속 16개까지 접속가능합니다.
● 로그기능
DLL 파일은 CJEtn21.DLL 입니다. 선택버튼을 눌러서 드라이버를 선택합니다.
항목 |
설명 |
이름 | 태그에서 사용되는 디바이스 이름을 입력합니다. 영문 또는 숫자로 구성합니다. |
드라이버 | 선택버튼을 눌러서 드라이버를 설정합니다.(CJEtn21.dll) |
드라이버 활성화 | 프로젝트 실행할 때 I/O서버에서 구동하기 위해서는 활성화를 합니다. 프로젝트 관리자 I/O 디바이스 팝업메뉴의 "디바이스 활성화"에서 설정해도 동일합니다.
|
설정 | 통신속성 및 프레임을 설정합니다. |
■ 설정
■ 통신포트 및 선택사항 설명
항목 |
설명 |
Address | 이 드라이버는 FINS/TCP 프로토콜 통신방식입니다. OMRON NETWORK 카드에 설정된 Ethernet IP주소를 입력합니다. |
Port | FINS/TCP는 기본적으로 포트번호가 9600 입니다. |
FINS/TCP Address | FINS 노드테이블 값을 서버측(CPU), 클라이언트측(Host) 구분해서 설정합니다. 이 드라이버는 자동으로 노드번호를 부여받기 때문에 수정할 필요없이 기본 값으로 두면 됩니다. CPU : 0.1.0 HOST : 0.2.0 |
Scan Time(m/s) | 우측 통신프레임에 설정된 다수의 프레임간 통신간격을 밀리초 단위로 입력합니다. 0 으로 설정하면 프레임간 Interval 이 전혀 없이 고속의 데이터 송수신이 가능합니다. 그러나 다수의 드라이버를 사용하는 경우 밸런스를 위해서 최소값은 0 이 아닌 1로 설정해주시기 바랍니다. |
Timeout(m/s) | 프레임 송신을 하고 응답을 기다리는 시간입니다. 이 값을 너무 짧게 하면 정상적으로 송수신이 안될 수 있습니다. 드라이버 디폴트 값을 그대로 사용합니다. |
Log Collect | 통신로그 파일을 남기려면 체크합니다. 로그파일의 위치는 해당 프로젝트의 IOServerLog 폴더에 다음과 같은 파일명 규칙으로 텍스트파일 형태로 기록된다.
"/Publish/프로젝트/Log/IOServerLog/DRV.Device_2021_1_31.txt" |
Add(Frame) | 통신 명령을 추가합니다. (이것을 프레임 추가한다고 말합니다.) |
Insert(Frame) | 선택된 프레임을 뒤로 미루고 사이에 프레임을 삽입합니다. |
Delete(Frame) | 선택한 프레임을 리스트에서 삭제합니다. |
Run Test | 설정된 내용으로 디바이스와 통신시험을 합니다. READ / WRITE 모두 가능합니다. |
Stop Test | 통신시험을 그만합니다. |
Send Test | 통신시험중에 디바이스로 특정 데이터를 출력하는 시험을 합니다. |
■ 통신프레임 설명
항목 |
설명 |
Code | 프레임의 이름입니다. 실태그 추가할 때 어드레스로 사용됩니다. 어드레스의 선두번지를 이름으로 보통 사용합니다. |
Device | OMRON PLC에서 지원하는 디바이스명 어드레스를 붙여서 설정해줍니다. 이 드라이버는 D 레지스터를 사용합니다. |
Count | 시작 어드레스부터 읽어들일 워드수를 입력합니다. |
Scan | 호출여부를 선택합니다. |
Description | 프레임 내용을 설명합니다. |
■ [RunTest] 통신상태 보기
[16:50:59.518] TO : 80000200EE0000EF00010101820000000032
[16:50:59.522] FROM :
C0000200EF0000EE000101010040882CD0070A00F40100000000000000000000000000FF0000000000000000000
000
0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000
[16:50:59.530] TO : 80000200EE0000EF00020101820064000032
16:50:59.534]FROM :
C0000200EF0000EE000201010040000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
000000000000000000000000000000000000000000000000
■ 스크립트 함수호출로 다수개의 데이터 송출
연속적으로 보내야 하는 자료를 한번에 보낼 때 사용합니다. 다량의 데이터를 태그를 통해서 보내면 전체적인 통신에 영향을 주게 됩니다.
그래서 여러 번에 걸쳐서 내보내는 것을 한번에 내보낼 수 있는 방법이 스크립트 함수를 통해서 할 수 있습니다.
OMRON PLC FINS/TCP 드라이버는 이 함수를 지원합니다.
[문자열]
_DeviceWriteString(“디바이스명”, “프레임명”, string);
문자열(string)을 태그통하지 않고 디바이스로 직접 내보낸다. 최대 글자수는 4000바이트.
[바이트 데이터]
_DeviceWriteBytes(“device name", "frame code", offset, bytes_data[], bytesSize);
바이트 데이터를 디바이스로 직접 내보낸다. 4000바이트 이내.
[워드데이터]
_DeviceWriteBytes(“device name", "frame code", offset, word_data[], bytesSize);
워드 데이터를 디바이스로 직접 내보낸다. 4000바이트 이내.
[ 태그그룹 전송]
_DeviceWriteGroup("device name", "frame code", "Tag Group");
레시피 데이터 한번에 전송할 때 사용한다.
이 드라이버에서 다음 함수는 프레임의 호출여부만 올라옵니다. (0 또는 1)
bScan = _DeviceGetScanInfo("device", "C1");
이 드라이버에서 다음 함수는 프레임의 호출여부만 설정합니다. (0=호출취소 또는 1=호출)
_DeviceSetScanInfo("device", "C1", 1 or 0);
■ OMRON PLC설정 프로그램
OMRON Sysmac Studio TOOL에서 FINS/TCP 네트워크 설정을 해야 합니다.
1) 장치연결
2) 내장 EtherNet/IP 포트설정에서 FINS/TCP 설정하기
3) CPU 유니트 CJ1W-EIP21 설정에서 FINS/TCP 설정하기
14.7 USERNET
아스키 데이터 통신 프로토콜을 지원하는 디바이스에 맞게 프로토콜을 편집할 수 있도록 하여 다양한 디바이스에 대한
통신이 가능하도록 하는 사용자정의 통신 드라이버 입니다.
● 다양한 디바이스 통신 대응가능
● RS-232C / RS-485 / RS-422 / TCP-IP
● 아스크, 바이너리 모두 가능
● 큰 사이즈 데이터를 한번에 전송 가능 (스크립트 이용)
● 로그기능
DLL 파일은 USERNET.DLL입니다. 선택버튼을 눌러서 드라이버를 선택합니다.
항목 |
설명 |
MEDIA | 이 드라이버는 RS-232C/RS-422/485, TCP/IP 연결방식을 지원합니다. |
RS-232/422/485 | 디바이스의 통신사양에 맞춥니다. PC에서 사용할 수 있는 COM포트를 선택 합니다. Ex) COM2-9600-8-N-1 |
TCP Address / Port | TCP 연결디바이스 IP주소, 포트번호를 입력합니다. |
Log Collect | 통신로그 파일을 남기려면 체크합니다. 로그파일의 위치는 해당 프로젝트의 IOServerLog 폴더에 다음과 같은 파일명 규칙으로 텍스트파일 형태로 기록된다. "/Publish/프로젝트/Log/IOServerLog/DRV.Device_2021_1_31.txt" |
Reset On Comm. Error | 연결이 끊어졌을 경우 해당 프레임의 결과데이터를 0 으로 리셋하려면 설정해 둡니다. |
Log Keep (일) | LOG COLLECT 옵션이 선택이 되어있어야 하며 통신로그 기록 파일의 보관기간을 입력합니다. 기간이 지난 파일은 삭제합니다. 통신에 장애가 발생할 때 원인파악 분석을 위하여 남겨놓는 데이터 파일입니다. 일반적으로 3 일정도로 설정합니다. |
Tx Delimiter | UserNet 프레임 구성은 통신하고자 하는 디바이스의 프로토콜 포맷에 맞추어야 하는데, 프레임을 구성하는 포맷에서 사용하는 구분자를 여기서 지정합니다. 가급적 아스키코드 데이터 통신에서 사용하지 않는 문자 1 바이트를 설정해 줍니다. TX 프레임(디바이스로 내보내는), RX 프레임(디바이스에서 들어오는) 정의 시 Tx Delimiter 를 사용하여야 합니다. |
Log Text | 통신 로그 데이터를 아스키문자 또는 16 진수로 기록합니다. |
Scan Time(m/s) | 우측 통신프레임에 설정된 다수의 프레임간 통신간격을 밀리초 단위로 입력합니다. 0 으로 설정하면 프레임간 Interval이 전혀 없이 고속의 데이터 송수신이 가능합니다. 그러나 다수의 드라이버를 사용하는 경우 밸런스를 위해서 최소값은 0 이 아닌 1 로 설정해주시기 바랍니다. |
Timeout (m/s) | 프레임 송신을 하고 응답을 기다리는 시간입니다. 이 값을 너무 짧게 하면 정상적으로 송수신이 안될 수 있습니다. 드라이버 디폴트 값을 그대로 사용합니다. |
Add (m/s) | 통신 명령을 추가합니다. (이것을 프레임 추가한다고 말합니다.) |
Insert (m/s) | 선택된 프레임을 뒤로 미루고 사이에 프레임을 삽입합니다. |
Delete (m/s) | 선택한 프레임을 리스트에서 삭제합니다. |
Run Test | 설정된 내용으로 디바이스와 통신시험을 합니다. READ / WRITE 모두 가능합니다. |
Stop Test | 통신시험을 그만합니다. |
Send Test | 통신시험중에 디바이스로 특정 데이터를 출력하는 시험을 합니다. |
■ 통신프레임 설명
항목 |
설명 |
Code | 프레임의 이름입니다. 실태그 추가할 때 어드레스로 사용됩니다. 어드레스의 선두번지를 이름으로 보통 사용합니다. |
To Device (TX) | 디바이스와 통신을 하기 위해서는 특정 패킷프레임(Packet Frame)을 보내주어야 디바이스에서 해당하는 데이터를 되돌려 주게 되는데, 이 때 사용할 프레임을 정의합니다. 프레임은 이미 정의되어 있는 매크로와 매크로에 대응하는 값들로 구성이 됩니다. DELIMITER(|) + MACRO(STR) + MACRO VALUE(eRun scada) + DELIMITER(|) |STR|eRun scada| 아스키 문자로 구성할 때는 위와 같이 해주고, 바이너리 코드는 괄호문자를 사용해서 < , >로 감싸주어야 합니다. (ex) CR(Carriage Return) => <0D> 또는 <0d>를 사용합니다. LF(Line Feed) <0A> or <0a> 사용합니다. TX프레임에서 사용가능한 매크로는 NOP, LNK, STR, CRC16, SUM8, XOR8 해서 6가지 입니다.
|
From Device (RX) | 디바이스로 요구한 프레임에 맞게 디바이스에서 응답하는 포맷을 여기에 정의합니다. RX프레임은 디바이스로부터 수신된 데이터를 알맞게 분리해서 순서대로 버퍼에 저장하도록 정의합니다. RX매크로는 별도 설명부분을 참고하시기 바랍니다. |
Scan | 호출여부를 선택합니다. |
Description | 프레임 내용을 설명합니다. |
■ 패킷 편집창
To Device는 TX 패킷을 입력하는 영역이고 직접 매크로 조합을 입력해도 되지만 "TX 매크로창"을 눌러서
매크로 편집창을 띄워서 편집을 하는 것이 편리합니다. From Device는 RX패킷을 입력하는 영역이고
TX 패킷영역과 마 찬가지로 "RX 매크로창"을 띄워서 패킷조합을 할수 있습니다.
TX패킷을 조합하는데 사용하는 TX Macro가 있고, RX패킷을 조합하는데 사용하는 RX Macro가 있습니다.
■ TX 매크로
매크로(MACRO) |
매크로 설명 |
사용예시 |
NOP | 디바이스로 별도의 패킷을 송출하지 않아도 디바이스에서 무조건 데이터를 보내는 경우 정의한다. 단, RX 프레임은 정의해 주어야 한다. | |NOP| |
LNK | RUN-TIME 실행중에 디바이스로 특정값을 전송해야 할 경우 사용하는 매크로. 상위에서 넘겨받아서 송출하는 부분을 정의한다. LNK 가 정의되면 해당 프레임의 스캔 타임은 내부에서 자동으로 0 으로 설정되도록 한다. 그러므로 RUN-TIME 실행 중에 해당 프레임은 호출되지 않는다. (주의) |LNK| 매크로를 프레임 각 1 개만 사용할 것. 한번에 송출가능한 최대 바이트 크기는 79 이다. | LNK|%c| -> 1 BYTE 코드값. |LNK|%02X| -> 16 진수값을 2 바이트로 변환. |LNK|%s| -> 문자열 전송. |LNK|%d<0d>| -> 정수값 + CR 값 (123+CR) |LNK|%.2f| -> 실수값 (123.5) |
STR | 문자열 그래도 송출하는 부분을 정의한다. | |STR|12345| -> 문자열 “12345” 5 바이트 송출. |STR|00WSS%%MW06| -> 송출 프레임 문자열. |STR|<01><04><0D>| -> HEX CODE 4 바이트. |
CRC16 | 지정된 범위의 데이터를 CRC-16 계산으로 2 바이트를 생성하고, 결과값을 상위, 하위 위치 바꾸어서 넣어준다. | |CRC16|0|8| -> 0 번째 부터 8 바이트를 CRC16 연산한다. 결과는 2 바이트. |
SUM8 | 지정 범위 데이터를 모두 더해서 256으로 나눈 나머지 값 1 바이트를 체크코드로 정의한다. | |SUM8|1|8| -> 1 번째 부터 8 바이트를 모두 더해서 256 나머지값. 결과는 1 바이트. |
XOR8 | 지정 범위 데이터를 모두 XOR 연산후 결과 1 바이트를 체크코드로 정의한다. | |XOR8|0|8| -> 0 번째 부터 8 바이트를 모두 XOR 연산값. 결과는 1 바이트. |
■ RX 매크로
매크로(MACRO) |
매크로 설명 |
사용예시 |
STA | 정상적인 수신처리를 위한 첫번째 수신 문자를 정의. (SOH, STX, $, #, etc) | |STA|<02>| -> 0x02(STX)를 시작 문자로 지정. |STA|<0d>| -> 0x0D(CR)을 시작 문자로 지정. |
END | 수신 완성 처리를 위한 끝 문자 1바이트를 정의. (EOH, ETX, CR, LF, etc) | |END|$| -> ‘$’ 끝 문자로 지정. |END|<0A>| -> 0x0A(LF)를 끝 문자로 지정. |
TFL | Total Frame Length. 디바이스로부터 수신 되어야 하는 바이트 길이. End Character 와 같이 사용할 수 없다. | |TFL|12| -> 정상적인 프레임의 길이 12바이트. |
CRC16 | 지정된 범위의 데이터를 CRC-16 계산으로 2 바이트를 생성하고, 결과값을 상위, 하위 위치 바꾸어서 넣어준다. | |CRC16|0|8| -> 0 번째 부터 8 바이트를 CRC16 연산한다. 결과는 2 바이트. |
SUM8 | 지정 범위 데이터를 모두 더해서 256으로 나눈 나머지 값 1 바이트를 체크 코드로 정의한다. | |SUM8|1|8| -> 1 번째 부터 8 바이트를 모두 더해서 256 나머지 값. 결과는 1 바이트. |
XOR8 | 지정 범위 데이터를 모두 XOR 연산후 결과 1 바이트를 체크 코드로 정의한다. | |XOR8|0|8| -> 0 번째 부터 8 바이트를 모두 XOR 연산 값. 결과는 1 바이트. |
CCP | 디바이스에서 받은 패킷에서 CRC16/SUM8/XOR8 계산 값이 위치한 정보를 설정한다. | |CCP|8|2| -> 8 번째 2 바이트 |
DB1 | 소스 데이터를 HEX CODE로 인식해서 실제 데이터 추출하고, 1 BYTE 형 데이터로 버퍼에 넣어준다. | |DB1|3|1| <01><02> -> Data 3 번째 HEX 코드 1BYTE 로 인식처리. |
DB2 | 소스 데이터를 HEX CODE로 인식해서 실제 데이터 추출하고 2BYTE(WORD)형 데이터로 버퍼에 넣어준다 | |DB2|3|4| -> <01><02><03><04> ->3 번째 부터 4 바이트를 WORD 로 변환. |
DB4 | 소스데이터를 HEX CODE로 인식해서 실제데이터 추출하고 4BYTE(LONG)형 데이터로 버퍼에 넣어준다. | |DB4|3|4| -> <01><02><03><04> ->3 번째 부터 4 바이트를 LONG 변환. |
DD1 | 소스를 10 진수로 인식, 1 BYTE 형 데이터버퍼 저장 | |DD1|3|2| -> 12 ->3 번째 부터 2 바이트를 BYTE 로 변환 |
DD2 | 소스를 10 진수로 인식, 2 BYTE 형 데이터버퍼 저장. | |DD2|3|4| -> 1234 |
DD4 | 소스를 10 진수로 인식, 4 BYTE 형 데이터버퍼 저장. | |DD4|3|8| -> 12345678 |
DX1 | 소스를 16 진수로 인식, 1 BYTE 형 데이터버퍼 저장. | |DX1|3|2| -> AB |
DX2 | 소스를 16 진수로 인식, 2 BYTE 형 데이터버퍼 저장. | |DX2|3|4| -> ABCD ->3 번째 부터 4 바이트를 WORD로 변환. |
DX4 | 4 소스를 16 진수로 인식, 4 BYTE 형 데이터버퍼 저장. | |DX4|3|8| -> ABCD1234 ->3 번째 부터 8 바이트를 LONG로 변환. |
DF4 | 소스를 아스키 소수점 있는 숫자로 인식. (4 바이트형) | |DF4|3|4| -> 123.4 ->3 번째 부터 4 바이트를 DOUBLE로 변환. |
DF8 | 소스를 아스키 소수점 있는 숫자로 인식. (8 바이트형) | |DF8|3|4| -> 123.4 ->3 번째 부터 4 바이트를 DOUBLE로 변환. |
DSS | 수신된 데이터소스를 아스키 문자열로 인식. (주의)DSS 매크로는 단독으로 사용 할 것 수신 가능한 길이는 79 바이트. | |DSS|3|4| ->3 번째 부터 4 바이트를 문자열로 변환없음. |
SEPD | Seperate as Decimal 지정된 구분 문자까지의 데이터소스를 10진수로 인식. 4 바이트 크기. | |SEPF|<0D> -> 구분문자 CR(0x0D) 까지의 문자열을 LONG 형으로 변환. |
SEPX | Seperate as Hexa 지정된 구분 문자까지의 데이터소스를 16진수로 인식. 4 바이트 크기. | |SEPF|<0D> -> 구분문자 CR(0x0D) 까지의 문자열을 16진수로 LONG 형으로 변환 |
SEPF | Seperate as Float 지정된 구분 문자까지의 데이터소스를 소수점숫자로 인식. 8 바이트 크기 | |SEPF|<0D> -> 구분문자 CR(0x0D) 까지의 문자열을 DOUBLE 형의 변환. |
SEPS | SEPERATE AS STRING 지정된 구분 문자까지의 데이터소스를 문자열로 인식 (주의)SEPS 매크로는 단독으로 사용 할 것 수신 가능한 길이는 79 바이트. | |SEPS|<0A> -> 구분문자 LF(0x0A) 까지의 문자열을 그대로 저장. |
CNT | COUNTER 수신 패킷의 수신완료 때마다 1씩 증가 4 바이트 크기. | |CNT| |
JMP | 송신프레임에서만 사용되며, 해당 프레임이 송출되고 디바이스로 부터 수신되면 다음 송출할 프레임으로 넘어가도록 한다. 강제 JUMP 하려고 하는 프레임번호가 등록된 프레임개수를 넘어가면 안 된다. 만일 그러면 JUMP 는 무시되고 넘어간다. | |JMP|2| 디바이스 수신완료 후 2 번프레임 실행으로 넘어가게 한다. 수신 프레임에는 사용할 수 없다. |
■ TX 매크로 정의와 RX매그로 정의 예시
■ RX 패킷의 버퍼 인덱스정의 예시
■ RX 패킷 배열매치
■ 태그값을 디바이스로 출력정의 예시
송출 프레임 예시 -> |STR|#0001|LNK|%d<0d>
출력태그 설정 방법
■ To Device한 후 From Device 그리고 곧바로 Ack등을 보내주어야 하는 경우 프레임 설정
-> 바로 다음 프레임에 To Device에 |STR|<06>을 하고, From Device에는 |NOP|을 설정합니다.
■ RX 패킷의 태그연결 예시
(EX1)
[CX_FR] |DB2|1|2|DB2|3|2|DSS|5|40|CNT|END|<03>|
DB2|1|2| -> CX_FR:1
DB2|3|2| -> CX_FR:2
DSS4|5|40| -> CX_FR:3
CNT -> CX_FR:23 (offset = 3 + 40/2 = 23)
(EX2)
1) 디바이스로부터 수신된 패킷
“<02><01><80>NEFES@SEFA@@<03>” 12바이트
2) RX 패킷 설정
[CX_FR] |DB2|1|2|DB2|3|1|DSS|4|12|CNT|END|<03>
3) 태그연결 설정
DB2|1|2| -> CX_FR:1
DB2|3|1| -> CX_FR:2
DSS4|4|12| -> CX_FR:3
CNT -> CX_FR:9 (offset = 3 + 12/2 = 9)
(EX3)
[CX_FR] |DB2|1|2|DB2|3|1|DSS|4|112|CNT|END|<03>
DB2|1|2| -> CX_FR:1
DB2|3|1| -> CX_FR:2
DSS4|4|112| -> CX_FR:3
CNT -> CX_FR:59 (offset = 3 + 112/2 = 59)
14.8 MODBUS SERVER
MODBUS RTU(Remote Terminal Unit), MODBUS-TCP 프로토콜에 의한 모드버스 슬레이브 서비스를 위한
서버 인터페 이스 드라이버입니다. N대의 HMI간 데이터 공유가 필요할 경우 사용할 수 있습니다.
I/O Server에 등록되면, 해당포트를 서버서비스(Passive) 상태로 열고 클라이언트(다른 HMI)에서
MODBUS RTU/TCP 접속을 허용하고 데이터를 주고 받습니다. RS-232/RS-485 사용할 경우 1:1 통신을 하는
드라이버로 동작하며 TCP/IP 인 경우 1:N 통신 서비스 가능합니다.
● 모드버스 RTU / TCP 모드지원
● RS-232C/RS-485/RS-422/TCPIP
● N대의 모드버스 클라이언트 연결가능
● 큰 사이즈 데이터를 한번에 전송 가능 (스크립트)
● 로그기능
DLL 파일은 MBSVR.DLL 입니다. 선택버튼을 눌러서 드라이버를 선택합니다.
■ 설정내용
항목 |
설명 |
MEDIA | 이 드라이버는 RS-232/RS-422/485, TCP/IP 연결방식을 지원합니다. |
RS-232 / 422 / 485 | 디바이스 통신사양에 맞춥니다. PC에서 사용할 수 있는 COM포트를 선택합니다. Ex) COM2-9600-8-N-1 |
TCP Service Port | MODBUS TCP 서비스 포트는 기본 값이 502입니다. |
Unit No. | MODBUS 프로토콜은 장치번호를 기본적으로 사용하므로 1~250 사이의 10진수로 설정한다. |
Max Client | 미디어가 TCP/IP인 경우 동시에 서비스 가능한 클라이언트 수를 설정한다. 최대 10개 클라이언트를 지원한다. RS-232/RS-485인 경우는 의미가 없다. |
Keep Alive | MODBUS TCP 통신인 경우 연결된 클라이언트로 부터 일정 시간동안 송수신 데이터가 없을 경우 원활한 서버서비스를 위해서 해당 클라이언트 접속을 끊는다. 이때 설정하는 초단위 시간이다. 이 값이 0 이면 이 기능을 사용하지 않는다 |
Log Keep | 로그파일 기록기간을 입력합니다 |
Log Collect | 통신로그 파일을 기록합니다. "/Publish/프로젝트/Log/IOServerLog/DRV.Device_2021_1_31.txt" |
| 연결이 끊어졌을 경우 해당 프레임의 결과데이터를 0으로 리셋하려면 설정해 둡니다. |
MODBUS-TCP Mode | MODSVR 드라이버는 MODBUS-RTU / MODBUS-TCP 서비스를 지원한다. MODBUS RTU 와 MODBUS TCP 의 프로토콜은 서로 상이하며 주로 미디어가 TCP/IP 인 경우에 사용한다. 미디어가 RS-232/RS-485 인 경우에도 MODBUS-TCP Mode 사용은 가능하지만 가급적 사용을 권하지 않는다. |
Run Test | 설정된 내용으로 디바이스와 통신시험을 합니다. READ / WRITE 모두 가능합니다. |
Stop Test | 통신시험을 그만합니다. |
■ 통신프레임 설명
항목 |
설명 |
Code (프레임 인식코드) | 해당 프레임을 대표하며 상위 실태그에서 해당 디바이스 값을 요구할 때 또는 디바이스에 값을 기록할 때사용되는 디바이스 어드레스 코드이다 |
Coil / Register number | MODBUS 메모리 종류이며 4 가지로 사용된다. 1) Discrete output coils (R/W 용) Modbus Function code 0x01 에 해당한다. (1 - 4096) Modbus client 에서 Server 측으로 전송하는 비트 데이터가 기록되는 프레임 버퍼이다. 이때, Client 측에서 사용하는 Function code 는 0x05. 2) Discrete input status (R/O 용) Modbus Function code 0x02 에 해당한다. (10001 - 14096) 3) Analog input register (R/O 용) Modbus Function code 0x03 에 해당한다. (40001 - 44096) 4) Analog output holding register (R/W 용) Modbus Function code 0x04 에 해당한다. (30001 - 34096) Modbus client 에서 Server 측으로 전송하는 아날로그 데이터(16bit)가 기록되는 프레임 버퍼이다. 이때, Client 측에서 사용하는 Function code 는 0x06. |
Size(버퍼크기) | 불필요한 메모리낭비를 위해서 필요에 따라 해당프레임의 크기를 지정한다. 각 프레임의 크기는 최소 1 에서 최대 4096 까지 설정가능 하다. 00001, 10001 프레임은 최대 4096 바이트크기이며, 30001, 40001 프레임은 4096 워드크기(8192 바이트크기)이다. |
DataType(데이터형태) | Client 측에서 바라볼 경우 사용되는 프레임 버퍼 엑세스방향을 의미한다. R/O (Read Only) 읽기만 가능하다. R/W (Read Write) 읽기 그리고 쓰기가 가능한다. 그러나 Server 측에서는 프레임 관계없이 데이터 읽기/쓰기가 모두 가능하다. |
Description(프레임설명) | 해당프레임에 대한 설명이며 사용자가 편집할 수 없다. |
1) Comms. View
-. 클라이언트와의 통신메시지를 보여준다.
2) Coil Outputs
-. 클라이언트로부터 비트데이터를 받을 수 있다. Read/Write
3) Digital Inputs
-. 셀에 데이터를 설정하면, 클라이언트에서 읽어간다. Read Only.
4) Analog Inputs
-. 셀에 WORD(2바이트) 데이터를 설정하면 클라이언트에서 읽어간다. Read Only.
5) Holding Registers.
-. 클라이언트로부터 Word데이터를 받을 수 있다. Read / Write.
댓글목록 0