1Jѭӡi dùng có thӇ dùng ÿӇ thêm dӳ liӋu cҫn bә sung cho hӋ thông hoһc tҥo thêm GDQKViFKQJѭӡi dùng mӟi, bên cҥQKÿyFzQFyӭng dөng thӵc tӃ WăQJFѭӡng cho các ÿӕLWѭӧng cӫa hӋ thӕQJQKѭÿӝQJFѫYjEL
Trang 1ĈҤI HӐC QUӔC GIA TP HӖ CHÍ MINH
Trang 2&{QJWUuQKÿѭӧc hoàn thành tҥi:
7UѭӡQJĈҥi Hӑc Bách Khoa ± Ĉ+4*- HCM
Cán bӝ Kѭӟng dүn khoa hӑF767UѭѫQJĈuQK&KkX
Cán bӝ chҩm nhұn xét 1:TS NguyӉn Trӑng Tài
Cán bӝ chҩm nhұn xét 2: 3*6767UѭѫQJĈuQK1KѫQ
LuұQYăQWKҥFVƭÿѭӧc bҧo vӋ tҥL7UѭӡQJĈҥi hӑF%iFK.KRDĈ+4*7S+&0 ngày 19 WKiQJQăP (trӵc tuyӃn) Thành phҫn HӝLÿӗQJÿiQKJLiluұQYăQWKҥFVƭJӗm: 1 Chӫ tӏch: PGS.TS HuǤnh Thái Hoàng
2 7KѭNê761JX\ӉQ9ƭQK+ҧo
3 Ӫy viên 1: TS NguyӉn Trӑng Tài
4 Ӫ\YLrQ3*6767UѭѫQJĈuQK1KѫQ
5 Ӫy viên 3: PGS.TS NguyӉQ7KDQK3KѭѫQJ
Xác nhұn cӫa Chӫ tӏch HӝLÿӗng ÿiQKJLi/9Yj7Uѭӣng Khoa quҧn lý chuyên ngành sau khi luұQYăQÿmÿѭӧc sӱa chӳa (nӃu có)
Trang 3ĈҤI HӐC QUӔC GIA TP.HCM
I 7Ç1Ĉӄ TÀI : HӋ thӕng giám ViWÿLӅu khiӇn và quҧQOêÿӝQJFѫWUrQQӅn tҧng OPC
UA (Motor network control and SCADA system based on OPC UA)
II NHIӊM VӨ VÀ NӜI DUNG :
- Nghiên cӭu và ӭng dөng giao thӭF23&8$ÿӇ cҩu trúc Server-Client
- Nghiên cӭu và ӭng dөQJ1RGH-6ÿӇ tҥo OPC UA Server/Client
- Xây dӵng ӭng dөng thӵc tӃ ҧRWUrQÿLӋn thoҥLÿӇ JLiPViWÿLӅu khiӇQÿӝQJFѫ
III NGÀY GIAO NHIӊM VӨ : 21/09/2020
IV NGÀY HOÀN THÀNH NHIӊM VӨ : 13/06/2021
Trang 4/Ӡ,&Ҧ0Ѫ1 Sau thӡi gian hӑc tұS GѭӟL PiL WUѭӡng Ĉҥi hӑc Bách Khoa TP Hӗ Chí Minh,
ÿѭӧc sӵ truyӅQÿҥt kiӃn thӭFYjJL~Sÿӥ tұn tình tӯ quý thҫy cô Giҧng viên là hành trang quý báu cho sӵ nhұn thӭc và hiӇu biӃt cӫa em ngày hôm nay Em xin ghi nhұQQѫLQj\lòng biӃWѫn chân thành nhҩt
7Uѭӟc tiên, em xin chân thành cҧPѫQWҩt cҧ quý Thҫy Cô thuӝc KRDĈLӋn ±
ĈLӋn Tӱ WUѭӡQJĈҥi hӑc Bách Khoa TP Hӗ Chí Minh ÿmWUDQJEӏ cho em nhӳng kiӃn
thӭc quý báu trong suӕt quá trình hӑc tұp tҥLWUѭӡng
CҧPѫQFiFEҥn hӑc viên lӟp cao hӑc Tӵ Ĉӝng Hóa khóa 2018 và các anh lӟp cao hӑc Tӵ Ĉӝng Hóa khóa 2017 ÿmÿӝng viên và nhiӋWWuQKJL~Sÿӥ em trong quá trình hӑc tұp
Ĉһc biӋt, em xin chân thành cҧPѫQthҫ\7UѭѫQJĈuQK&KkXÿmWұn tình góp ý và JL~Sÿӥ em trong suӕt quá trình thӵc hiӋQÿӅ WjL(PFNJQJFҧPѫQFiFWiFJLҧ cӫa các tài liӋXPjHPÿmVӱ dөQJÿӇ làm tài liӋu tham khҧo
Cuӕi cùng em gӱi lӡi cҧPѫQÿӃn tҩt cҧ nhӳQJQJѭӡi thân, bҥn bè luôn luôn ӣ bên em và ӫng hӝ em Ĉһc biӋt là quý công ty ESTC hӛ trӧ em trong quá trình thӵc hiӋn
Vì kiӃn thӭc bҧn thân còn hҥn chӃ, trong quá trình thӵc hiӋn luұQYăQQj\HPkhông tránh khӓi nhӳng sai sót, kính mong nhұQÿѭӧc nhӳng ý kiӃQÿyQJJySWӯ quý thҫy cô
73+&0WKiQJQăP Hӑc viên Cao hӑF7Ĉ+
Võ Nhұt Quang
Trang 57Ï07Ҳ7/8Ұ19Ă1
MөFÿtFKFӫa luұQYăQOjJLiPViWÿLӅu khiӇQFNJQJQKѭTXҧQOêÿ{QJFѫFӫa nhà máy 1Jѭӡi dùng có thӇ dùng ÿӇ thêm dӳ liӋu cҫn bә sung cho hӋ thông hoһc tҥo thêm GDQKViFKQJѭӡi dùng mӟi, bên cҥQKÿyFzQFyӭng dөng thӵc tӃ WăQJFѭӡng cho các ÿӕLWѭӧng cӫa hӋ thӕQJQKѭÿӝQJFѫYjELӃn tҫn (ӣ ÿӅ tài này chӍ dùng cho biӃn tҫQÿӇ chҥy thӱ TXDÿyJL~SFKRYLӋc giám sát, bҧo trì, bҧRGѭӥQJFNJQJQKѭÿLӅu khiӇn các thiӃt bӏ tҥi vӏ trí làm viӋc trӣ nên dӉ GjQJQKDQKFKyQJKѫQ
Trang 6$EVWUDFW
The purpose of the thesis is to monitor, control and manage the engine of the plant Users can use it to add additional data to the system or create a new list of users, besides there are augmented reality applications for system objects such as motors and inverters (in this topic is only using inverter model for demo) thereby making the monitoring, maintenance, maintenance as well as control of the equipment at the working site easier and faster
Trang 7/Ӡ,&$0Ĉ2$1
&Ð1*75Î1+ĈѬӦC HOÀN THÀNH TҤI 75ѬӠ1*ĈҤI HӐC BÁCH KHOA TP HӖ CHÍ MINH
7{L[LQFDPÿRDQÿk\OjF{QJWUuQKQJKLrQFӭu cӫDULrQJW{LYjÿѭӧFKѭӟng dүn khoa hӑc cӫD767UѭѫQJĈuQK&KkXFiFQӝi dung nghiên cӭu, kӃt quҧ WURQJÿӅ tài này trung thӵFYjFKѭDF{QJEӕ bҩt kǤ hình thӭF QjRWUѭӟFÿk\1Kӳng sӕ liӋu trong các bҧng biӇu phөc vө cho viӋc phân tích, nhұQ[pWÿiQKJLiÿѭӧc chính tác giҧ thu thұp tӯ
mô phӓng và thӵc nghiӋm do chính bҧn thân thӵc hiӋn
Ngoài ra, trong luұQYăQQj\WiFJLҧ có tham khҧo mӝt sӕ tài liӋu trong và ngoài Qѭӟc, tҩt cҧ ÿӅu có ghi chú cө thӇ
NӃu phát hiӋn có bҩt kǤ gian lұn nào tôi xin chӏu hoàn toàn trách nhiӋm vӅ nӝi dung luұQ YăQ Fӫa mình 7UѭӡQJ Ĉҥi hӑc Bách khoa thành phӕ Hӗ Chí Minh
NK{QJOLrQTXDQÿӃn nhӳng vi phҥm tác quyӅn, bҧn quyӅn do tôi gây ra và trong quá trình thӵc hiӋn (nӃu có)
TP Hӗ &Kt0LQKQJj\WKiQJQăP
Võ Nhұt Quang
Trang 80Ө&/Ө&
&+ѬѪ1* GIӞI THIӊU 1
1.1 Tính cҩp thiӃt cӫDÿӅ tài 1
1.2 Mөc tiêu cӫa luұQYăQ 1
1.3 Cҩu trúc cӫa luұQYăQ 2
&+ѬѪ1* PHҪN MӄM, THIӂT Bӎ SӰ DӨNG 3
2.1 Phҫn mӅm 3
2.1.1 Unity 3D 3
2.1.2 MongoDB Atlas 3
2.1.3 OPC UA 5
2.1.4 Siemens TIA Portal 9
2.1.5 Visual Studio IDE 9
2.2 ThiӃt bӏ sӱ dөng 10
2.2.1 PLC S7-1500 10
&+ѬѪ1* THӴC HIӊ1Ĉӄ TÀI 11
3.1 Xây dӵng OPC UA Server bҵng NodeJS 12
3.2 Xây dӵng OPC UA Client và API bҵng NodeJS 18
3.3 Lұp trình PLC S7-1500 26
3.3.1 Tәng quan 26
3.3.2 ThiӃt lұp S7-1500 làm OPC UA Client 27
3.3.3 &KѭѫQJWUuQKP{SKӓng tín hiӋu biӃn tҫn 30
3.4 Xây dӵng ӭng dөng thӵc tӃ ҧo 30
3.5 Xây dӵng ӭng dөng tҥo mã QR trên máy tính 36
3.6 Xây dӵng Web Browser 39
&+ѬѪ1* KӂT QUҦ VÀ KӂT LUҰN 44
4.1 KӃt quҧ thӵc hiӋQÿӅ tài 44
4.2 ĈӏQKKѭӟng phát triӇn và mӣ rӝQJÿӅ tài 48
TÀI LIӊU THAM KHҦO 49
Trang 9'$1+6È&++Î1+Ҧ1+
Hunh 2-1 Giao di͏n Unity3D 3
Hunh 2-2 Giao di͏n MongoDB Atlas 4
Hunh 2-3 Thông tin cͯa các Node trong OPC UA 6
Hunh 2-4 C̭u trúc b̫o m̵t cͯa OPC UA 8
Hunh 2-5 Giao di͏n Visual Studio 2017 10
Hunh 3-1 C̭u trúc h͏ th͙ng 11
Hunh 3-2 C̭u trúc Server 12
Hunh 3-3 C̭u trúc Client 18
Hunh 3-4 Các kh͙LWURQJFK˱˯QJWUuQK3/& 27
Hunh 3-5 Active OPC UA Client 27
Hunh 3-6 &jLÿ̿t Runtime License 28
Hunh 3-7 Thông s͙ k͇t n͙i vͣi OPC UA Server 28
Hunh 3-8 Thông s͙ b̫o m̵t c͑a OPC UA Client 28
Hunh 3-9 Thông s͙ m̿Fÿ͓nh cho DB cͯa OPC UA Client 29
Hunh 3-10&K˱˯QJWUuQKP{SK͗ng tín hi͏u bi͇n t̯n 30
Hunh 3-11 )DFHSODWHJLiPViWÿL͉u khi͋n cho bi͇n t̯n 32
Hunh 3-12 Giao di͏n k͇t n͙i OPC UA Server 32
Hunh 3-13 Giao di͏QFjLÿ̿t chu̱n b̫o m̵t cho k͇t n͙i vͣi OPC UA Server 33 Hunh 3-14 Giao di͏n ͱng dung t̩o mã QR trên máy tính 36
Hunh 3-15 Thông tin thi͇t b͓ O˱XWUͷ trên MongoDB Atlas 37
Hunh 3-16 C̭u trúc Web Browser 39
Hunh 3-17 Giao di͏n hi͋n th͓ ṱt c̫ tín hi͏u có trong OPC UA Server 39
Hunh 3-18 Giao di͏n GQJÿ͋ thêm tín hi͏u vào OPC UA Server 41
Hunh 3-19 Giao di͏n ÿăQJNtWK{QJWLQQJ˱ͥi dùng 43
Hunh 4-1 Ki͇n trúc h͏ th͙ng 44
Hunh 4-2 Các tín hi͏Xÿ˱ͫFÿ͕c,ghi giͷa Server-Client 45
Hunh 4-3 K͇t qu̫ ch̩\WUrQ$5DSSÿL͏n tho̩i Android 46
Hunh 4-4 Thông tin các tín hi͏u 46
Hunh 4-5 Thông tin các lo̩i thi͇t b͓ 46
Hunh 4-6'DQKViFKQJ˱ͥLGQJÿmÿăQJNt 47
Trang 10B̫ng 2-1 Các lo̩i Node trong OPC UA 6
B̫ng 2-2 C̭u trúc cͯa NodeID 7
B̫ng 2-3 Các thu͡c tính quan tr͕ng cͯa Node 7
B̫ng 3-1 Các kh͙LGQJWURQJFK˱˯QJWUuQK 26
B̫ng 3-2 Thông tin hi͋n th͓ YjÿL͉u khi͋n cͯDÿ͡QJF˯FK̩y b̹ng bi͇n t̯n 31
B̫ng 3-37K{QJWLQPm45O˱XWUrQ0RQJR'%$WODV 36
B̫ng 3-4 Thông tin tín cͯa tin hi͏u thêm vào OPC UA Server 41
Trang 11&È&7Ӯ9,ӂ77Ҳ7
OLE for Process Control Chuӛi các thông sӕ kӻ thuұWÿһc biӋWÿӇ WUDRÿәi dӳ liӋu trong tӵ ÿӝng hóa công nghiӋp
thӭc truyӅn thông công nghiӋp
Mӝt thiӃt bӏ ÿѭӧc sӱ dөng trong ngành công nghiӋp tӵ ÿӝQJKyDĈѭӧc lұp trình
ÿӇ ÿLӅu khiӇn máy tӵ ÿӝng
Acquisition
OPC UA
Trang 12&+ѬѪ1* *,Ӟ,7+,ӊ8
Phҫn giӟi thiӋu bao gӗm tính cҩp thiӃt, mөc tiêu và cҩu trúc các phҫn trong luұn YăQ&Kӫ ÿӅ cӫa luұQYăQOjWKLӃt kӃ mӝt ӭng dөQJÿLӅu khiӇn, giám sát, thu thұp dӳ liӋu cӫDÿӝQJFѫFhҥy bҵng biӃn tҫn dӵa trên nӅn tҧng OPC UA
1.1 7tQKFҩSWKLӃWFӫDÿӅWjL
HiӋn nay, vӟi sӵ phát triӇn cӫa khoa hӑc, kӻ thuұt và công nghӋ, viӋc áp dөng hӋ thӕng tӵ ÿӝng hóa vào quá trình sҧn xuҩt là cҫn thiӃt và cӵc kǤ quan trӑQJQyÿHPOҥi hiӋu quҧ trong viӋc sҧn xuҩWÿҧm bҧo chҩWOѭӧng sҧn phҭm, tiӃt kiӋm thӡi gian, nâng cao tӕLÿDKLӋu suҩt sҧn xuҩt
Bên cҥnh nhӳng lӧLtFKÿyӣ thӡLÿҥLQKѭKLӋn này, viӋFJLiPViWÿLӅu khiӇn
hӋ thӕng tӵ ÿӝng hóa tӯ [DFNJQJOjÿLӅXÿҥLÿDSKҫQQJѭӡLGQJTXDQWkPÿӃn Vӟi sӵ phát triӇn hiӋn tҥi, viӋc các ӭng dөng có thӇ chҥ\WUrQÿDQӅn tҧng, hay nói chính xác KѫQOjYLӋc lҩy dӳ liӋu tӯ nhiӅu nguӗn và hӛ trӧ dӉ dàng cho viӋc cung cҩp dӳ liӋu cho bên thӭ EDFNJQJOjPӕLTXDQWkPKjQJÿҫu cӫa giҧi pháp tӵ ÿӝng hóa Và OPC UA làm ÿѭӧFÿLӅXÿy23&8$WX\ÿmÿѭӧc biӃt và sӱ dөng rӝQJUmLQKѭQJӭng vӟi tӯng hãng lҥi có cách cҩu hình và thiӃt lұSNKiFQKDXJk\NKyNKăQFKRYLӋc mӣ rӝQJFNJQJQKѭW\biӃQ/~FQj\EjLWRiQÿһt ra cho viӋc tҥo dӵng mӝt OPC UA Server riêng biӋt, thuұn tiӋn cho viӋc mӣ rӝng và tùy biӃn cӫDQJѭӡLGQJÿѭӧFÿһt ra Mӝt vҩQÿӅ nӳa, viӋc giám sát, vұn hành tӯ [DOLQKÿӝng và không cҫn tiӃp xúc trӵc tiӃp vӟi thiӃt bӏ ÿmYjÿDQJÿѭӧc phát triӇn tӯ HMI, SCADA Ngày nay, vӟi sӵ phát triӇn cӫa công nghӋ, mӝt nӅn tҧng, ӭng dөng mӟL ÿm ÿѭӧc phát triӇn là ӭng dөng thӵc tӃ ҧR WăQJ Fѭӡng (Augmented reality ± $5 ÿmÿDQJYjVӁ trӣ WKjQKKѭӟng phát triӇn tiӃp theo
ĈӅ tài luұQYăQÿѭӧFÿһt ra vӟi mong muӕn giám sát trҥng tháiÿLӅu khiӇn thiӃt
bӏ cӫa nhà máy (ӣ ÿây lҩ\ÿӝQJFѫFKҥy bҵng biӃn tҫn làm ví dө), bên cҥQKÿy JL~SQJѭӡi dùng dӉ dàng thêm thiӃt bӏ cҫn giám sát vào hӋ thӕng
1.2 0өFWLrXFӫDOXұQYăQ
Tҥo ӭng dөng thӵc tӃ WăQJ Fѭӡng cho các thiӃt bӏ biӃn tҫn giúp cho viӋF ÿLӅu khiӇn và giám sát tình trҥng làm viӋc, bҧo trì, bҧRGѭӥng cӫa các thiӃt bӏ tҥi vӏ trí làm viӋc dӉ GjQJYjQKDQKFKyQJKѫQ%rQFҥQKÿyÿӇ thuұn tiӋn cho viӋc sӱ dөng hӋ thӕng,
Trang 13MөFWLrXNKiFOjÿӇ hiӇXVkXKѫQ vӅ viӋc cҩu hình truyӅn thông giӳa các thiӃt bӏ, các giao thӭc trong công nghiӋS QKѭ 23& 8$ Yj FiF FKѭѫQJ WUuQK QKѭ 7,$ 3RUWDO8QLW\'ÿѭӧc sӱ dөQJWURQJÿӅ WjLQj\YjTXDÿyKӑc cách sӱ dөng chúng tӕWKѫQ
Phҫn thӵc hiӋQÿӅ tài bao gӗm kӃ hoҥch thӵc hiӋn, kӃt quҧ ÿҥWÿѭӧc và các vҩn ÿӅQWURQJÿӅ tài
Trang 14cө dӵng hình (kӃt xuҩWÿӗ hӑa) cho các hình ҧnh 2D hoһc 3D, công cө vұt lý (tính toán
và phát triӇn va chҥm), âm thanh, mã nguӗn, hình ҧQKÿӝng, trí tuӋ nhân tҥo, phân luӗng, tҥo dòng dӳ liӋu xӱ lý, quҧn lý bӝ nhӟ, dӵng ҧQKÿӗ thӏ và kӃt nӕi mҥng
Mӝt trong các thӃ mҥnh cӫa Unity3D chính là khҧ QăQJKӛ trӧ gҫQQKѭWRjQEӝ các nӅn tҧng hiӋn có bao gӗm: Windows, Linux, Android, iOS, Blackberry 10, OS X trình duyӋt Web và cҧ Flash
2.1.2 MongoDB Atlas
MongoDB Atlas là dӏch vө FѫVӣ dӳ liӋXÿiPPk\WRjQFҫu cho các ӭng dөng hiӋQ ÿҥi TriӇn khai MongoDB ÿѭӧc quҧn lý hoàn toàn trên AWS, Google Cloud và Azure vӟLWtQKQăQJWӵ ÿӝng hóa tӕt nhҩWYjFiFSKѭѫQJSKiSÿmÿѭӧc chӭng minh nhҵm ÿҧm bҧo tính khҧ dөng, khҧ QăQJPӣ rӝng và tuân thӫ các tiêu chuҭn vӅ quyӅQULrQJWѭ
và bҧo mұt dӳ liӋu khҳt khe nhҩt
Hunh 2-1 Giao di͏n Unity3D
Trang 15x MongoDB là mӝt hӋ quҧn trӏ Fѫ Vӣ dӳ liӋu mã nguӗn mӣ, là CSDL thuӝc 1R6TOYjÿѭӧc hàng triӋXQJѭӡi sӱ dөng
x MongoDB là mӝWGDWDEDVHKѭӟng tài liӋu (document), các dӳ liӋXÿѭӧFOѭXtrӳ trong document kiӇu JSON thay vì dҥng bҧQJQKѭ&6'/TXDQKӋ nên truy vҩn sӁ rҩt nhanh
x Vӟi CSDL quan hӋ chúng ta có khái niӋm bҧQJFiFFѫVӣ dӳ liӋu quan hӋ QKѭ 0\64/ KD\ 64/ 6HUYHU Vӱ dөng các bҧQJ ÿӇ OѭX Gӳ liӋu thì vӟi MongoDB chúng ta sӁ dùng khái niӋm là collection thay vì bҧng
x So vӟi RDBMS thì trong MongoDB collection ӭng vӟi table, còn document
sӁ ӭng vӟi row , MongoDB sӁ dùng các document thay cho row trong RDBMS
x &iFFROOHFWLRQWURQJ0RQJR'%ÿѭӧc cҩu trúc rҩt linh hoҥt, cho phép các dӳ liӋXOѭXWUӳ không cҫn tuân theo mӝt cҩu trúc nhҩWÿӏnh
x 7K{QJWLQOLrQTXDQÿѭӧc OѭXWUӳ FQJQKDXÿӇ truy cұp truy vҩn nhanh thông qua ngôn ngӳ truy vҩn MongoDB
Hunh 2-2 Giao di͏n MongoDB Atlas
Trang 162.1.3 OPC UA
2.1.3.1 7әQJTXDQ
23&8$ÿѭӧc hiӇu là mӝt chuҭn truyӅn thông bұFFDRÿӝc lұSÿѭӧc phát triӇn bӣi hiӋp hӝL23&)RXQGDWLRQQKѭQJ23&8$KRjQWRjQNKiFWUѭӟc so vӟLÿһc tҧ ÿjQanh cӫa mình OPC DA Chính vì vұ\23&8$ÿѭӧc hiӇu bҵng cөm tӯ Open Platform Communication (OPC) Unified Architecture (UA) nhҵPWUiQKÿLFөm tӯ ÿmNK{QJKӧp thӡi OLE for Process Control cӫa OPC DA và nhӳQJÿһc tҧ khác
1KuQFKXQJ23&8$FyFiFѭXÿLӇm sau:
x OPC UA là chuҭn quӕc tӃ IEC 62541
x OPC UA Server và Client có thӇ ÿѭӧc lұp trình và chҥy trên nhiӅu hӋ ÿLӅu hành khác nhau
x OPC UA Server và Client có thӇ ÿѭӧc chҥy trên các thiӃt bӏ WUѭӡQJQKѭFҧm biӃn và chҩSKjQK1Kѭ Yұy dӳ liӋu tӯ cҧm biӃn, thiӃt bӏ chҩp hành có thӇ ÿѭӧFÿѭDWKҷng lên Cloud
x Có tính bҧo mұt cao, sӱ dөng nhiӅu lӟp bҧo mұt: Hӛ trӧ tính Fault tolerance
và Redundancy
X509 Certificate: Client phҧi có Certificate do Server cung cҩp thì mӟi truy cұSÿѭӧc dӳ liӋu;
Chӳ ký: mӛLWK{QJÿLӋp truyӅQÿLÿӅXÿѭӧc kèm theo chӳ ký, Server
sӁ ÿӕi chiӃu vӟi chӳ Nê ÿăQJ Nê WUѭӟc mà tӯ ÿy FKҩp nhұn/tӯ chӕi WK{QJÿLӋp
Mã hóa: mӛLWK{QJÿLӋp truyӅQÿLÿӅXÿѭӧc mã hóa
8VHU3DVVZRUGÿăQJQKұp truyӅn thӕQJÿӇ vào Server
QuyӅn truy cұSÿӃn tӯng point (tag): mӛi biӃQWUrQ6HUYHUÿӅu có lӵa chӑn cho phép chӍ ÿӑFÿӑc/ghi hay hoàn toàn không truy cұSÿѭӧc
x Hӛ trӧ kӻ thuұt Heartbeat hai chiӅu giӳD &OLHQW Yj 6HUYHU ÿӇ kiӇm tra tình trҥng hoҥWÿӝng vӟi nhau
x Hӛ trӧ chӭFQăQJDXWRPDWLFEDFNILOOLQJGӳ liӋu Khi kӃt nӕi giӳa Client và Server bӏ JLiQÿRҥn thì dӳ liӋu trong thӡLJLDQQj\ÿѭӧc buffer trên Server
Trang 17Ngay sau khi kӃt nӕLÿѭӧc khôi phөc thì dӳ liӋXEXIIHUQj\ÿѭӧc gӱi ngay cho Client
x Dӳ liӋX WUDR ÿәi giӳa Client và Server bao gӗm: BiӃQ Fѫ Eҧn (Elementary variable); Hàm (Method); Sӵ kiӋQ (YHQW 0mQJ $UUD\ Yj ĈӕL Wѭӧng (Datablock)
x Bao gӗP OX{Q +LVWRU\ $ODUPV (YHQW 7UѭӟF ÿk\ FiF ÿһc tҧ này tӗn tҥi riêng biӋt: OPC HDA, OPC A&E
x Hӛ trӧ OѭXÿӗ trҥng thái (State-machine)
x Tham chiӃu (Reference): ÿѭӧc sӱ dөQJÿӇ liên kӃt các node vӟi nhau Chúng có
thӇ ÿѭӧc truy cұp bҵng trình duyӋt và dӏch vө truy vҩn
2.1.3.3 &iFORҥL1RGHWURQJ23&8$
B̫ng 2-1 Các lo̩i Node trong OPC UA
1 ĈӕLWѭӧng (Objects) MӝWÿӕLWѭӧQJÿѭӧc sӱ dөng làm vùng chӭa hoһFWKѭ
mөFÿmÿӏnh dҥng cho các thҿSKѭѫQJWKӭc và sӵ kiӋn Thҿ (Tag) Thҿ ÿҥi diӋn cho dӳ liӋu cӫDFiFÿӕLWѭӧng hoһc thuӝc
tính cӫa mӝt node Gѭӟi dҥng các thuӝc tính
Hunh 2-3 Thông tin cͯa các Node trong OPC UA
Trang 182 3KѭѫQJWKӭc
(Method)
3KѭѫQJWKӭc là thành phҫn cӫDÿӕLWѭӧng và có thӇ có danh sách các tham sӕ ÿҫu vào hoһFÿҫu ra Các tham
sӕ ÿѭӧc mô tҧ thông qua các thuӝFWtQK[iFÿӏnh
3 HiӇn thӏ (View) Các chӃ ÿӝ [HPÿҥi diӋn cho mӝt phҫn cӫa không gian
ÿӏa chӍ Node ÿѭӧc sӱ dөQJOjPÿLӇm truy cұp và bӝ lӑc khi duyӋt
4 LoҥLÿӕLWѭӧng
(Object Types)
Các kiӇXÿӕLWѭӧng cung cҩp thông tin vӅ cҩu trúc hoһc các thành phҫn cӫDÿӕLWѭӧng
5 Loҥi thҿ (Tag Type) Các loҥi thҿ WKѭӡng mô tҧ các thuӝc tính hoһc kiӇu dӳ
liӋu nào có thӇ ÿѭӧc tìm thҩy trong mӝt phiên bҧn cӫa thҿ
6 KiӇu tham chiӃu
x Mӛi node trong namespace cӫD23&8$ÿѭӧF[iFÿӏnh duy nhҩt bӣi mӝt ID
x ,'GQJÿӇ phân biӋt vӟi nút cӫa các hӋ thӕng con khác nhau
Cҩu trúc cӫa NodeID ÿѭӧFÿӏQKQJKƭDWURQJEҧng 2:
B̫ng 2-2 C̭u trúc cͯa NodeID
Loҥi ID cӫa Node ( s:chuӛi (string); i:sӕ (Numeric);
g:GUID; b:OPAQUE
ID cӫa Node
2.1.3.5 &iFWKXӝFWtQKFӫD1RGH
Các thuӝc tính quan trӑng cӫD1RGHÿѭӧc mô tҧ QKѭEҧng 3
B̫ng 2-3 Các thu͡c tính quan tr͕ng cͯa Node
Namespace index Chዊ sዎ ¯ዛዘc gán cho node
Identifier Type Loi NodeID
Identifier 0ዋa chዊ node duy nhኸt bên trong namespace
Node Class Loïȋ¯ዎዛዘng, thዃ, loi dዟ liዉu)
Type Definition Tham chiዅu cho kiu dዟ liዉu mô t thዃ
Trang 19Write Mask Quyn chዊnh sዞa thuዒc tính nút (0= không, 1= có),
không cኹn sዠ xem xét cዚ×ዛዕi dùng
User Write Mask Quyn chዊnh sዞa thuዒc tính nút (0= không, 1= có),
không cኹn sዠ xem xét cዚዛዕi dùng hiዉn ti
Value Rank Loi giá trዋ cዚa thዃ (không có gì, vô ዛዔng, vector,
mng) Array Dimensions Sዎ À ዛዔc cዚa mng
Access Level Quyn truy cኼȋ¯ዌ ǡǡ¯ዌc/ghi) tዔi node
Minimum Sampling
Interval Khong thዕi gian lኸy mኻu nhው nhኸt cዚa thዃ ዖ phía server Historizing Thዕi gian cዚa thዃ có sዀn trên máy chዚ (có, không)
2.1.3.6 &ҩXWU~FEҧRPұW
Cҩu trúc bҧo mұt cӫD23&8$ÿѭӧc mô tҧ QKѭKuQK
x Quá trình xác thӵFQJѭӡLGQJÿѭӧc thӵc hiӋn tҥi Session (phiên làm viӋc)
x Sercue Channel (Kênh bҧo mұt) diӉn ra quá trình xác thӵc và bҧo mұt thông tin dӳ liӋu
x Transport Layer (Lӟp vұn chuyӇn) sӁ OjQѫLTXҧn lí viӋc truyӅn tài, thu nhұn
Hunh 2-4 C̭u trúc b̫o m̵t cͯa OPC UA
Trang 20 Chӭng chӍ (Certification): OPC UA sӱ dөng chӭng chӍ ;ĈӇ truy cұp vào Server, Client cҫn cung cҩp chӭng chӍ (dҥng pem, der) cho 6HUYHU Yj QJѭӧc lҥi Chӭng chӍ này phҧL ÿѭӧF ³WUXVWHG´ FӫD ÿӕi SKѭѫQJ
x ChӃ ÿӝ bҧo mұt (Security Mode)
None: Không bҧo mұt
Sign: Dùng chӳ kí
Sign&Encrypt: Dùng chӳ kí và mã hóa
x Chính sách bҧo mұt (Security Policy)
None: Không bҧo mұt
Basic128Rsa15: Sӱ dөng thuұt toán mã hóa
Basic256: Sӱ dөng thuұt toán mã hóa mӣ rӝng
2.1.4 Siemens TIA Portal
Siemens TIA Portal là mӝt phҫn mӅm mӟi nhҩWÿӃn tӯ Siemens TIA là tên viӃt tҳt cӫa Totally Integration Automatic TIA Portal tích hӧp lұp trình bӝ ÿLӅu khiӇn PLC, thiӃt bӏ giám sát HMI, hӋ thӕng giám sát tәng thӇ 6&$'$ ÿLӅu khiӇn chuyӇQ ÿӝng Drives, cҩu hình biӃn tҫn và cҧm biӃQÿӃn tӯ Siemens và cung cҩp môi WUѭӡng giҧ lұp thiӃt bӏ hӛ trӧ cho bӝ phұn phát triӇn hӋ thӕng tӵ ÿӝng hóa vào mӝWP{LWUѭӡng kӻ thuұt duy nhҩt
Giao diӋn cӫD7,$3RUWDOÿѭӧc thiӃt kӃ thân thiӋn vӟLQJѭӡi sӱ dөng, tích hӧp ÿҫ\ÿӫ các chӭFQăQJFҫn thiӃt cho mӝWQJѭӡi phát triӇn hӋ thӕng Phҫn mӅm TIA Portal
hӛ trӧ ÿҫ\ÿӫ các ngôn ngӳ lұSWUuQKFKR3/&FiFWKѭYLӋn truyӅn thông, các module ,2GULYH«WtFKKӧp chung vӟi PLC S7
2.1.5 Visual Studio IDE
Visual Studio là (IDE ± Integrated Development Environment) mӝt bӝ công cө phát triӇn phҫn mӅm do Microsoft phát triӇn
x Hӛ trӧ lұp trình trên nhiӅu ngôn ngӳ QKѭ&&&9LVXDO%DVLF+70/CSS, JavaScript Phiên bҧn Visual Studio 2019 có hә trӧ ngôn ngӳ Python
x Giao diӋn Visual Studio rҩt dӉ sӱ dөQJÿӕi vӟLQJѭӡi mӟi bҳWÿҫu
x Visual Studio hӛ trӧ phát triӇn ӭng dөQJWUrQPi\WtQKQKѭ0)&:LQGRZVForm, Universal App, ӭng dөQJÿLӋn thoҥi Windows Phone 8/8.1, Windows
10, Android(Xamarin), iOS và phát triӇn website Web Form, ASP.NET MVC và phát triӇn Microsoft Office
Trang 21x Visual Studio cho phép chúng ta tích hӧp nhӳng mӣ rӝng tӯ ErQQJRjLQKѭResharper (hә trӧ quҧn lý và viӃt mã nhanh cho các ngôn ngӳ thuӝc Net), hay viӋFFjLÿһWWKѭYLӋn nhanh chóng thông qua Nuget
2.2 7KLӃWEӏVӱGөQJ
2.2.1 PLC S7-1500
PLC (Programmable Logic Controller) là thiӃt bӏ ÿLӅu khiӇn có thӇ lұSWUuQKÿѭӧc thiӃt kӃ chuyên dùng trong công nghiӋSÿӇ ÿLӅu khiӇn các quá trình xӱ lý tӯ ÿѫQJLҧn ÿӃn phӭc tҥp
HiӋn nay trên thӏ WUѭӡng có rҩt dòng 3/&QKѭ6LHPHQV5RFNZHOO0LWVXELVKL6FKQHLGHU«Yӟi nhӳng lӧi thӃ riêng biӋt tӯ mӛLKmQJFNJQJQKѭVӵ nâng cҩp trên các GzQJ3/&ĈLӅXÿyPDQJOҥi tính linh hoҥWFNJQJQKѭQkQJFDRNKҧ QăQJ[ӱ OêÿLӅu khiӇn hӋ thӕng tӵ ÿӝng hóa
PLC S7-1500 là thӃ hӋ sau cӫa dòng PLC S7-ÿѭӧc cҧi tiӃn và nâng cҩp vӅ
bӝ nhӟ FNJQJQKѭWӕFÿӝ xӱ lý, tích hӧSÿLӅu khiӇn motion, các giao thӭc thông dөng trong nӅn công nghiӋp tiên tiӃQQKѭ3URILQHW23&8$«
Mô hình thӵc nghiӋm sӱ dөng PLC S7-1500 6ES7 513-1AL01-0AB0, hӛ trӧ giao
thӭc OPC UA Client
Hunh 2-5 Giao di͏n Visual Studio 2017
Trang 22 Server sӁ ÿѭӧc xây dӵQJWURQJÿӅ tài chҥy bҵng VPS
Giao tiӃp vӟL0RQJR'%$WODVÿӇ Ok\WK{QJWLQ1RGHWK{QJWLQQJѭӡi GQJYjOѭXWUӳ dӳ liӋu
x OPC UA Client
KӃt nӕi vӟi Server bҵng giao thӭc OPC UA
TҥRFiFÿѭӡng dүn API cho ӭng dөng thӵc tӃ ҧRWăQJFѭӡng thu thұp
và ghi dӳ liӋu vào Server
x Giao diӋn web
*LiPViWFiFQRGHÿDQJFyWURQJ6HUYHU
Thêm node vào Server thông qua MongoDB Atlas
7KrPGDQKViFKQJѭӡi dùng OPC UA
x S7-1500
Tҥo OPC UA Client
Giҧ lұp tín hiӋu cӫDÿӝQJFѫFKҥy bҵng biӃn tҫn
x Ӭng dөng thӵc tӃ ҧo
KӃt nӕi vӟi Server bҵQJFiFÿѭӡng dүn API
Thu thұp và ghi dӳ liӋXOrQ6HUYHUWK{QJTXDFiFÿѭӡng dүn API
x Phҫn mӅm tҥo mã QR
Hunh 3-1 C̭u trúc h͏ th͙ng
Trang 23%ѭӟc 1: Tҥo Server vӟLFiFWK{QJWLQFѫEҧQWURQJÿyVHUYHUVӁ chҩp nhұn mӟi
chӭng chӍ mà không cҫQTXDEѭӟc xác thӵc cӫa QJѭӡi dùng
const server = new OPCUAServer({
port: 26543 , // the port of the listening socket of the server
Trang 24%ѭӟc 2: KiӇPWUDWK{QJWLQQJѭӡi dùng (username và password) khi client kӃt
nӕi vӟi server không phҧi là anonymous
if (!anonymous) {
server.userManager.isValidUser = function (user, pass) {
for ( let i = 0 ; i < serverConfig[ 0 ].userList.length; i++) {
if (serverConfig[ 0 ].userList[i] !== null ) {
let uName = serverConfig[ 0 ].userList[i].user;
let uPass = serverConfig[ 0 ].userList[i].pass;
if (user === uName && pass === uPass) {
// we can now start the server
%ѭӟc 3.1Ĉӑc thông tin Node có trong MongoDb Atlas
'QJKjP³calldata´NӃt nӕLYjÿӑc các thông tin cӫa Node tӯ MongoDB Atlas
function constructAddressSpace(server) {
( async () => {
tagsList = await calldata( 'my-db' , 'Tags' );
+jP³calldata´
async function calldata(dbase, collection) {
const uri = "mongodb+srv://nhatquang:Mrdevil1402@cluster0.xxehe.mongodb net/" + dbase + "?retryWrites=true&w=majority" ;
const MongoClient = require( 'mongodb' ).MongoClient;
const client = await MongoClient.connect(uri, { useUnifiedTopology: true });
let tags = [];
try {
const db = client.db(dbase);
let coll = db.collection(collection);
let query = await coll.find({}).toArray();
query.forEach( function getTags(item, index) {
Trang 25const addressSpace = server.engine.addressSpace;
const namespace = addressSpace.getOwnNamespace();
// we create a new folder under RootFolder
const myDevice = namespace.addFolder( "ObjectsFolder" , {
browseName: "QV" , //"MyDevice"
});
%ѭӟc 3.3: Tҥo mҧng Node
for ( let i = 0 ; i < tagsList.length; i++) {
var tag = tagsList[i];
var vari = tag.value;
accessLevel: "CurrentRead | CurrentWrite" ,
userAccessLevel: "CurrentRead | CurrentWrite" ,
+jP³CastGetteU´GQJÿӇ kiӇm tra và cұp nhұt giá trӏ cӫa Node
function CastGetter(tag, vari) {
Trang 26}
}
+jP³&DVW6HWWHU´ GQJÿӇ ghi giá trӏ node vào OPC UA Server Ngoài ra còn GQJKjP³setdata´ÿӇ cұp nhұt giá trӏ hiӋn hӳu cӫDQRGHYjOѭXWUӯ lên MongoDB Atlas
async function setdata(nametag, id, value) {
const uri = "mongodb+srv://nhatquang:Mrdevil1402@cluster0.xxehe.mongodb net/my-db?retryWrites=true&w=majority" ;
const client = await MongoClient.connect(uri, { useUnifiedTopology: true });
let tags = [];
try {
const db = client.db( 'my-db' );
let coll = db.collection( 'SaveData' );
let coll1 = db.collection( 'Tags' );
let filter = { tagbrowserName: nametag };
let filter1 = { _id: id }
let update = await coll.insertOne({ "nameTag" : nametag, "value" : val
ue, "timestamp" : getTimestamp() });
let update1 = await coll1.findOneAndUpdate(filter1, { $set: { "value
" : value } }, { upsert: true });
ĈӇ có thӇ dӉ dàng truy xuҩt dӳ liӋu theo thӡLJLDQFKѭѫQJWUuQKVӁ lҩy thӡi gian
thӵc và ghi vào thuӝc tính ³WLPHVWDPS´cӫa tín hiӋu
Trang 27const collection = client.db( "my-db" ).collection(collec);
const changeStream = collection.watch(pipeline); //, {
console.log( "The file was saved!" );
}); console.log( "server is restarting" )
async function monitorUser(client, timeInMs = 60000 , pipeline = []) {
const collection = client.db( "serverConfig" ).collection( "Configuration" )
Trang 28x Hàm kӃt nӕi vӟi MongoDB Atlas và thӵc hiӋn viӋc giám sát
async function main() {
const uri1 = "mongodb+srv://nhatquang:Mrdevil1402@cluster0.xxehe.mongodb net/my-db?retryWrites=true&w=majority" ;
const client1 = new MongoClient(uri1, { useUnifiedTopology: true }); try {
// Connect to the MongoDB cluster
Trang 293.2 ;k\GӵQJ23&8$&OLHQWYj$3,EҵQJNodeJS
Cҩu trúc cӫD&OLHQWQKѭKuQK
9uFKѭѫQJWUuQKQj\GQJÿӇ khӣi tҥRFiFÿѭӡng dүQ$3,QrQGRÿyFiFKjPGѭӟLÿk\Wҥo ra nhҵm sӱ dөng nhiӅu lҫn
x Hàm tҥo Client sӁ ÿѭӧc dùng WURQJFiFTXiWUuQKÿӑc và ghi dӳ liӋu
function createClient(securityMode, securityPolicy) {
const client = opcua.OPCUAClient.create({
res.setHeader( 'Content-Type' , 'application/json' );
const client = createClient(sermode, serpolicy);
Hunh 3-3 C̭u trúc Client
Trang 30var anonymous
if (anony == "0" ) anonymous = true ;
else anonymous = false ;
if (!anonymous) {
for ( let i = 0 ; i < serverConfig[ 0 ].userList.length; i++) {
if (serverConfig[ 0 ].userList[i] !== null ) {
let uName = serverConfig[ 0 ].userList[i].user;
let uPass = serverConfig[ 0 ].userList[i].pass;
if (username === uName && password === uPass) {
client.connect(endpointurl, function (err) {