Skip to Content
IoT ์•ฑ ๊ฐœ๋ฐœ์™ธ๋ถ€ HMI ์ž„๋ฒ ๋“œ

์™ธ๋ถ€ 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: string

2. 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 ์œ„์ ฏ, ๋ฐ์ดํ„ฐ ๋ฐฑ์—”๋“œ, ์›๊ฒฉ ์ ‘๊ทผ ํ„ฐ๋„์ด ํ•จ๊ป˜ ์ž‘๋™ํ•˜์—ฌ ์ „์ฒด ๊ธฐ๊ณ„ ํ”Œ๋ฆฟ์„ ์œ„ํ•œ ํ†ตํ•ฉ๋˜๊ณ  ์•ˆ์ „ํ•œ ์ œ์–ด ํ™”๋ฉด์„ ๋งŒ๋“ญ๋‹ˆ๋‹ค.

Last updated on