์ธ๋ถ HMI ์๋ฒ ๋
๋ง์ ์ฐ์ ์ฉ ๊ธฐ๊ณ๋ ๋ก์ปฌ ์น ์๋ฒ๋ฅผ ํตํด ์์ฒด HMI(Human-Machine Interface)๋ฅผ ๋ ธ์ถํฉ๋๋ค. ์ด ๊ฐ์ด๋๋ Embed ์์ ฏ, nginx ๋ฆฌ๋ฒ์ค ํ๋ก์, ์๊ฒฉ ์ ๊ทผ ํฐ๋์ ์ฌ์ฉํ์ฌ IronFlock UI์์ ์ด๋ฌํ HMI์ ์ ๊ทผํ๋ ๋ฐฉ๋ฒ์ ์ค๋ช ํฉ๋๋ค.
๊ธฐ๋ณธ ์์: ๋จ์ผ ๊ธฐ๊ณ
๊ฐ์ฅ ๊ฐ๋จํ ๊ฒฝ์ฐ๋ ์ฃ์ง ๋๋ฐ์ด์ค์ ๋ก์ปฌ ๋คํธ์ํฌ์์ ์ ๊ทผ ๊ฐ๋ฅํ ๋จ์ผ CNC ๊ธฐ๊ณ(๋๋ PLC, ์นด๋ฉ๋ผ ๋ฑ)์ HMI ์น ์๋ฒ โ ์๋ฅผ ๋ค์ด 192.168.1.50:8080 โ ์
๋๋ค.
1. ๊ธฐ๊ณ ์ฃผ์๋ฅผ ์ฑ ํ๋ผ๋ฏธํฐ๋ก ๊ตฌ์ฑ
์ฑ ํ๋ผ๋ฏธํฐ๋ฅผ ์ฌ์ฉํ์ฌ ์ฌ์ฉ์๊ฐ ๊ธฐ๊ณ์ ๋ก์ปฌ HMI ์ฃผ์(์: 192.168.1.50:8080)๋ฅผ ๊ตฌ์ฑํ ์ ์๋๋ก ํฉ๋๋ค. ์ด๋ ๊ฒ ํ๋ฉด ์ฃผ์๊ฐ ํ๋์ฝ๋ฉ๋์ง ์์ผ๋ฉฐ ๋๋ฐ์ด์ค ์ค์น๋ณ๋ก ์ค์ ํ ์ ์์ต๋๋ค.
2. ์ฃ์ง ์ฝ๋์ nginx ๋ฆฌ๋ฒ์ค ํ๋ก์ ์ถ๊ฐ
์ฑ์ Docker ์ค์ ์ ๊ตฌ์ฑ๋ ๊ธฐ๊ณ ์ฃผ์๋ฅผ ์ฝ๊ณ ์ฃ์ง ๋๋ฐ์ด์ค์ ๊ณ ์ ํฌํธ(์: localhost:3000)๋ก ์ ๋ฌํ๋ ๊ฐ๋จํ nginx ์ปจํ
์ด๋๋ฅผ ํฌํจํฉ๋๋ค. ์ฃ์ง ์ฝ๋๊ฐ ์ฑ ํ๋ผ๋ฏธํฐ๋ฅผ ์ฝ๊ณ ๊ทธ์ ๋ฐ๋ผ nginx๋ฅผ ๊ตฌ์ฑํฉ๋๋ค.
3. ํฌํธ ํ ํ๋ฆฟ์ ๊ณ ์ ํฌํธ ์ ์
ํฌํธ ํ ํ๋ฆฟ์์ nginx๊ฐ ์์ ๋๊ธฐํ๋ ํฌํธ๋ฅผ ์ ์ธํฉ๋๋ค:
# .ironflock/port-template.yml
ports:
- name: CNC ๊ธฐ๊ณ HMI
port: 3000
main: falseํฌํธ๋ ๊ณ ์ ๋์ด์ผ ํฉ๋๋ค(๋์ ์ผ๋ก ํ ๋น๋์ง ์์). ์๊ฒฉ ์ ๊ทผ ํฌํธ๋ ๋ฐํ์์ ์ถ๊ฐํ ์ ์๊ธฐ ๋๋ฌธ์ ๋๋ค โ ๋ฆด๋ฆฌ์ค ์์ ์ ์ ์๋๊ณ ์ค์น๋ณ๋ก ๊ตฌ์ฑ๋ฉ๋๋ค.
port-template.yml์ ํฌํธ๋ฅผ ์ ์ธํจ์ผ๋ก์จ ํ๋ก์ ํธ ๊ด๋ฆฌ์๊ฐ ์ฑ ์ค์ ์์ CNC ๊ธฐ๊ณ์ ๋ํ ์๊ฒฉ ์ ๊ทผ์ ํ์ฑํํ๊ฑฐ๋ ๋นํ์ฑํํ ์ ์์ต๋๋ค. ์ฑ์ด ๋๋ฐ์ด์ค์ ์ฒ์ ์ค์น๋ ๋ ์ฌ์ฉ์๋ ์ค์น ์ค์ ์์ ์ด ํฌํธ์ ๋ํ ์๊ฒฉ ์ ๊ทผ์ ๋ช
์์ ์ผ๋ก ํ์ฉํด์ผ ํฉ๋๋ค. ์ด๋ ๋ณด์ ๊ธฐ๋ฅ โ ์๊ฒฉ ์ ๊ทผ์ ๊ธฐ๋ณธ์ ์ผ๋ก ํ์ฑํ๋์ง ์์ต๋๋ค.
์ฌ๊ธฐ์ ์๊ฒฉ ์ ๊ทผ์ด ํ์ํ ์ด์ ๋ HMI์ ์ ๊ทผํ๋ ์ฌ์ฉ์๊ฐ ๋ก์ปฌ ๋ ธํธ๋ถ์ ์๊ณ ์ฃ์ง ๋๋ฐ์ด์ค์ ๋คํธ์ํฌ์๋ ์๊ธฐ ๋๋ฌธ์ ๋๋ค. IronFlock์ ํฐ๋ ๊ธฐ์ ์ ์ฌ์ฉ์์ ๋ธ๋ผ์ฐ์ ์์ ์ฃ์ง ๋๋ฐ์ด์ค์ ์ ๋ฌ๋ ํฌํธ๊น์ง ์์ ํ ์ฐ๊ฒฐ์ ์์ฑํฉ๋๋ค.
4. ๋ณด๋์ Embed ์์ ฏ ์ถ๊ฐ
UI Builder์์ ํฌํธ 3000์ ๋๋ฐ์ด์ค ์๊ฒฉ ์ ๊ทผ ํฐ๋ ์ฃผ์๋ฅผ ๊ฐ๋ฆฌํค๋ Embed ์์ ฏ์ ์ถ๊ฐํฉ๋๋ค. CNC ๊ธฐ๊ณ์ ์๋ HMI๊ฐ ์ด์ IronFlock ๋ณด๋ ๋ด์ ์ง์ ํ์๋ฉ๋๋ค.
์ด ๊ธฐ๋ณธ ์ค์ ์ ๋๋ฐ์ด์ค๋น ๋จ์ผ ๊ธฐ๊ณ HMI์ ๋ํ ์๊ฒฉ ์ ๊ทผ์ ์ ๊ณตํฉ๋๋ค โ VPN ์์ด, ๋ฐฉํ๋ฒฝ ๋ณ๊ฒฝ ์์ด.
๊ณ ๊ธ: ๋๋ฐ์ด์ค๋น ์ฌ๋ฌ ๊ธฐ๊ณ
์ฃ์ง ๋๋ฐ์ด์ค๊ฐ ์ฌ๋ฌ ๊ธฐ๊ณ์ ์ฐ๊ฒฐ๋ ๊ฒฝ์ฐ ๊ฒฝ๋ก ๊ธฐ๋ฐ ๋ผ์ฐํ ์ ์ฌ์ฉํ์ฌ ๋จ์ผ ์ ๋ฌ ํฌํธ๋ฅผ ํตํด ๋ชจ๋ HMI๋ฅผ ์ ๊ณตํ๋๋ก ํจํด์ ํ์ฅํ ์ ์์ต๋๋ค.
1. ๋ฐ์ดํฐ ๋ฐฑ์๋ ํ ์ด๋ธ์ ๊ธฐ๊ณ ์ฃผ์ ์ ์ฅ
๊ฐ ๊ธฐ๊ณ์ ์ธ๋ถ ์ ๋ณด(๋ก์ปฌ ์น ์๋ฒ ์ฃผ์ ๋ฐ ์ ๋ฌ๋ ๊ฒฝ๋ก ํฌํจ)๋ฅผ ์ถ์ ํ๋ ํ ์ด๋ธ์ ๋ฐ์ดํฐ ๋ฐฑ์๋์ ์ถ๊ฐํฉ๋๋ค:
# .ironflock/data-template.yml
data:
tables:
- tablename: machines
maintainLatestFlagFor: ['machine_id']
columns:
- id: tsp
dataType: timestamp
- id: machine_id
dataType: string
- id: name
dataType: string
- id: local_hmi_address
dataType: string
- id: forwarded_hmi_path
dataType: string2. nginx๋ฅผ ํตํด ์ฌ๋ฌ ๊ธฐ๊ณ ๋ผ์ฐํ
nginx๋ฅผ ๊ตฌ์ฑํ์ฌ ๊ฐ์ ๊ณ ์ ํฌํธ ์๋์ ๋ณ๋ ๊ฒฝ๋ก์์ ๊ฐ ๊ธฐ๊ณ๋ฅผ ๋ฆฌ๋ฒ์ค ํ๋ก์ํฉ๋๋ค. ์๋ฅผ ๋ค์ด 192.168.1.50:8080์ localhost:3000/cnc1/๋ก, 192.168.1.51:8080์ localhost:3000/cnc2/๋ก ์ ๋ฌํฉ๋๋ค. ์ด ์ ๋ฌ๋ ๊ฒฝ๋ก๋ฅผ machines ํ
์ด๋ธ์ ๋ค์ ์ ์ฅํ์ฌ ๋ณด๋๊ฐ ๊ฐ HMI๋ฅผ ์ฐพ์ ์ ์๋๋ก ํฉ๋๋ค.
๊ธฐ๋ณธ ์์์ ๋์ผํ ๊ณ ์ ํฌํธ์ ํฌํธ ํ ํ๋ฆฟ์ด ์ ์ฉ๋ฉ๋๋ค โ ํ๋์ ํฌํธ๊ฐ ๋ค๋ฅธ ๊ฒฝ๋ก๋ฅผ ํตํด ๋ชจ๋ ๊ธฐ๊ณ๋ฅผ ์ ๊ณตํฉ๋๋ค.
3. ํ์ด์ง ๊ธฐ๋ฐ ๋ด๋น๊ฒ์ด์ ์ผ๋ก Embed ์์ ฏ ์ถ๊ฐ
UI Builder์์ ๊ฐ ๊ธฐ๊ณ HMI๋ฅผ ์ํ ๋ณ๋์ ๋ณด๋ ํ์ด์ง๋ฅผ ๋ง๋ค๊ณ ๊ฐ ํ์ด์ง์ machines ํ
์ด๋ธ์์ forwarded_hmi_path๋ฅผ ์ฝ์ด ์๋ฒ ๋ URL๋ก ์ฌ์ฉํ๋ Embed ์์ ฏ์ ์ถ๊ฐํฉ๋๋ค.
์ฌ์ฉ์๊ฐ HMI ๊ฐ์ ์ ํํ ์ ์๋๋ก ํ์ด์ง ๋ฐ ๋ด๋น๊ฒ์ด์
๊ธฐ๋ฅ์ ์ฌ์ฉํฉ๋๋ค. ์ฐ๊ฒฐ๋ ๋ชจ๋ ๊ธฐ๊ณ๋ฅผ ์์ง ์ฌ์ด๋๋ฐ ๋ฉ๋ด๋ก ๋์ดํ๋ Side Navigation ์์ ฏ์ ์ถ๊ฐํฉ๋๋ค. ์ฌ์ด๋๋ฐ ํญ๋ชฉ์ ์ ๊ธฐ๊ณ๊ฐ ์๋์ผ๋ก ๋ํ๋๋๋ก machines ํ
์ด๋ธ์์ ๋์ ์ผ๋ก ์์ฑ๋ ์ ์์ต๋๋ค. ์ฌ์ฉ์๊ฐ ๊ธฐ๊ณ ์ด๋ฆ์ ํด๋ฆญํ๋ฉด ๋ณด๋๊ฐ ํด๋น ํ์ด์ง๋ก ์ด๋ํ๊ณ ํด๋น ํ์ด์ง์ Embed ์์ ฏ์ด ์ฌ๋ฐ๋ฅธ HMI๋ฅผ ๋ก๋ํฉ๋๋ค.
๊ฒฐ๊ณผ
์ฌ์ฉ์๋ ๋ณด๋์์ ์ฐ๊ฒฐ๋ ๋ชจ๋ ๊ธฐ๊ณ๋ฅผ ํ์ํ๊ณ ํ๋๋ฅผ ์ ํํ์ฌ IronFlock ๋ด์์ ์ง์ ์๋ HMI์ ์ํธ์์ฉํ ์ ์์ต๋๋ค โ VPN ์์ด, ๋ณ๋ ๋ธ๋ผ์ฐ์ ํญ ์์ด, ๋ฐฉํ๋ฒฝ ๊ตฌ์ฑ ์์ด. Embed ์์ ฏ, ๋ฐ์ดํฐ ๋ฐฑ์๋, ์๊ฒฉ ์ ๊ทผ ํฐ๋์ด ํจ๊ป ์๋ํ์ฌ ์ ์ฒด ๊ธฐ๊ณ ํ๋ฆฟ์ ์ํ ํตํฉ๋๊ณ ์์ ํ ์ ์ด ํ๋ฉด์ ๋ง๋ญ๋๋ค.