{"id":479779,"date":"2026-05-14T14:43:08","date_gmt":"2026-05-14T14:43:08","guid":{"rendered":"https:\/\/savepearlharbor.com\/?p=479779"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-29T21:00:00","slug":"","status":"publish","type":"post","link":"https:\/\/savepearlharbor.com\/?p=479779","title":{"rendered":"O-PAS \u0434\u043b\u044f \u043a\u043e\u0431\u043e\u0442\u043e\u0432: \u043a\u0430\u043a \u0443\u043f\u0440\u0430\u0432\u043b\u044f\u0442\u044c \u043c\u043e\u0434\u0443\u043b\u044c\u043d\u043e\u0439 \u043c\u0430\u0441\u0442\u0435\u0440\u0441\u043a\u043e\u0439 \u0431\u0435\u0437 \u043f\u0440\u0438\u0432\u044f\u0437\u043a\u0438 \u043a \u0432\u0435\u043d\u0434\u043e\u0440\u0443"},"content":{"rendered":"<div xmlns=\"http:\/\/www.w3.org\/1999\/xhtml\">\n<p><em>\u041f\u0440\u043e\u0434\u043e\u043b\u0436\u0435\u043d\u0438\u0435 <\/em><a href=\"https:\/\/habr.com\/ru\/articles\/1035252\/\" rel=\"noopener noreferrer nofollow\"><em>\u0441\u0442\u0430\u0442\u044c\u0438<\/em><\/a><em> \u043e \u043c\u043e\u0434\u0443\u043b\u044c\u043d\u044b\u0445 \u043a\u043e\u0431\u043e\u0442-\u044f\u0447\u0435\u0439\u043a\u0430\u0445 \u0434\u043b\u044f \u0433\u0438\u0431\u043a\u043e\u0433\u043e \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0441\u0442\u0432\u0430<\/em><\/p>\n<p>\u0412 \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0435\u0439 \u0441\u0442\u0430\u0442\u044c\u0435 \u043c\u044b \u0440\u0430\u0437\u043e\u0431\u0440\u0430\u043b\u0438, \u043a\u0430\u043a \u043a\u043e\u0431\u043e\u0442\u044b \u0438 \u043c\u043e\u0434\u0443\u043b\u044c\u043d\u044b\u0435 \u0440\u0430\u0431\u043e\u0447\u0438\u0435 \u044f\u0447\u0435\u0439\u043a\u0438 \u0440\u0435\u0448\u0430\u044e\u0442 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0443 high-mix, low-volume \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0441\u0442\u0432\u0430. \u0412 \u0447\u0430\u0441\u0442\u043d\u043e\u0441\u0442\u0438 \u0433\u043e\u0432\u043e\u0440\u0438\u043b\u043e\u0441\u044c \u043e \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u0435 O-PAS. \u041f\u043e\u043f\u0440\u043e\u0431\u0443\u0435\u043c \u0440\u0430\u0441\u043a\u0440\u044b\u0442\u044c \u043f\u043e\u0434\u0440\u043e\u0431\u043d\u0435\u0435 \u044d\u0442\u0443 \u043a\u0440\u0438\u0442\u0438\u0447\u0435\u0441\u043a\u0443\u044e \u0447\u0430\u0441\u0442\u044c: <strong>\u043a\u0430\u043a \u0443\u043f\u0440\u0430\u0432\u043b\u044f\u0442\u044c HMLV \u0441 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u043d\u043e\u0439 \u0441\u0442\u043e\u0440\u043e\u043d\u044b?<\/strong><\/p>\n<p>\u0422\u0438\u043f\u0438\u0447\u043d\u043e\u0435 \u043f\u0440\u0435\u0434\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u0438\u043d\u0442\u0435\u0433\u0440\u0430\u0442\u043e\u0440\u043e\u0432: \u041f\u041b\u041a \u043e\u0442 Siemens, \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0440\u0443\u0439\u0442\u0435 \u043d\u0430 Structured Text,  OPC UA middleware \u0434\u043b\u044f \u0441\u0432\u044f\u0437\u0438 \u0441 \u043a\u043e\u0431\u043e\u0442\u043e\u043c. \u0413\u043e\u0442\u043e\u0432\u043e.<\/p>\n<p>\u041f\u0440\u043e\u0431\u043b\u0435\u043c\u0430 \u0432 \u0442\u043e\u043c, \u0447\u0442\u043e \u0432 HMLV \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0441\u0442\u0432\u0435 \u043f\u0435\u0440\u0435\u043d\u0430\u043b\u0430\u0434\u043a\u0430 \u0434\u043e\u043b\u0436\u043d\u0430 \u0431\u044b\u0442\u044c <strong>\u043c\u0438\u043d\u0443\u0442\u043d\u043e\u0439<\/strong>, \u0430 \u043d\u0435 \u0447\u0430\u0441\u043e\u0432\u043e\u0439. \u0418 \u0441\u0435\u0433\u043e\u0434\u043d\u044f \u043b\u044e\u0431\u0430\u044f \u043f\u0435\u0440\u0435\u043d\u0430\u043b\u0430\u0434\u043a\u0430 \u0442\u0440\u0435\u0431\u0443\u0435\u0442 \u043f\u0435\u0440\u0435\u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0432 5\u20136 \u0440\u0430\u0437\u043d\u044b\u0445 \u0441\u0438\u0441\u0442\u0435\u043c\u0430\u0445 \u043d\u0430 \u0440\u0430\u0437\u043d\u044b\u0445 \u044f\u0437\u044b\u043a\u0430\u0445.<\/p>\n<p><em>\u0420\u0435\u043a\u043b\u0430\u043c\u0430: \u0432 \u0434\u0435\u043a\u0430\u0431\u0440\u0435 2025 \u0433\u043e\u0434\u0430 \u0437\u0430\u043f\u0443\u0449\u0435\u043d \u043f\u0440\u043e\u0435\u043a\u0442 \u0441 <\/em><a href=\"https:\/\/github.com\/rtsoft-sdc\/openFB\" rel=\"noopener noreferrer nofollow\"><em>\u043e\u0442\u043a\u0440\u044b\u0442\u044b\u043c \u0438\u0441\u0445\u043e\u0434\u043d\u044b\u043c \u043a\u043e\u0434\u043e\u043c<\/em><\/a><em>: <\/em><strong><em>OpenFB<\/em><\/strong><em> \u2014 \u043e\u0442\u043a\u0440\u044b\u0442\u044b\u0439 runtime \u0432 \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u0435 IEC 61499 \u0434\u043b\u044f \u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u044b Python. \u0426\u0435\u043b\u0438 \u043f\u0440\u043e\u0435\u043a\u0442\u0430 \u0448\u0438\u0440\u043e\u043a\u0438\u0435, \u043e\u0442 \u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u0438 \u043f\u0440\u043e\u0442\u043e\u0442\u0438\u043f\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f O-PAS \u0442\u0435\u0445\u043d\u043e\u043b\u043e\u0433\u0438\u0439 \u0434\u043e \u043f\u0440\u043e\u043c\u044b\u0448\u043b\u0435\u043d\u043d\u043e\u0439 \u0438\u043d\u0442\u0435\u0433\u0440\u0430\u0446\u0438\u0438 \u0432 \u0440\u0430\u043c\u043a\u0430\u0445 \u0441\u043f\u0435\u0446\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u0439 \u041e\u0410\u0421\u0423\u0422\u041f.<\/em><\/p>\n<h3>\u041f\u0440\u043e\u0431\u043b\u0435\u043c\u0430: \u043b\u043e\u0441\u043a\u0443\u0442\u043d\u0430\u044f \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u0430<\/h3>\n<p>\u0414\u0430\u0432\u0430\u0439\u0442\u0435 \u0447\u0435\u0441\u0442\u043d\u043e \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u043d\u0430 \u0442\u0438\u043f\u0438\u0447\u043d\u0443\u044e \u0441\u0431\u043e\u0440\u043a\u0443 \u0433\u0438\u0431\u043a\u043e\u0439 \u043a\u043e\u0431\u043e\u0442-\u043b\u0438\u043d\u0438\u0438 \u0441\u0435\u0433\u043e\u0434\u043d\u044f:<\/p>\n<p><strong>\u041e\u0431\u043e\u0440\u0443\u0434\u043e\u0432\u0430\u043d\u0438\u0435<\/strong>:<\/p>\n<ul>\n<li>\n<p>\u041a\u043e\u0431\u043e\u0442 Universal Robots (UR) \u2014 \u0443\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043d\u0430 PolyScope<\/p>\n<\/li>\n<li>\n<p>\u0421\u0438\u0441\u0442\u0435\u043c\u0430 \u0432\u0438\u0434\u0435\u043d\u0438\u044f \u0434\u043b\u044f \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u044f \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0430 \u2014 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0439 Linux-\u0443\u0437\u0435\u043b \u0441 OpenCV<\/p>\n<\/li>\n<li>\n<p>\u0417\u0430\u0445\u0432\u0430\u0442 (OnRobot) \u0441 \u044d\u043b\u0435\u043a\u0442\u0440\u043e\u043d\u0438\u043a\u043e\u0439 \u2014 \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u0435 API<\/p>\n<\/li>\n<li>\n<p>\u041a\u043e\u043d\u0432\u0435\u0439\u0435\u0440 \u2014 \u0443\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u0442\u0441\u044f Siemens S7-1200 \u043d\u0430 ST (Structured Text)<\/p>\n<\/li>\n<li>\n<p>OPC UA middleware \u2014 \u0441\u0432\u043e\u0439 \u0441\u043b\u043e\u0439 \u0430\u0431\u0441\u0442\u0440\u0430\u043a\u0446\u0438\u0438<\/p>\n<\/li>\n<\/ul>\n<p><strong>\u041b\u044e\u0434\u0438<\/strong>:<\/p>\n<ul>\n<li>\n<p>\u0421\u043f\u0435\u0446\u0438\u0430\u043b\u0438\u0441\u0442 \u043f\u043e UR \u0434\u043b\u044f \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0442\u0440\u0430\u0435\u043a\u0442\u043e\u0440\u0438\u0439<\/p>\n<\/li>\n<li>\n<p>\u0421\u043f\u0435\u0446\u0438\u0430\u043b\u0438\u0441\u0442 \u043f\u043e Python\/OpenCV \u0434\u043b\u044f \u0432\u0438\u0434\u0435\u043d\u0438\u044f<\/p>\n<\/li>\n<li>\n<p>\u0421\u043f\u0435\u0446\u0438\u0430\u043b\u0438\u0441\u0442 \u043f\u043e Siemens PLC \u0434\u043b\u044f \u043b\u043e\u0433\u0438\u043a\u0438<\/p>\n<\/li>\n<li>\n<p>\u0418\u043d\u0442\u0435\u0433\u0440\u0430\u0442\u043e\u0440 \u0434\u043b\u044f \u0441\u0432\u044f\u0437\u0438 \u0432\u0441\u0435\u0433\u043e \u043a\u0443\u0447\u0435\u0439<\/p>\n<\/li>\n<\/ul>\n<p><strong>\u0412\u0440\u0435\u043c\u044f \u043d\u0430 \u0438\u043d\u0442\u0435\u0433\u0440\u0430\u0446\u0438\u044e<\/strong>: 80\u2013120 \u0447\u0430\u0441\u043e\u0432.<\/p>\n<p><strong>\u0412\u0440\u0435\u043c\u044f \u043d\u0430 \u043f\u0435\u0440\u0435\u043d\u0430\u043b\u0430\u0434\u043a\u0443<\/strong> (\u043a\u043e\u0433\u0434\u0430 \u043d\u0443\u0436\u043d\u043e \u043f\u0435\u0440\u0435\u0439\u0442\u0438 \u0441 Product A \u043d\u0430 Product B):<\/p>\n<ul>\n<li>\n<p>\u0418\u0437\u043c\u0435\u043d\u0438\u0442\u044c \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0443 UR: 30 \u043c\u0438\u043d<\/p>\n<\/li>\n<li>\n<p>\u041e\u0431\u043d\u043e\u0432\u0438\u0442\u044c \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b \u0432 S7: 20 \u043c\u0438\u043d<\/p>\n<\/li>\n<li>\n<p>\u041f\u0435\u0440\u0435\u0434\u0435\u043b\u0430\u0442\u044c \u0432\u0438\u0434\u0435\u043d\u0438\u0435 (\u043d\u043e\u0432\u0430\u044f \u043c\u043e\u0434\u0435\u043b\u044c, \u043d\u043e\u0432\u044b\u0435 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b): 20 \u043c\u0438\u043d<\/p>\n<\/li>\n<li>\n<p>\u0418\u043d\u0442\u0435\u0433\u0440\u0430\u0446\u0438\u043e\u043d\u043d\u043e\u0435 \u0442\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435: 30 \u043c\u0438\u043d<\/p>\n<\/li>\n<li>\n<p><strong>\u0418\u0442\u043e\u0433\u043e: ~2 \u0447\u0430\u0441\u0430<\/strong><\/p>\n<\/li>\n<\/ul>\n<p>\u0414\u043b\u044f HMLV, \u0433\u0434\u0435 \u043f\u0435\u0440\u0435\u043d\u0430\u043b\u0430\u0434\u043a\u0430 \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442 5\u201310 \u0440\u0430\u0437 \u0432 \u0434\u0435\u043d\u044c, \u044d\u0442\u043e \u043e\u0437\u043d\u0430\u0447\u0430\u0435\u0442, \u0447\u0442\u043e <strong>30\u201350% \u0440\u0430\u0431\u043e\u0447\u0435\u0433\u043e \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u043b\u0438\u043d\u0438\u044f \u0441\u0442\u043e\u0438\u0442 \u043d\u0430 \u043f\u0435\u0440\u0435\u043d\u0430\u043b\u0430\u0434\u043a\u0435<\/strong>.<\/p>\n<p>\u0418 \u0432\u043e\u0442 \u0432 \u044d\u0442\u043e\u0442 \u043c\u043e\u043c\u0435\u043d\u0442 \u043f\u043e\u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f O-PAS.<\/p>\n<h3>\u0420\u0435\u0448\u0435\u043d\u0438\u0435: \u0435\u0434\u0438\u043d\u0430\u044f \u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u0430 \u043d\u0430 IEC 61499<\/h3>\n<p>\u0418\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c \u043d\u0430 \u043b\u0438\u043d\u0438\u0438 \u041f\u041b\u041a \u0441\u043e \u0441\u0440\u0435\u0434\u043e\u0439 \u0438\u0441\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f (runtime) \u0434\u043b\u044f \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u044b\u0445 \u0431\u043b\u043e\u043a\u043e\u0432 \u0432 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0438\u0438 \u0441\u043e \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043e\u043c <strong>IEC 61499<\/strong>. \u0427\u0442\u043e\u0431\u044b \u043f\u043e\u043d\u044f\u0442\u044c, \u043f\u043e\u0447\u0435\u043c\u0443 \u044d\u0442\u043e \u0432\u0430\u0436\u043d\u043e, \u043d\u0443\u0436\u043d\u043e \u0441\u043d\u0430\u0447\u0430\u043b\u0430 \u0440\u0430\u0437\u043e\u0431\u0440\u0430\u0442\u044c\u0441\u044f \u0441 \u043e\u0442\u043b\u0438\u0447\u0438\u044f\u043c\u0438:<\/p>\n<h4>IEC 61131 vs IEC 61499<\/h4>\n<div>\n<div class=\"table\">\n<table>\n<tbody>\n<tr>\n<th>\n<p align=\"left\">\u041f\u0430\u0440\u0430\u043c\u0435\u0442\u0440<\/p>\n<\/th>\n<th>\n<p align=\"left\">IEC 61131 (\u041f\u041b\u041a)<\/p>\n<\/th>\n<th>\n<p align=\"left\">IEC 61499<\/p>\n<\/th>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\"><strong>\u041c\u043e\u0434\u0435\u043b\u044c \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f<\/strong><\/p>\n<\/td>\n<td>\n<p align=\"left\">\u0426\u0438\u043a\u043b\u0438\u0447\u0435\u0441\u043a\u0430\u044f (scan cycle)<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u0421\u043e\u0431\u044b\u0442\u0438\u0439\u043d\u043e-\u043e\u0440\u0438\u0435\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u0430\u044f<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\"><strong>\u041a\u0430\u043a?<\/strong><\/p>\n<\/td>\n<td>\n<p align=\"left\">\u041a\u0430\u0436\u0434\u044b\u0439 \u0446\u0438\u043a\u043b: \u043f\u0440\u043e\u0447\u0438\u0442\u0430\u0442\u044c \u0432\u0445\u043e\u0434\u044b \u2192 \u0432\u044b\u043f\u043e\u043b\u043d\u0438\u0442\u044c \u043b\u043e\u0433\u0438\u043a\u0443 \u2192 \u0437\u0430\u043f\u0438\u0441\u0430\u0442\u044c \u0432\u044b\u0445\u043e\u0434\u044b<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u0411\u043b\u043e\u043a\u0438 \u0441\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u044e\u0442 \u043f\u0440\u0438 \u0441\u043e\u0431\u044b\u0442\u0438\u044f\u0445, \u0441\u0438\u043d\u0445\u0440\u043e\u043d\u0438\u0437\u0438\u0440\u0443\u044e\u0442\u0441\u044f \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\"><strong>\u0420\u0430\u0441\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u0435<\/strong><\/p>\n<\/td>\n<td>\n<p align=\"left\">\u041e\u0434\u043d\u0430 \u0431\u043e\u043b\u044c\u0448\u0430\u044f \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0430 \u0432 \u043e\u0434\u043d\u043e\u043c \u041f\u041b\u041a<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u0424\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u044b\u0435 \u0431\u043b\u043e\u043a\u0438 \u043c\u043e\u0433\u0443\u0442 \u0431\u044b\u0442\u044c \u043d\u0430 \u0440\u0430\u0437\u043d\u044b\u0445 \u0443\u0437\u043b\u0430\u0445<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\"><strong>\u041f\u0440\u0438\u043c\u0435\u0440 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f<\/strong><\/p>\n<\/td>\n<td>\n<p align=\"left\">\u041a\u043b\u0430\u0441\u0441\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u043a\u043e\u043d\u0432\u0435\u0439\u0435\u0440, \u0436\u0451\u0441\u0442\u043a\u0438\u0439 \u0446\u0438\u043a\u043b<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u0413\u0438\u0431\u043a\u043e\u0435 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0441\u0442\u0432\u043e, \u0440\u0435\u0430\u043a\u0442\u0438\u0432\u043d\u044b\u0435 \u0441\u0438\u0441\u0442\u0435\u043c\u044b<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\"><strong>\u041c\u0430\u0441\u0448\u0442\u0430\u0431\u0438\u0440\u0443\u0435\u043c\u043e\u0441\u0442\u044c<\/strong><\/p>\n<\/td>\n<td>\n<p align=\"left\">\u0414\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0435\u0449\u0451 \u041f\u041b\u041a \u0441\u043b\u043e\u0436\u043d\u043e<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u0414\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0435\u0449\u0451 \u0443\u0437\u0435\u043b \u043f\u0440\u043e\u0441\u0442\u043e<\/p>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<p>\u0414\u043b\u044f \u043a\u043e\u0431\u043e\u0442\u043e\u0432 \u044d\u0442\u043e \u043a\u0440\u0438\u0442\u0438\u0447\u043d\u043e:<\/p>\n<p><strong>\u0421 IEC 61131<\/strong> (\u0446\u0438\u043a\u043b\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u043f\u043e\u0434\u0445\u043e\u0434):<\/p>\n<ul>\n<li>\n<p>S7 \u041f\u041b\u041a \u043a\u0430\u0436\u0434\u044b\u0435 100 \u043c\u0441 \u043e\u043f\u0440\u0430\u0448\u0438\u0432\u0430\u0435\u0442 \u0434\u0430\u0442\u0447\u0438\u043a \u0434\u0430\u043b\u044c\u043d\u043e\u0441\u0442\u0438 (\u201c\u0434\u0435\u0442\u0435\u043b\u044c \u043f\u0440\u0438\u0431\u044b\u043b\u0430?\u201d)<\/p>\n<\/li>\n<li>\n<p>\u041a\u043e\u0431\u043e\u0442 \u043a\u0430\u0436\u0434\u044b\u0435 50 \u043c\u0441 \u043e\u043f\u0440\u0430\u0448\u0438\u0432\u0430\u0435\u0442 S7 (\u201c\u0435\u0441\u0442\u044c \u043a\u043e\u043c\u0430\u043d\u0434\u0430?\u201d)<\/p>\n<\/li>\n<li>\n<p>\u0418\u0445 \u043d\u0443\u0436\u043d\u043e \u0441\u0438\u043d\u0445\u0440\u043e\u043d\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u0442\u044c, \u0438\u043d\u0430\u0447\u0435 \u043f\u0440\u043e\u043f\u0443\u0441\u0442\u0438\u0448\u044c \u0441\u043e\u0431\u044b\u0442\u0438\u0435 \u0438\u043b\u0438 \u0431\u0443\u0434\u0435\u0442 jitter<\/p>\n<\/li>\n<\/ul>\n<p><strong>\u0421 IEC 61499<\/strong> (\u0441\u043e\u0431\u044b\u0442\u0438\u0439\u043d\u044b\u0439 \u043f\u043e\u0434\u0445\u043e\u0434):<\/p>\n<ul>\n<li>\n<p>\u0414\u0430\u0442\u0447\u0438\u043a \u0441\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0435\u0442 \u2192 \u0441\u0440\u0430\u0437\u0443 \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u0442 \u0441\u043e\u0431\u044b\u0442\u0438\u0435<\/p>\n<\/li>\n<li>\n<p>\u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u044b\u0439 \u0431\u043b\u043e\u043a \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u0442 \u0441\u043e\u0431\u044b\u0442\u0438\u0435 \u2192 \u0442\u0443\u0442 \u0436\u0435 \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u0442 \u043a\u043e\u043c\u0430\u043d\u0434\u0443 \u0440\u043e\u0431\u043e\u0442\u0443<\/p>\n<\/li>\n<li>\n<p>\u0423\u043c\u0435\u043d\u044c\u0448\u0435\u043d\u043d\u044b\u0439 jitter, \u0440\u0435\u0430\u043a\u0442\u0438\u0432\u043d\u0430\u044f \u043b\u043e\u0433\u0438\u043a\u0430<\/p>\n<\/li>\n<\/ul>\n<h4>\u0427\u0442\u043e \u0434\u0430\u0435\u0442 OpenFB<\/h4>\n<p>OpenFB \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u043f\u0438\u0441\u0430\u0442\u044c \u043b\u043e\u0433\u0438\u043a\u0443 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u043e\u0433\u043e \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u0431\u043b\u043e\u043a\u0430 \u0432 \u043e\u0431\u0449\u0435\u043c 61499 \u043f\u0440\u043e\u0435\u043a\u0442\u0435 \u043d\u0430 Python \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044f \u0432\u0441\u044e \u0435\u0433\u043e \u044d\u043a\u043e\u0441\u0438\u0441\u0442\u0435\u043c\u0443:<\/p>\n<pre><code class=\"python\">class PickAndPlaceLogic(fb.FunctionBlock):    \"\"\"\u041b\u043e\u0433\u0438\u043a\u0430 \u0437\u0430\u0445\u0432\u0430\u0442\u0430 \u0434\u0435\u0442\u0430\u043b\u0438 \u0441 \u0432\u0438\u0434\u0435\u043d\u0438\u0435\u043c\"\"\"        def on_part_detected_event(self, detection_result):        # \u0412\u0438\u0434\u0435\u043d\u0438\u0435 \u043e\u0431\u043d\u0430\u0440\u0443\u0436\u0438\u043b\u043e \u0434\u0435\u0442\u0430\u043b\u044c \u0441 \u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442\u0430\u043c\u0438        part_coords = detection_result.coordinates        part_orientation = detection_result.rotation                # \u041e\u0442\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u043c \u043a\u043e\u043c\u0430\u043d\u0434\u0443 \u0440\u043e\u0431\u043e\u0442\u0443 \u0447\u0435\u0440\u0435\u0437 OPC UA        self.robot_client.move_to_and_grasp(            position=part_coords,            orientation=part_orientation,            force=5  # \u043d\u044c\u044e\u0442\u043e\u043d\u044b        )        # \u041f\u0443\u0431\u043b\u0438\u043a\u0443\u0435\u043c \u0441\u043e\u0431\u044b\u0442\u0438\u0435 \u0434\u043b\u044f \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0433\u043e \u0431\u043b\u043e\u043a\u0430        self.output(\"part_grasped\")class QualityInspectionLogic(fb.FunctionBlock):    \"\"\"\u041a\u043e\u043d\u0442\u0440\u043e\u043b\u044c \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0430 \u043f\u043e\u0441\u043b\u0435 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0438\"\"\"        def on_processing_complete(self, result_image):        # ML-\u043c\u043e\u0434\u0435\u043b\u044c \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u0442 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u043e        quality_score = self.quality_model.predict(result_image)                if quality_score &gt; self.threshold:            self.output(\"part_ok\")        else:            self.output(\"part_defect\")            self.publish_metrics({                \"defect_type\": self.classifier.classify(result_image),                \"timestamp\": time.time()            })<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:87px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p><strong>\u041a\u0430\u0436\u0434\u044b\u0439 \u0431\u043b\u043e\u043a:<\/strong><\/p>\n<ul>\n<li>\n<p>\u041c\u043e\u0436\u0435\u0442 \u0440\u0430\u0437\u043c\u0435\u0449\u0430\u0442\u044c\u0441\u044f \u043d\u0430 <strong>\u043e\u0442\u0434\u0435\u043b\u044c\u043d\u043e\u0439 \u043f\u043e\u0434\u0445\u043e\u0434\u044f\u0449\u0435\u0439 \u043c\u0430\u0448\u0438\u043d\u0435<\/strong> (Raspberry Pi \u0434\u043b\u044f \u043c\u0430\u0448\u0438\u043d\u043d\u043e\u0433\u043e \u0437\u0440\u0435\u043d\u0438\u044f, \u041f\u0440\u043e\u043c\u041f\u041a \u0438\u043b\u0438 Edge \u0441\u0435\u0440\u0432\u0435\u0440 \u0434\u043b\u044f ML, \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440 \u043a\u043e\u0431\u043e\u0442\u0430 \u0441 \u043f\u043e\u043b\u0435\u0432\u043e\u0439 \u0448\u0438\u043d\u043e\u0439)<\/p>\n<\/li>\n<li>\n<p>\u041e\u0431\u0449\u0435\u043d\u0438\u0435 \u0447\u0435\u0440\u0435\u0437 <strong>\u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u044b\u0435 \u043f\u0440\u043e\u0442\u043e\u043a\u043e\u043b\u044b<\/strong> (OPC UA, MQTT)<\/p>\n<\/li>\n<li>\n<p><strong>\u041d\u0435 \u0437\u0430\u0432\u0438\u0441\u0438\u0442<\/strong> \u043e\u0442 \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u043e\u0433\u043e \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044f \u043e\u0431\u043e\u0440\u0443\u0434\u043e\u0432\u0430\u043d\u0438\u044f<\/p>\n<\/li>\n<li>\n<p>\u041c\u043e\u0436\u0435\u0442 \u0432\u043a\u043b\u044e\u0447\u0430\u0442\u044c <strong>Python \u043a\u043e\u0434, ML-\u043c\u043e\u0434\u0435\u043b\u0438, \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0443 \u043e\u0431\u0440\u0430\u0437\u043e\u0432<\/strong> \u2014 \u0432\u0441\u0451 \u0432 \u043e\u0434\u043d\u043e\u043c \u043f\u0440\u043e\u0435\u043a\u0442\u0435<\/p>\n<\/li>\n<\/ul>\n<h3>\u041f\u0440\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u043a\u0435\u0439\u0441: PCBA \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0441\u0442\u0432\u043e<\/h3>\n<p>\u0412\u0435\u0440\u043d\u0451\u043c\u0441\u044f \u043a \u043f\u0440\u0438\u043c\u0435\u0440\u0443 \u0438\u0437 \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0435\u0439 \u0441\u0442\u0430\u0442\u044c\u0438: \u0441\u0431\u043e\u0440\u043a\u0430 \u044d\u043b\u0435\u043a\u0442\u0440\u043e\u043d\u043d\u044b\u0445 \u043f\u043b\u0430\u0442 (PCBA).<\/p>\n<p><strong>\u041f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b<\/strong>:<\/p>\n<ul>\n<li>\n<p>3\u20135 \u0440\u0430\u0437\u043d\u044b\u0445 \u0442\u0438\u043f\u043e\u0432 \u043f\u043b\u0430\u0442 \u0432 \u0434\u0435\u043d\u044c<\/p>\n<\/li>\n<li>\n<p>\u041f\u0435\u0440\u0435\u043d\u0430\u043b\u0430\u0434\u043a\u0430 \u043c\u0435\u0436\u0434\u0443 \u0442\u0438\u043f\u0430\u043c\u0438 5\u201310 \u0440\u0430\u0437 \u0432 \u0434\u0435\u043d\u044c<\/p>\n<\/li>\n<li>\n<p>\u0422\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f 98%+ \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u043e (\u043a\u043e\u043d\u0442\u0440\u043e\u043b\u044c \u0434\u0435\u0444\u0435\u043a\u0442\u043e\u0432)<\/p>\n<\/li>\n<li>\n<p>\u041a\u043e\u0431\u043e\u0442 + CV \u0434\u043b\u044f \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u044f<\/p>\n<\/li>\n<\/ul>\n<h4>\u0422\u0435\u043a\u0443\u0449\u0438\u0439 \u043f\u043e\u0434\u0445\u043e\u0434 :<\/h4>\n<pre><code>\u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510\u2502 UR \u043a\u043ebot        \u2502  PolyScope \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435\u2502 PolyScope 5     \u2502  (\u043f\u043e 30 \u043c\u0438\u043d \u043d\u0430 \u043f\u0435\u0440\u0435\u043d\u0430\u043b\u0430\u0434\u043a\u0443)\u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518        \u2191\u2193\u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510\u2502 Siemens S7      \u2502  TIA Portal \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435\u2502 S7-1200         \u2502  (\u043f\u043e 20 \u043c\u0438\u043d)\u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518        \u2191\u2193\u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510\u2502 \u0412\u0438\u0434\u0435\u043d\u0438\u0435 (Linux) \u2502  Python \u043a\u043e\u0434 \u043f\u0435\u0440\u0435\u0434\u0435\u043b\u0430\u0442\u044c\u2502 Basler camera   \u2502  (\u043f\u043e 20 \u043c\u0438\u043d + \u0442\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435)\u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518        \u2191\u2193   OPC UA binding   (20 \u043c\u0438\u043d \u043e\u0442\u043b\u0430\u0434\u043a\u0438)   \u0418\u0422\u041e\u0413\u041e \u041f\u0415\u0420\u0415\u041d\u0410\u041b\u0410\u0414\u041a\u0410: ~90 \u043c\u0438\u043d<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<h4>\u041f\u043e\u0434\u0445\u043e\u0434 \u0441 O-PAS:<\/h4>\n<pre><code>\u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510\u2502  O-PAS                 \u2502\u2502  (\u0435\u0434\u0438\u043d\u044b\u0439 \u043f\u0440\u043e\u0435\u043a\u0442 61499)          \u2502\u2502                                 \u2502\u2502  \u2022 Robot \u0431\u043b\u043e\u043a (OPC UA)          \u2502\u2502  \u2022 Vision \u0431\u043b\u043e\u043a (Python + ML)    \u2502\u2502  \u2022 Logic \u0431\u043b\u043e\u043a (IEC 61499)       \u2502\u2502  \u2022 Quality \u0431\u043b\u043e\u043a (ML inference)  \u2502\u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518        \u2193 YAML \u043a\u043e\u043d\u0444\u0438\u0433 \u2193    Product_A.yaml \u2192 \u043d\u043e\u0432\u044b\u0435 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044bProduct_B.yaml \u2192 \u043d\u043e\u0432\u044b\u0435 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b    \u0418\u0422\u041e\u0413\u041e \u041f\u0415\u0420\u0415\u041d\u0410\u041b\u0410\u0414\u041a\u0410: ~3\u20135 \u043c\u0438\u043d<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p>\u0412\u043c\u0435\u0441\u0442\u043e \u0442\u043e\u0433\u043e, \u0447\u0442\u043e\u0431\u044b \u043f\u0435\u0440\u0435\u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043a\u0430\u0436\u0434\u0443\u044e \u0441\u0438\u0441\u0442\u0435\u043c\u0443 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u043e, \u0432\u044b \u043f\u0440\u043e\u0441\u0442\u043e \u0437\u0430\u0433\u0440\u0443\u0436\u0430\u0435\u0442\u0435 \u0434\u0440\u0443\u0433\u043e\u0439 YAML-\u043a\u043e\u043d\u0444\u0438\u0433, OpenFB \u043f\u0440\u0438\u043c\u0435\u043d\u0438\u0442 \u043d\u043e\u0432\u044b\u0435 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b \u043a\u043e \u0432\u0441\u0435\u043c \u0431\u043b\u043e\u043a\u0430\u043c \u043e\u0434\u043d\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u043e.<\/p>\n<h3>\u041f\u043e\u0447\u0435\u043c\u0443 \u044d\u0442\u043e \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442: O-PAS \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u0438\u0437\u0430\u0446\u0438\u044f<\/h3>\n<p>OpenFB \u0432\u0441\u0442\u0440\u043e\u0435\u043d \u0432 \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u0443 Open Process Automation (O-PAS), \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0435\u0442:<\/p>\n<ol>\n<li>\n<p><strong>\u041e\u0442\u043a\u0440\u044b\u0442\u044b\u0435 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u044b<\/strong> \u2014 \u0432\u0441\u0435 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u044b \u0433\u043e\u0432\u043e\u0440\u044f\u0442 \u043d\u0430 \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u044b\u0445 \u043f\u0440\u043e\u0442\u043e\u043a\u043e\u043b\u0430\u0445 (OPC UA, MQTT)<\/p>\n<\/li>\n<li>\n<p><strong>\u041d\u0435\u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u044c \u043e\u0442 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044f<\/strong> \u2014 \u043a\u043e\u0431\u043e\u0442 \u043e\u0442 UR, \u043c\u0430\u0448\u0438\u043d\u043d\u043e\u0435 \u0437\u0440\u0435\u043d\u0438\u0435 \u043e\u0442 Basler, \u0437\u0430\u0445\u0432\u0430\u0442 \u043e\u0442 OnRobot \u0440\u0430\u0431\u043e\u0442\u0430\u044e\u0442 \u0432\u043c\u0435\u0441\u0442\u0435<\/p>\n<\/li>\n<li>\n<p><strong>\u041c\u043e\u0434\u0443\u043b\u044c\u043d\u043e\u0441\u0442\u044c<\/strong> \u2014 \u043a\u0430\u0436\u0434\u044b\u0439 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442 \u043c\u043e\u0436\u043d\u043e \u0437\u0430\u043c\u0435\u043d\u0438\u0442\u044c \u043d\u0430 \u0430\u043d\u0430\u043b\u043e\u0433 \u0431\u0435\u0437 \u043f\u0435\u0440\u0435\u0434\u0435\u043b\u043a\u0438 \u043b\u043e\u0433\u0438\u043a\u0438<\/p>\n<\/li>\n<li>\n<p><strong>\u041f\u0440\u0435\u0434\u0441\u043a\u0430\u0437\u0443\u0435\u043c\u043e\u0441\u0442\u044c<\/strong> \u2014 \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u044b\u0435 \u0431\u043b\u043e\u043a\u0438 \u0441\u043b\u0435\u0434\u0443\u044e\u0442 \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u043e\u043c\u0443 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u0443 IEC 61499<\/p>\n<\/li>\n<\/ol>\n<p>\u042d\u0442\u043e \u043e\u0441\u043e\u0431\u0435\u043d\u043d\u043e \u0432\u0430\u0436\u043d\u043e \u0434\u043b\u044f \u0433\u0438\u0431\u043a\u043e\u0433\u043e \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0441\u0442\u0432\u0430, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e:<\/p>\n<ul>\n<li>\n<p><strong>\u0417\u0430\u0432\u0442\u0440\u0430 \u0432\u044b \u0437\u0430\u0445\u043e\u0442\u0438\u0442\u0435 \u0437\u0430\u043c\u0435\u043d\u0438\u0442\u044c \u043a\u043e\u0431\u043e\u0442\u0430<\/strong> \u0441 UR \u043d\u0430 KUKA \u0438\u043b\u0438 St\u00e4ubli<\/p>\n<ul>\n<li>\n<p>\u0411\u0435\u0437 OpenFB: \u043f\u0435\u0440\u0435\u0434\u0435\u043b\u044b\u0432\u0430\u0442\u044c \u0432\u0441\u044e \u043b\u043e\u0433\u0438\u043a\u0443<\/p>\n<\/li>\n<li>\n<p>\u0421 OpenFB: \u043f\u0440\u043e\u0441\u0442\u043e \u043d\u043e\u0432\u0430\u044f OPC UA \u043c\u043e\u0434\u0435\u043b\u044c, \u043e\u0441\u0442\u0430\u043b\u044c\u043d\u043e\u0435 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442<\/p>\n<\/li>\n<\/ul>\n<\/li>\n<li>\n<p><strong>\u0427\u0435\u0440\u0435\u0437 \u0433\u043e\u0434 \u043f\u043e\u044f\u0432\u0438\u0442\u0441\u044f \u043d\u043e\u0432\u0430\u044f ML-\u043c\u043e\u0434\u0435\u043b\u044c<\/strong> \u0434\u043b\u044f \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u044f \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0430<\/p>\n<ul>\n<li>\n<p>\u0411\u0435\u0437 OpenFB: \u043f\u0435\u0440\u0435\u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440 \u043c\u0430\u0448\u0438\u043d\u043d\u043e\u0433\u043e \u0437\u0440\u0435\u043d\u0438\u044f, \u0442\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c<\/p>\n<\/li>\n<li>\n<p>\u0421 OpenFB: \u0441\u043a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043d\u043e\u0432\u044b\u0439 .onnx \u0444\u0430\u0439\u043b, \u043f\u0435\u0440\u0435\u0437\u0430\u0433\u0440\u0443\u0437\u0438\u0442\u044c<\/p>\n<\/li>\n<\/ul>\n<\/li>\n<li>\n<p><strong>\u041d\u0443\u0436\u043d\u043e \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0435\u0449\u0451 \u043e\u0434\u043d\u0443 \u043b\u0438\u043d\u0438\u044e<\/strong> \u0441 \u043f\u043e\u0445\u043e\u0436\u0435\u0439 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0435\u0439<\/p>\n<ul>\n<li>\n<p>\u0411\u0435\u0437 OpenFB: \u043b\u0438\u0446\u0435\u043d\u0437\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043d\u043e\u0432\u044b\u0439 \u041f\u041b\u041a, \u043d\u043e\u0432\u0443\u044e \u0441\u0438\u0441\u0442\u0435\u043c\u0443 CV, \u0438\u043d\u0442\u0435\u0433\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c<\/p>\n<\/li>\n<li>\n<p>\u0421 OpenFB: \u0441\u043a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u0442\u044c YAML, \u0440\u0430\u0437\u0432\u0435\u0440\u043d\u0443\u0442\u044c \u043d\u0430 \u043d\u043e\u0432\u043e\u043c \u0443\u0437\u043b\u0435 (\u0442\u043e\u0442 \u0436\u0435 Linux, Raspberry Pi \u0438\u043b\u0438 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440)<\/p>\n<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<h3>\u0422\u0438\u043f\u0438\u0447\u043d\u0430\u044f \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u0430 \u0443\u0437\u043b\u0430 OpenFB<\/h3>\n<pre><code>\u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510\u2502            OpenFB Runtime (Orchestration)             \u2502\u2502  Python + IEC 61499 (\u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u043d\u0430 Linux\/Raspberry Pi) \u2502\u2502                                                      \u2502\u2502  \u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510  \u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510  \u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510 \u2502\u2502  \u2502 Robot          \u2502  \u2502 Vision Block \u2502  \u2502 Quality  \u2502 \u2502\u2502  \u2502 Management     \u2502  \u2502 (TensorFlow) \u2502  \u2502 Block    \u2502 \u2502\u2502  \u2502 Block          \u2502  \u2502              \u2502  \u2502 (ML)     \u2502 \u2502\u2502  \u2502 (OPC UA)       \u2502  \u2502 (GPU \u0443\u0437\u0435\u043b)   \u2502  \u2502          \u2502 \u2502\u2502  \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518  \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518  \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518 \u2502\u2502         \u2502                   \u2502                \u2502       \u2502\u2502    EVENTS+DATA          MQTT PUB         OPC UA     \u2502\u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518        \u2502                   \u2502                \u2502        \u2193                   \u2193                \u2193    \u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510      \u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510    \u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510    \u2502UR Cobot \u2502      \u2502Raspberry \u2502    \u2502 Database\/  \u2502    \u2502         \u2502      \u2502 Pi 5 GPU  \u2502    \u2502 Analytics  \u2502    \u2502Polyscope\u2502      \u2502          \u2502    \u2502            \u2502    \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518      \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518    \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p>\u041a\u0430\u0436\u0434\u044b\u0439 \u0431\u043b\u043e\u043a \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u043d\u0435\u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e:<\/p>\n<ul>\n<li>\n<p>\u041e\u0431\u043d\u043e\u0432\u043b\u0451\u043d<\/p>\n<\/li>\n<li>\n<p>\u041c\u0430\u0441\u0448\u0442\u0430\u0431\u0438\u0440\u043e\u0432\u0430\u043d (\u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c GPU)<\/p>\n<\/li>\n<li>\n<p>\u0417\u0430\u043c\u0435\u043d\u0451\u043d<\/p>\n<\/li>\n<li>\n<p>\u041e\u0442\u043b\u0430\u0436\u0435\u043d<\/p>\n<\/li>\n<\/ul>\n<h3>\u041a\u0435\u0439\u0441 \u044d\u043a\u043e\u043d\u043e\u043c\u0438\u043a\u0438<\/h3>\n<p>\u041f\u0440\u0435\u0434\u043f\u043e\u043b\u043e\u0436\u0438\u043c, \u0432\u044b \u0432\u043d\u0435\u0434\u0440\u044f\u0435\u0442\u0435 PCBA \u043b\u0438\u043d\u0438\u044e \u0441 \u043a\u043e\u0431\u043e\u0442\u043e\u043c \u0438 CV.<\/p>\n<div>\n<div class=\"table\">\n<table>\n<tbody>\n<tr>\n<th>\n<p align=\"left\">\u0421\u0442\u0430\u0442\u044c\u044f<\/p>\n<\/th>\n<th>\n<p align=\"left\">\u0422\u0440\u0430\u0434\u0438\u0446\u0438\u043e\u043d\u043d\u044b\u0439 \u043f\u043e\u0434\u0445\u043e\u0434<\/p>\n<\/th>\n<th>\n<p align=\"left\">O-PAS + OpenFB<\/p>\n<\/th>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">\u0421\u0442\u043e\u0438\u043c\u043e\u0441\u0442\u044c \u043e\u0431\u043e\u0440\u0443\u0434\u043e\u0432\u0430\u043d\u0438\u044f<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u20ac80K<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u20ac80K (\u043e\u0434\u043d\u043e \u0438 \u0442\u043e \u0436\u0435)<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">\u041b\u0438\u0446\u0435\u043d\u0437\u0438\u0438 \u041f\u041e (S7, OPC UA)<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u20ac40K<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u20ac0<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">\u0412\u0440\u0435\u043c\u044f \u0438\u043d\u0442\u0435\u0433\u0440\u0430\u0446\u0438\u0438<\/p>\n<\/td>\n<td>\n<p align=\"left\">120 \u0447\u0430\u0441\u043e\u0432<\/p>\n<\/td>\n<td>\n<p align=\"left\">60 \u0447\u0430\u0441\u043e\u0432<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">\u0417\u0430\u0440\u043f\u043b\u0430\u0442\u0430 \u0438\u043d\u0442\u0435\u0433\u0440\u0430\u0442\u043e\u0440\u0430 (\u20ac80\/\u0447)<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u20ac9,600<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u20ac4,800<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\"><strong>\u0418\u0442\u043e\u0433\u043e \u043a\u0430\u043f\u0438\u0442\u0430\u043b\u044c\u043d\u044b\u0435 \u0437\u0430\u0442\u0440\u0430\u0442\u044b<\/strong><\/p>\n<\/td>\n<td>\n<p align=\"left\"><strong>\u20ac129,600<\/strong><\/p>\n<\/td>\n<td>\n<p align=\"left\"><strong>\u20ac84,800<\/strong><\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\"><strong>\u042d\u043a\u043e\u043d\u043e\u043c\u0438\u044f \u043d\u0430 \u0438\u043d\u0442\u0435\u0433\u0440\u0430\u0446\u0438\u0438<\/strong><\/p>\n<\/td>\n<td>\n<p align=\"left\">\u2014<\/p>\n<\/td>\n<td>\n<p align=\"left\"><strong>\u20ac44,800<\/strong><\/p>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<p>\u041d\u043e \u0433\u043b\u0430\u0432\u043d\u043e\u0435 \u2014 <strong>\u0442\u0435\u043a\u0443\u0449\u0438\u0435 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0438<\/strong>:<\/p>\n<p>\u0414\u043e\u043f\u0443\u0441\u0442\u0438\u043c, \u0432\u044b \u0434\u0435\u043b\u0430\u0435\u0442\u0435 8 \u043f\u0435\u0440\u0435\u043d\u0430\u043b\u0430\u0434\u043e\u043a \u0432 \u0434\u0435\u043d\u044c, 250 \u0440\u0430\u0431\u043e\u0447\u0438\u0445 \u0434\u043d\u0435\u0439 \u0432 \u0433\u043e\u0434\u0443.<\/p>\n<div>\n<div class=\"table\">\n<table>\n<tbody>\n<tr>\n<th>\n<p align=\"left\">\u041c\u0435\u0442\u0440\u0438\u043a\u0430<\/p>\n<\/th>\n<th>\n<p align=\"left\">\u0422\u0440\u0430\u0434\u0438\u0446\u0438\u043e\u043d\u043d\u044b\u0439<\/p>\n<\/th>\n<th>\n<p align=\"left\">O-PAS + OpenFB<\/p>\n<\/th>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">\u0412\u0440\u0435\u043c\u044f \u043f\u0435\u0440\u0435\u043d\u0430\u043b\u0430\u0434\u043a\u0438<\/p>\n<\/td>\n<td>\n<p align=\"left\">90 \u043c\u0438\u043d<\/p>\n<\/td>\n<td>\n<p align=\"left\">5 \u043c\u0438\u043d<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">\u041f\u0440\u043e\u0441\u0442\u043e\u0439 \u0432 \u0433\u043e\u0434 (\u0447)<\/p>\n<\/td>\n<td>\n<p align=\"left\">2000<\/p>\n<\/td>\n<td>\n<p align=\"left\">111<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">\u0417\u0430\u0440\u043f\u043b\u0430\u0442\u0430 \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440\u0430 (\u20ac25\/\u0447)<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u20ac50,000<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u20ac2,775<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\"><strong>\u0413\u043e\u0434\u043e\u0432\u0430\u044f \u044d\u043a\u043e\u043d\u043e\u043c\u0438\u044f<\/strong><\/p>\n<\/td>\n<td>\n<p align=\"left\">\u2014<\/p>\n<\/td>\n<td>\n<p align=\"left\"><strong>\u20ac47,225<\/strong><\/p>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<p><strong>\u041e\u0431\u0449\u0430\u044f \u0433\u043e\u0434\u043e\u0432\u0430\u044f \u044d\u043a\u043e\u043d\u043e\u043c\u0438\u044f<\/strong>: \u20ac47,225 + \u0430\u043c\u043e\u0440\u0442\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0435 \u043b\u0438\u0446\u0435\u043d\u0437\u0438\u0438 (\u20ac40K \/ 5 \u043b\u0435\u0442 = \u20ac8K\/\u0433\u043e\u0434) = <strong>\u20ac55,225<\/strong>.<\/p>\n<p><strong>ROI<\/strong>: (\u20ac44,800 + \u20ac55,225) \/ \u20ac129,600 = <strong>0.77 \u043b\u0435\u0442 = 9 \u043c\u0435\u0441\u044f\u0446\u0435\u0432<\/strong>.<\/p>\n<p>\u0418 \u044d\u0442\u043e \u043d\u0435 \u0443\u0447\u0438\u0442\u044b\u0432\u0430\u044f \u044d\u043a\u043e\u043d\u043e\u043c\u0438\u044e \u043d\u0430 \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u044f\u0445 \u041f\u041e \u0438 \u0437\u0430\u043c\u0435\u043d\u0435 \u043e\u0431\u043e\u0440\u0443\u0434\u043e\u0432\u0430\u043d\u0438\u044f \u0431\u043b\u0430\u0433\u043e\u0434\u0430\u0440\u044f \u043e\u0442\u0441\u0443\u0442\u0441\u0442\u0432\u0438\u044e \u0432\u0435\u043d\u0434\u043e\u0440-\u043b\u043e\u043a\u0438\u043d\u0430.<\/p>\n<h3>\u041a\u0430\u043a \u044d\u0442\u043e \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u043d\u0430 \u043f\u0440\u0430\u043a\u0442\u0438\u043a\u0435<\/h3>\n<p>\u0412\u044b \u043f\u0438\u0448\u0435\u0442\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u044b\u0435 \u0431\u043b\u043e\u043a\u0438 \u043d\u0430 Python:<\/p>\n<p><strong>vision_block.py<\/strong>:<\/p>\n<pre><code class=\"python\">class VisionDetectionBlock(fb.FunctionBlock):    def __init__(self, config):        self.model = load_model(config['model_path'])        self.threshold = config['quality_threshold']        self.mqtt_client = mqtt.Client()        def process_image(self, image_bytes):        image = cv2.imdecode(image_bytes, cv2.IMREAD_COLOR)        detections = self.model.predict(image)                for detection in detections:            if detection.confidence &gt; self.threshold:                self.mqtt_publish(\"detection_found\", {                    'position': detection.bbox,                    'confidence': detection.confidence                })<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p><strong>config_product_a.yaml<\/strong>:<\/p>\n<pre><code class=\"yaml\">vision:  model_path: models\/pcba_detector_v2.onnx  quality_threshold: 0.95  robot:  speed: 0.8  force: 5.0<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p><strong>config_product_b.yaml<\/strong>:<\/p>\n<pre><code class=\"yaml\">vision:  model_path: models\/pcba_detector_v3.onnx  quality_threshold: 0.98  robot:  speed: 0.5  # \u043c\u0435\u0434\u043b\u0435\u043d\u043d\u0435\u0435 \u0434\u043b\u044f \u0441\u043b\u043e\u0436\u043d\u044b\u0445 \u0434\u0435\u0442\u0430\u043b\u0435\u0439  force: 3.0  # \u043c\u044f\u0433\u0447\u0435 \u0437\u0430\u0445\u0432\u0430\u0442<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p>\u041f\u0435\u0440\u0435\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435: <code>.\/run_openfb.py --config config_product_b.yaml<\/code><\/p>\n<p>\u0411\u043b\u043e\u043a\u0438 \u043f\u0435\u0440\u0435\u0437\u0430\u0433\u0440\u0443\u0436\u0430\u044e\u0442\u0441\u044f, \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b \u043e\u0431\u043d\u043e\u0432\u043b\u044f\u044e\u0442\u0441\u044f, \u0441\u0438\u0441\u0442\u0435\u043c\u0430 \u0433\u043e\u0442\u043e\u0432\u0430. <strong>3 \u043c\u0438\u043d\u0443\u0442\u044b<\/strong>.<\/p>\n<h3>\u0414\u043e\u0440\u043e\u0436\u043d\u0430\u044f \u043a\u0430\u0440\u0442\u0430 OpenFB<\/h3>\n<ul>\n<li>\n<p><strong>Q1 2026<\/strong>: \u0420\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u0435 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438 \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u044b\u0445 \u0431\u043b\u043e\u043a\u043e\u0432 (PID, \u043b\u043e\u0433\u0438\u043a\u0430, \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0430 \u0434\u0430\u043d\u043d\u044b\u0445)<\/p>\n<\/li>\n<li>\n<p><strong>Q2 2026<\/strong>: O-PAS Connectivity Framework (OCF) \u0438\u043d\u0442\u0435\u0433\u0440\u0430\u0446\u0438\u044f \u0432 runtime<\/p>\n<\/li>\n<li>\n<p><strong>Q3 2026<\/strong>: \u0413\u0440\u0430\u0444\u0438\u0447\u0435\u0441\u043a\u0438\u0435 \u0440\u0435\u0434\u0430\u043a\u0442\u043e\u0440\u044b \u0434\u043b\u044f \u0432\u0438\u0437\u0443\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f (drag-and-drop)<\/p>\n<\/li>\n<li>\n<p><strong>Q4 2026<\/strong>: \u0421\u0435\u0440\u0442\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u044f OPAF (Open Process Automation Forum)<\/p>\n<\/li>\n<li>\n<p><strong>2027<\/strong>: \u041c\u043d\u043e\u0433\u043e\u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440\u043d\u043e\u0441\u0442\u044c \u0438 \u0430\u0441\u0438\u043d\u0445\u0440\u043e\u043d\u043d\u043e\u0435 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0435<\/p>\n<\/li>\n<\/ul>\n<p>\u042d\u0442\u043e \u043e\u0437\u043d\u0430\u0447\u0430\u0435\u0442:<\/p>\n<ul>\n<li>\n<p>\u0432\u044b \u0441\u043c\u043e\u0436\u0435\u0442\u0435 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0432\u0438\u0437\u0443\u0430\u043b\u044c\u043d\u043e, \u0431\u0435\u0437 \u043a\u043e\u0434\u0430<\/p>\n<\/li>\n<li>\n<p>\u0431\u043b\u043e\u043a\u0438 \u043e\u0442 OpenFB \u0431\u0443\u0434\u0443\u0442 \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u043d\u0430 \u0434\u0440\u0443\u0433\u0438\u0445 O-PAS \u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u0430\u0445<\/p>\n<\/li>\n<li>\n<p>\u0438\u0441\u0447\u0435\u0437\u043d\u0435\u0442 \u0432\u0435\u043d\u0434\u043e\u0440-\u043b\u043e\u043a<\/p>\n<\/li>\n<\/ul>\n<h3>\u0412\u044b\u0437\u043e\u0432\u044b \u0438 \u043a\u043e\u0433\u0434\u0430 \u044d\u0442\u043e \u043f\u043e\u0434\u0445\u043e\u0434\u0438\u0442<\/h3>\n<p>OpenFB \u2014 \u044d\u0442\u043e \u044d\u043a\u0441\u043f\u0435\u0440\u0438\u043c\u0435\u043d\u0442\u0430\u043b\u044c\u043d\u0430\u044f \u0438 \u043c\u043e\u043b\u043e\u0434\u0430\u044f \u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u0430. \u041d\u0435 \u0432\u0435\u0437\u0434\u0435 \u043e\u043d\u0430 \u043f\u043e\u0434\u0445\u043e\u0434\u0438\u0442:<\/p>\n<h4>\u041f\u043b\u0430\u043d\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u0434\u043b\u044f:<\/h4>\n<ul>\n<li>\n<p>\u0413\u0438\u0431\u043a\u043e\u0433\u043e \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0441\u0442\u0432\u0430 (HMLV, \u0447\u0430\u0441\u0442\u044b\u0435 \u043f\u0435\u0440\u0435\u043d\u0430\u043b\u0430\u0434\u043a\u0438)<\/p>\n<\/li>\n<li>\n<p>\u041d\u043e\u0432\u044b\u0445 \u043a\u043e\u0431\u043e\u0442-\u043b\u0438\u043d\u0438\u0439<\/p>\n<\/li>\n<li>\n<p>\u0418\u043d\u0442\u0435\u0433\u0440\u0430\u0446\u0438\u0438 \u0440\u0430\u0437\u043d\u043e\u0440\u043e\u0434\u043d\u043e\u0433\u043e \u043e\u0431\u043e\u0440\u0443\u0434\u043e\u0432\u0430\u043d\u0438\u044f<\/p>\n<\/li>\n<li>\n<p>\u0421\u0438\u0441\u0442\u0435\u043c \u0441 ML\/AI \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u0430\u043c\u0438<\/p>\n<\/li>\n<li>\n<p>\u041a\u043e\u0433\u0434\u0430 \u0432\u044b \u0445\u043e\u0442\u0438\u0442\u0435 \u0438\u0437\u0431\u0435\u0436\u0430\u0442\u044c \u0432\u0435\u043d\u0434\u043e\u0440-\u043b\u043e\u043a\u0430<\/p>\n<\/li>\n<li>\n<p>\u041a\u043e\u0433\u0434\u0430 \u0432\u0440\u0435\u043c\u044f \u043d\u0430 \u0438\u043d\u0442\u0435\u0433\u0440\u0430\u0446\u0438\u044e \u0438 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0443 \u043a\u0440\u0438\u0442\u0438\u0447\u043d\u043e<\/p>\n<\/li>\n<\/ul>\n<h4>\u041e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u044f:<\/h4>\n<ul>\n<li>\n<p><strong>Real-time  \u0438 \u0434\u0435\u0442\u0435\u0440\u043c\u0438\u043d\u0438\u0437\u043c:<\/strong> \u0432 OpenFB \u0438\u0445 \u043d\u0435\u0442 (\u043d\u0435 \u043f\u043e\u0434\u0445\u043e\u0434\u0438\u0442 \u0434\u043b\u044f safety-\u043a\u0440\u0438\u0442\u0438\u0447\u043d\u044b\u0445 \u0441\u0438\u0441\u0442\u0435\u043c, \u0442\u0440\u0435\u0431\u0443\u044e\u0449\u0438\u0445 SIL3), \u043e\u0434\u043d\u0430\u043a\u043e \u0432 \u043a\u043e\u043c\u0431\u0438\u043d\u0430\u0446\u0438\u0438 \u0441 \u0434\u0440\u0443\u0433\u0438\u043c\u0438 \u0443\u0437\u043b\u0430\u043c\u0438, \u0438\u0441\u043f\u043e\u043b\u043d\u044f\u044e\u0449\u0438\u043c\u0438 RealTime Runtime 61499 \u043a\u0440\u0438\u0442\u0438\u0447\u043d\u044b\u0435 \u0446\u0438\u043a\u043b\u043e\u0433\u0440\u0430\u043c\u043c\u044b \u0441\u043e\u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u044e\u0442 \u0441 \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u044b\u043c\u0438 \u0431\u043b\u043e\u043a\u0430\u043c\u0438 \u043d\u0430 Python \u0432 \u0435\u0434\u0438\u043d\u043e\u043c \u043f\u0440\u043e\u0435\u043a\u0442\u0435<\/p>\n<\/li>\n<li>\n<p><strong>Community O-PAS \u0435\u0449\u0435 \u043d\u0435 \u0441\u0444\u043e\u0440\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u043e<\/strong>, \u044d\u0442\u043e \u0434\u0430\u043b\u0435\u043a\u043e \u043d\u0435 Siemens<\/p>\n<\/li>\n<li>\n<p><strong>\u0422\u0440\u0435\u0431\u0443\u0435\u0442 Python \u0437\u043d\u0430\u043d\u0438\u0439<\/strong> \u043e\u0442 \u0438\u043d\u0442\u0435\u0433\u0440\u0430\u0442\u043e\u0440\u0430 (\u0445\u043e\u0442\u044f Python \u044d\u0442\u043e \u043f\u043b\u044e\u0441 \u0434\u043b\u044f IT-\u0448\u043d\u0438\u043a\u0430)<\/p>\n<\/li>\n<li>\n<p><strong>\u041f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c<\/strong> \u043d\u0438\u0436\u0435, \u0447\u0435\u043c C++ \u0438\u043b\u0438 ST (\u0445\u043e\u0442\u044f \u0434\u043b\u044f HMLV \u044d\u0442\u043e \u043d\u0435\u043a\u0440\u0438\u0442\u0438\u0447\u043d\u043e)<\/p>\n<\/li>\n<\/ul>\n<h3>\u0418\u043d\u0442\u0435\u0433\u0440\u0430\u0446\u0438\u044f \u0441 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u044e\u0449\u0435\u0439 \u0438\u043d\u0444\u0440\u0430\u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u043e\u0439<\/h3>\n<p><strong>Brownfield \u0441\u0446\u0435\u043d\u0430\u0440\u0438\u0439<\/strong> (\u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0439 \u0437\u0430\u0432\u043e\u0434 \u0441 Siemens S7):<\/p>\n<pre><code>Siemens S7-1200 \u2190\u2192 OpenFB Runtime \u2190\u2192 \u041d\u043e\u0432\u0430\u044f \u043a\u043e\u0431\u043e\u0442-\u043b\u0438\u043d\u0438\u044f(\u0441\u0442\u0430\u0440\u044b\u0435 \u043a\u043e\u043d\u0432\u0435\u0439\u0435\u0440\u044b)  (\u0447\u0435\u0440\u0435\u0437 OPC UA)  (Product A\/B \u043f\u0435\u0440\u0435\u043d\u0430\u043b\u0430\u0434\u043a\u0438)<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p>S7 \u0443\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u0442 \u0441\u0442\u0430\u0440\u044b\u043c \u043e\u0431\u043e\u0440\u0443\u0434\u043e\u0432\u0430\u043d\u0438\u0435\u043c. OpenFB \u0443\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u0442 \u043a\u043e\u0431\u043e\u0442-\u044f\u0447\u0435\u0439\u043a\u043e\u0439. \u041e\u043d\u0438 \u043e\u0431\u043c\u0435\u043d\u0438\u0432\u0430\u044e\u0442\u0441\u044f \u0434\u0430\u043d\u043d\u044b\u043c\u0438 \u0447\u0435\u0440\u0435\u0437 OPC UA, \u043d\u0438\u043a\u0442\u043e \u043d\u0438\u0447\u0435\u0433\u043e \u043d\u0435 \u043f\u0435\u0440\u0435\u0434\u0435\u043b\u044b\u0432\u0430\u0435\u0442.<\/p>\n<p><strong>Greenfield \u0441\u0446\u0435\u043d\u0430\u0440\u0438\u0439<\/strong> (\u043d\u043e\u0432\u0430\u044f \u043b\u0438\u043d\u0438\u044f):<\/p>\n<p>\u0412\u0441\u044f \u043b\u043e\u0433\u0438\u043a\u0430 \u043d\u0430 61499. \u0412\u0441\u0451 \u0440\u0430\u0441\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u043e \u043d\u0430 \u0443\u0437\u043b\u0430\u0445 (\u0434\u043b\u044f CV, \u043a\u043e\u0431\u043e\u0442, \u0443\u0437\u0435\u043b \u0434\u043b\u044f ML, \u2026).<\/p>\n<h3>\u0417\u0430\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435<\/h3>\n<p>\u041c\u043e\u0434\u0443\u043b\u044c\u043d\u044b\u0435 \u043a\u043e\u0431\u043e\u0442-\u044f\u0447\u0435\u0439\u043a\u0438 \u0440\u0435\u0448\u0438\u043b\u0438 \u0430\u043f\u043f\u0430\u0440\u0430\u0442\u043d\u0443\u044e \u0447\u0430\u0441\u0442\u044c \u0433\u0438\u0431\u043a\u043e\u0433\u043e \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0441\u0442\u0432\u0430: Plug &amp; Produce, quick-change. \u041d\u043e \u0431\u0435\u0437 O-PAS \u043e\u043d\u0438 \u043e\u0441\u0442\u0430\u044e\u0442\u0441\u044f \u043d\u0430\u0431\u043e\u0440\u043e\u043c \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0445 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u043e\u0432, \u0442\u0440\u0435\u0431\u0443\u044e\u0449\u0438\u0445 \u0440\u0443\u0447\u043d\u043e\u0439 \u0441\u0438\u043d\u0445\u0440\u043e\u043d\u0438\u0437\u0430\u0446\u0438\u0438.<\/p>\n<p><strong>O-PAS + OpenFB \u043d\u0430\u043c\u0435\u0440\u0435\u0432\u0430\u0435\u0442\u0441\u044f \u0437\u0430\u043a\u0440\u044b\u0442\u044c \u044d\u0442\u043e\u0442 \u0433\u044d\u043f:<\/strong><\/p>\n<ul>\n<li>\n<p><strong>\u0415\u0434\u0438\u043d\u0430\u044f \u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u0430<\/strong> (IEC 61499 + Python) \u0432\u043c\u0435\u0441\u0442\u043e \u0440\u0430\u0437\u0431\u0440\u043e\u0441\u0430\u043d\u043d\u044b\u0445 \u043c\u043e\u0434\u0443\u043b\u0435\u0439 PolyScope + ST + Python<\/p>\n<\/li>\n<li>\n<p><strong>\u0421\u043e\u0431\u044b\u0442\u0438\u0439\u043d\u043e-\u043e\u0440\u0438\u0435\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u0430\u044f \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u0430<\/strong> \u0432\u043c\u0435\u0441\u0442\u043e \u0446\u0438\u043a\u043b\u0438\u0447\u0435\u0441\u043a\u0438\u0445 \u043e\u043f\u0440\u043e\u0441\u043e\u0432<\/p>\n<\/li>\n<li>\n<p><strong>\u0420\u0430\u0441\u043f\u0440\u0435\u0434\u0435\u043b\u0451\u043d\u043d\u044b\u0435 \u0431\u043b\u043e\u043a\u0438<\/strong> \u0432\u043c\u0435\u0441\u0442\u043e \u043c\u043e\u043d\u043e\u043b\u0438\u0442\u043d\u043e\u0433\u043e \u041f\u041b\u041a<\/p>\n<\/li>\n<li>\n<p><strong>\u041e\u0442\u043a\u0440\u044b\u0442\u043e\u0441\u0442\u044c<\/strong> (open-source, \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u044b) \u0432\u043c\u0435\u0441\u0442\u043e \u0432\u0435\u043d\u0434\u043e\u0440-\u043b\u043e\u043a\u0438\u043d\u0430<\/p>\n<\/li>\n<li>\n<p><strong>\u0411\u044b\u0441\u0442\u0440\u0430\u044f \u043f\u0435\u0440\u0435\u043d\u0430\u043b\u0430\u0434\u043a\u0430<\/strong> (\u043c\u0438\u043d\u0443\u0442\u044b \u0432\u043c\u0435\u0441\u0442\u043e \u0447\u0430\u0441\u043e\u0432)<\/p>\n<\/li>\n<\/ul>\n<p>\u0414\u043b\u044f \u0438\u043d\u0442\u0435\u0433\u0440\u0430\u0442\u043e\u0440\u043e\u0432: \u043c\u0435\u043d\u044c\u0448\u0435 \u043a\u043e\u0434\u0430, \u043c\u0435\u043d\u044c\u0448\u0435 \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u043d\u0430 \u0438\u043d\u0442\u0435\u0433\u0440\u0430\u0446\u0438\u044e, \u0431\u043e\u043b\u044c\u0448\u0435 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u0435\u0439 \u0434\u043b\u044f \u0438\u043d\u043d\u043e\u0432\u0430\u0446\u0438\u0439.<\/p>\n<p>\u0414\u043b\u044f \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u0435\u0439 HMLV: \u0440\u0435\u0430\u043b\u044c\u043d\u0430\u044f \u0433\u0438\u0431\u043a\u043e\u0441\u0442\u044c, \u044d\u043a\u043e\u043d\u043e\u043c\u0438\u044f \u043d\u0430 \u043f\u0435\u0440\u0435\u043d\u0430\u043b\u0430\u0434\u043a\u0430\u0445, \u043f\u0443\u0442\u044c \u043a Industry 4.0 \u0431\u0435\u0437 \u043c\u0438\u043b\u043b\u0438\u043e\u043d\u043d\u044b\u0445 \u0438\u043d\u0432\u0435\u0441\u0442\u0438\u0446\u0438\u0439.<\/p>\n<hr\/>\n<p><strong>\u041f\u043e\u043b\u0435\u0437\u043d\u044b\u0435 \u0441\u0441\u044b\u043b\u043a\u0438:<\/strong><\/p>\n<ul>\n<li>\n<p>GitHub: <a href=\"https:\/\/github.com\/rtsoft-sdc\/openFB\" rel=\"noopener noreferrer nofollow\">https:\/\/github.com\/rtsoft-sdc\/openFB<\/a><\/p>\n<\/li>\n<li>\n<p>Blog: <a href=\"https:\/\/outsource.rtsoft.ru\/blog\/openfb\" rel=\"noopener noreferrer nofollow\">https:\/\/outsource.rtsoft.ru\/blog\/openfb<\/a><\/p>\n<\/li>\n<li>\n<p>O-PAS \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442: <a href=\"https:\/\/publications.opengroup.org\/standards\/opa\" rel=\"noopener noreferrer nofollow\">https:\/\/publications.opengroup.org\/standards\/opa<\/a><\/p>\n<\/li>\n<\/ul>\n<p><strong>\u0414\u043b\u044f \u0443\u0433\u043b\u0443\u0431\u043b\u0435\u043d\u043d\u043e\u0433\u043e \u0438\u0437\u0443\u0447\u0435\u043d\u0438\u044f:<\/strong><\/p>\n<ul>\n<li>\n<p>IEC 61499 \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442<\/p>\n<\/li>\n<li>\n<p>OPC UA \u043f\u0440\u043e\u0442\u043e\u043a\u043e\u043b (<em>O<\/em>&#8212;<em>PAS Connectivity Framework<\/em>\u00a0(<em>OCF<\/em>))<\/p>\n<\/li>\n<li>\n<p>PLCOPen + O-PAS \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u0430 \u0432 \u043f\u0440\u043e\u043c\u044b\u0448\u043b\u0435\u043d\u043d\u043e\u0439 \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0437\u0430\u0446\u0438\u0438: <a href=\"https:\/\/www.plcopen.org\/news\/new-plcopen-workgroup-on-opa-s-function-blocks\/\" rel=\"noopener noreferrer nofollow\">https:\/\/www.plcopen.org\/news\/new-plcopen-workgroup-on-opa-s-function-blocks\/<\/a><\/p>\n<\/li>\n<\/ul>\n<\/div>\n<p>\u0441\u0441\u044b\u043b\u043a\u0430 \u043d\u0430 \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b \u0441\u0442\u0430\u0442\u044c\u0438 <a href=\"https:\/\/habr.com\/ru\/articles\/1035294\/\">https:\/\/habr.com\/ru\/articles\/1035294\/<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>\u041f\u0440\u043e\u0434\u043e\u043b\u0436\u0435\u043d\u0438\u0435 \u0441\u0442\u0430\u0442\u044c\u0438 \u043e \u043c\u043e\u0434\u0443\u043b\u044c\u043d\u044b\u0445 \u043a\u043e\u0431\u043e\u0442-\u044f\u0447\u0435\u0439\u043a\u0430\u0445 \u0434\u043b\u044f \u0433\u0438\u0431\u043a\u043e\u0433\u043e \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0441\u0442\u0432\u0430\u0412 \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0435\u0439 \u0441\u0442\u0430\u0442\u044c\u0435 \u043c\u044b \u0440\u0430\u0437\u043e\u0431\u0440\u0430\u043b\u0438, \u043a\u0430\u043a \u043a\u043e\u0431\u043e\u0442\u044b \u0438 \u043c\u043e\u0434\u0443\u043b\u044c\u043d\u044b\u0435 \u0440\u0430\u0431\u043e\u0447\u0438\u0435 \u044f\u0447\u0435\u0439\u043a\u0438 \u0440\u0435\u0448\u0430\u044e\u0442 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0443 high-mix, low-volume \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0441\u0442\u0432\u0430. \u0412 \u0447\u0430\u0441\u0442\u043d\u043e\u0441\u0442\u0438 \u0433\u043e\u0432\u043e\u0440\u0438\u043b\u043e\u0441\u044c \u043e \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u0435 O-PAS. \u041f\u043e\u043f\u0440\u043e\u0431\u0443\u0435\u043c \u0440\u0430\u0441\u043a\u0440\u044b\u0442\u044c \u043f\u043e\u0434\u0440\u043e\u0431\u043d\u0435\u0435 \u044d\u0442\u0443 \u043a\u0440\u0438\u0442\u0438\u0447\u0435\u0441\u043a\u0443\u044e \u0447\u0430\u0441\u0442\u044c: \u043a\u0430\u043a \u0443\u043f\u0440\u0430\u0432\u043b\u044f\u0442\u044c HMLV \u0441 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u043d\u043e\u0439 \u0441\u0442\u043e\u0440\u043e\u043d\u044b?\u0422\u0438\u043f\u0438\u0447\u043d\u043e\u0435 \u043f\u0440\u0435\u0434\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u0438\u043d\u0442\u0435\u0433\u0440\u0430\u0442\u043e\u0440\u043e\u0432: \u041f\u041b\u041a \u043e\u0442 Siemens, \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0440\u0443\u0439\u0442\u0435 \u043d\u0430 Structured Text,  OPC UA middleware \u0434\u043b\u044f \u0441\u0432\u044f\u0437\u0438 \u0441 \u043a\u043e\u0431\u043e\u0442\u043e\u043c. \u0413\u043e\u0442\u043e\u0432\u043e.\u041f\u0440\u043e\u0431\u043b\u0435\u043c\u0430 \u0432 \u0442\u043e\u043c, \u0447\u0442\u043e \u0432 HMLV \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0441\u0442\u0432\u0435 \u043f\u0435\u0440\u0435\u043d\u0430\u043b\u0430\u0434\u043a\u0430 \u0434\u043e\u043b\u0436\u043d\u0430 \u0431\u044b\u0442\u044c \u043c\u0438\u043d\u0443\u0442\u043d\u043e\u0439, \u0430 \u043d\u0435 \u0447\u0430\u0441\u043e\u0432\u043e\u0439. \u0418 \u0441\u0435\u0433\u043e\u0434\u043d\u044f \u043b\u044e\u0431\u0430\u044f \u043f\u0435\u0440\u0435\u043d\u0430\u043b\u0430\u0434\u043a\u0430 \u0442\u0440\u0435\u0431\u0443\u0435\u0442 \u043f\u0435\u0440\u0435\u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0432 5\u20136 \u0440\u0430\u0437\u043d\u044b\u0445 \u0441\u0438\u0441\u0442\u0435\u043c\u0430\u0445 \u043d\u0430 \u0440\u0430\u0437\u043d\u044b\u0445 \u044f\u0437\u044b\u043a\u0430\u0445.\u0420\u0435\u043a\u043b\u0430\u043c\u0430: \u0432 \u0434\u0435\u043a\u0430\u0431\u0440\u0435 2025 \u0433\u043e\u0434\u0430 \u0437\u0430\u043f\u0443\u0449\u0435\u043d \u043f\u0440\u043e\u0435\u043a\u0442 \u0441 \u043e\u0442\u043a\u0440\u044b\u0442\u044b\u043c \u0438\u0441\u0445\u043e\u0434\u043d\u044b\u043c \u043a\u043e\u0434\u043e\u043c: OpenFB \u2014 \u043e\u0442\u043a\u0440\u044b\u0442\u044b\u0439 runtime \u0432 \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u0435 IEC 61499 \u0434\u043b\u044f \u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u044b Python. \u0426\u0435\u043b\u0438 \u043f\u0440\u043e\u0435\u043a\u0442\u0430 \u0448\u0438\u0440\u043e\u043a\u0438\u0435, \u043e\u0442 \u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u0438 \u043f\u0440\u043e\u0442\u043e\u0442\u0438\u043f\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f O-PAS \u0442\u0435\u0445\u043d\u043e\u043b\u043e\u0433\u0438\u0439 \u0434\u043e \u043f\u0440\u043e\u043c\u044b\u0448\u043b\u0435\u043d\u043d\u043e\u0439 \u0438\u043d\u0442\u0435\u0433\u0440\u0430\u0446\u0438\u0438 \u0432 \u0440\u0430\u043c\u043a\u0430\u0445 \u0441\u043f\u0435\u0446\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u0439 \u041e\u0410\u0421\u0423\u0422\u041f.\u041f\u0440\u043e\u0431\u043b\u0435\u043c\u0430: \u043b\u043e\u0441\u043a\u0443\u0442\u043d\u0430\u044f \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u0430\u0414\u0430\u0432\u0430\u0439\u0442\u0435 \u0447\u0435\u0441\u0442\u043d\u043e \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u043d\u0430 \u0442\u0438\u043f\u0438\u0447\u043d\u0443\u044e \u0441\u0431\u043e\u0440\u043a\u0443 \u0433\u0438\u0431\u043a\u043e\u0439 \u043a\u043e\u0431\u043e\u0442-\u043b\u0438\u043d\u0438\u0438 \u0441\u0435\u0433\u043e\u0434\u043d\u044f:\u041e\u0431\u043e\u0440\u0443\u0434\u043e\u0432\u0430\u043d\u0438\u0435:\u041a\u043e\u0431\u043e\u0442 Universal Robots (UR) \u2014 \u0443\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043d\u0430 PolyScope\u0421\u0438\u0441\u0442\u0435\u043c\u0430 \u0432\u0438\u0434\u0435\u043d\u0438\u044f \u0434\u043b\u044f \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u044f \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0430 \u2014 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0439 Linux-\u0443\u0437\u0435\u043b \u0441 OpenCV\u0417\u0430\u0445\u0432\u0430\u0442 (OnRobot) \u0441 \u044d\u043b\u0435\u043a\u0442\u0440\u043e\u043d\u0438\u043a\u043e\u0439 \u2014 \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u0435 API\u041a\u043e\u043d\u0432\u0435\u0439\u0435\u0440 \u2014 \u0443\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u0442\u0441\u044f Siemens S7-1200 \u043d\u0430 ST (Structured Text)OPC UA middleware \u2014 \u0441\u0432\u043e\u0439 \u0441\u043b\u043e\u0439 \u0430\u0431\u0441\u0442\u0440\u0430\u043a\u0446\u0438\u0438\u041b\u044e\u0434\u0438:\u0421\u043f\u0435\u0446\u0438\u0430\u043b\u0438\u0441\u0442 \u043f\u043e UR \u0434\u043b\u044f \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0442\u0440\u0430\u0435\u043a\u0442\u043e\u0440\u0438\u0439\u0421\u043f\u0435\u0446\u0438\u0430\u043b\u0438\u0441\u0442 \u043f\u043e Python\/OpenCV \u0434\u043b\u044f \u0432\u0438\u0434\u0435\u043d\u0438\u044f\u0421\u043f\u0435\u0446\u0438\u0430\u043b\u0438\u0441\u0442 \u043f\u043e Siemens PLC \u0434\u043b\u044f \u043b\u043e\u0433\u0438\u043a\u0438\u0418\u043d\u0442\u0435\u0433\u0440\u0430\u0442\u043e\u0440 \u0434\u043b\u044f \u0441\u0432\u044f\u0437\u0438 \u0432\u0441\u0435\u0433\u043e \u043a\u0443\u0447\u0435\u0439\u0412\u0440\u0435\u043c\u044f \u043d\u0430 \u0438\u043d\u0442\u0435\u0433\u0440\u0430\u0446\u0438\u044e: 80\u2013120 \u0447\u0430\u0441\u043e\u0432.\u0412\u0440\u0435\u043c\u044f \u043d\u0430 \u043f\u0435\u0440\u0435\u043d\u0430\u043b\u0430\u0434\u043a\u0443 (\u043a\u043e\u0433\u0434\u0430 \u043d\u0443\u0436\u043d\u043e \u043f\u0435\u0440\u0435\u0439\u0442\u0438 \u0441 Product A \u043d\u0430 Product B):\u0418\u0437\u043c\u0435\u043d\u0438\u0442\u044c \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0443 UR: 30 \u043c\u0438\u043d\u041e\u0431\u043d\u043e\u0432\u0438\u0442\u044c \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b \u0432 S7: 20 \u043c\u0438\u043d\u041f\u0435\u0440\u0435\u0434\u0435\u043b\u0430\u0442\u044c \u0432\u0438\u0434\u0435\u043d\u0438\u0435 (\u043d\u043e\u0432\u0430\u044f \u043c\u043e\u0434\u0435\u043b\u044c, \u043d\u043e\u0432\u044b\u0435 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b): 20 \u043c\u0438\u043d\u0418\u043d\u0442\u0435\u0433\u0440\u0430\u0446\u0438\u043e\u043d\u043d\u043e\u0435 \u0442\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435: 30 \u043c\u0438\u043d\u0418\u0442\u043e\u0433\u043e: ~2 \u0447\u0430\u0441\u0430\u0414\u043b\u044f HMLV, \u0433\u0434\u0435 \u043f\u0435\u0440\u0435\u043d\u0430\u043b\u0430\u0434\u043a\u0430 \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442 5\u201310 \u0440\u0430\u0437 \u0432 \u0434\u0435\u043d\u044c, \u044d\u0442\u043e \u043e\u0437\u043d\u0430\u0447\u0430\u0435\u0442, \u0447\u0442\u043e 30\u201350% \u0440\u0430\u0431\u043e\u0447\u0435\u0433\u043e \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u043b\u0438\u043d\u0438\u044f \u0441\u0442\u043e\u0438\u0442 \u043d\u0430 \u043f\u0435\u0440\u0435\u043d\u0430\u043b\u0430\u0434\u043a\u0435.\u0418 \u0432\u043e\u0442 \u0432 \u044d\u0442\u043e\u0442 \u043c\u043e\u043c\u0435\u043d\u0442 \u043f\u043e\u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f O-PAS.\u0420\u0435\u0448\u0435\u043d\u0438\u0435: \u0435\u0434\u0438\u043d\u0430\u044f \u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u0430 \u043d\u0430 IEC 61499\u0418\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c \u043d\u0430 \u043b\u0438\u043d\u0438\u0438 \u041f\u041b\u041a \u0441\u043e \u0441\u0440\u0435\u0434\u043e\u0439 \u0438\u0441\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f (runtime) \u0434\u043b\u044f \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u044b\u0445 \u0431\u043b\u043e\u043a\u043e\u0432 \u0432 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0438\u0438 \u0441\u043e \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043e\u043c IEC 61499. \u0427\u0442\u043e\u0431\u044b \u043f\u043e\u043d\u044f\u0442\u044c, \u043f\u043e\u0447\u0435\u043c\u0443 \u044d\u0442\u043e \u0432\u0430\u0436\u043d\u043e, \u043d\u0443\u0436\u043d\u043e \u0441\u043d\u0430\u0447\u0430\u043b\u0430 \u0440\u0430\u0437\u043e\u0431\u0440\u0430\u0442\u044c\u0441\u044f \u0441 \u043e\u0442\u043b\u0438\u0447\u0438\u044f\u043c\u0438:IEC 61131 vs IEC 61499\u041f\u0430\u0440\u0430\u043c\u0435\u0442\u0440IEC 61131 (\u041f\u041b\u041a)IEC 61499\u041c\u043e\u0434\u0435\u043b\u044c \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f\u0426\u0438\u043a\u043b\u0438\u0447\u0435\u0441\u043a\u0430\u044f (scan cycle)\u0421\u043e\u0431\u044b\u0442\u0438\u0439\u043d\u043e-\u043e\u0440\u0438\u0435\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u0430\u044f\u041a\u0430\u043a?\u041a\u0430\u0436\u0434\u044b\u0439 \u0446\u0438\u043a\u043b: \u043f\u0440\u043e\u0447\u0438\u0442\u0430\u0442\u044c \u0432\u0445\u043e\u0434\u044b \u2192 \u0432\u044b\u043f\u043e\u043b\u043d\u0438\u0442\u044c \u043b\u043e\u0433\u0438\u043a\u0443 \u2192 \u0437\u0430\u043f\u0438\u0441\u0430\u0442\u044c \u0432\u044b\u0445\u043e\u0434\u044b\u0411\u043b\u043e\u043a\u0438 \u0441\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u044e\u0442 \u043f\u0440\u0438 \u0441\u043e\u0431\u044b\u0442\u0438\u044f\u0445, \u0441\u0438\u043d\u0445\u0440\u043e\u043d\u0438\u0437\u0438\u0440\u0443\u044e\u0442\u0441\u044f \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0420\u0430\u0441\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u0435\u041e\u0434\u043d\u0430 \u0431\u043e\u043b\u044c\u0448\u0430\u044f \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0430 \u0432 \u043e\u0434\u043d\u043e\u043c \u041f\u041b\u041a\u0424\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u044b\u0435 \u0431\u043b\u043e\u043a\u0438 \u043c\u043e\u0433\u0443\u0442 \u0431\u044b\u0442\u044c \u043d\u0430 \u0440\u0430\u0437\u043d\u044b\u0445 \u0443\u0437\u043b\u0430\u0445\u041f\u0440\u0438\u043c\u0435\u0440 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f\u041a\u043b\u0430\u0441\u0441\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u043a\u043e\u043d\u0432\u0435\u0439\u0435\u0440, \u0436\u0451\u0441\u0442\u043a\u0438\u0439 \u0446\u0438\u043a\u043b\u0413\u0438\u0431\u043a\u043e\u0435 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0441\u0442\u0432\u043e, \u0440\u0435\u0430\u043a\u0442\u0438\u0432\u043d\u044b\u0435 \u0441\u0438\u0441\u0442\u0435\u043c\u044b\u041c\u0430\u0441\u0448\u0442\u0430\u0431\u0438\u0440\u0443\u0435\u043c\u043e\u0441\u0442\u044c\u0414\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0435\u0449\u0451 \u041f\u041b\u041a \u0441\u043b\u043e\u0436\u043d\u043e\u0414\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0435\u0449\u0451 \u0443\u0437\u0435\u043b \u043f\u0440\u043e\u0441\u0442\u043e\u0414\u043b\u044f \u043a\u043e\u0431\u043e\u0442\u043e\u0432 \u044d\u0442\u043e \u043a\u0440\u0438\u0442\u0438\u0447\u043d\u043e:\u0421 IEC 61131 (\u0446\u0438\u043a\u043b\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u043f\u043e\u0434\u0445\u043e\u0434):S7 \u041f\u041b\u041a \u043a\u0430\u0436\u0434\u044b\u0435 100 \u043c\u0441 \u043e\u043f\u0440\u0430\u0448\u0438\u0432\u0430\u0435\u0442 \u0434\u0430\u0442\u0447\u0438\u043a \u0434\u0430\u043b\u044c\u043d\u043e\u0441\u0442\u0438 (\u201c\u0434\u0435\u0442\u0435\u043b\u044c \u043f\u0440\u0438\u0431\u044b\u043b\u0430?\u201d)\u041a\u043e\u0431\u043e\u0442 \u043a\u0430\u0436\u0434\u044b\u0435 50 \u043c\u0441 \u043e\u043f\u0440\u0430\u0448\u0438\u0432\u0430\u0435\u0442 S7 (\u201c\u0435\u0441\u0442\u044c \u043a\u043e\u043c\u0430\u043d\u0434\u0430?\u201d)\u0418\u0445 \u043d\u0443\u0436\u043d\u043e \u0441\u0438\u043d\u0445\u0440\u043e\u043d\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u0442\u044c, \u0438\u043d\u0430\u0447\u0435 \u043f\u0440\u043e\u043f\u0443\u0441\u0442\u0438\u0448\u044c \u0441\u043e\u0431\u044b\u0442\u0438\u0435 \u0438\u043b\u0438 \u0431\u0443\u0434\u0435\u0442 jitter\u0421 IEC 61499 (\u0441\u043e\u0431\u044b\u0442\u0438\u0439\u043d\u044b\u0439 \u043f\u043e\u0434\u0445\u043e\u0434):\u0414\u0430\u0442\u0447\u0438\u043a \u0441\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0435\u0442 \u2192 \u0441\u0440\u0430\u0437\u0443 \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u0442 \u0441\u043e\u0431\u044b\u0442\u0438\u0435\u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u044b\u0439 \u0431\u043b\u043e\u043a \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u0442 \u0441\u043e\u0431\u044b\u0442\u0438\u0435 \u2192 \u0442\u0443\u0442 \u0436\u0435 \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u0442 \u043a\u043e\u043c\u0430\u043d\u0434\u0443 \u0440\u043e\u0431\u043e\u0442\u0443\u0423\u043c\u0435\u043d\u044c\u0448\u0435\u043d\u043d\u044b\u0439 jitter, \u0440\u0435\u0430\u043a\u0442\u0438\u0432\u043d\u0430\u044f \u043b\u043e\u0433\u0438\u043a\u0430\u0427\u0442\u043e \u0434\u0430\u0435\u0442 OpenFBOpenFB \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u043f\u0438\u0441\u0430\u0442\u044c \u043b\u043e\u0433\u0438\u043a\u0443 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u043e\u0433\u043e \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u0431\u043b\u043e\u043a\u0430 \u0432 \u043e\u0431\u0449\u0435\u043c 61499 \u043f\u0440\u043e\u0435\u043a\u0442\u0435 \u043d\u0430 Python \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044f \u0432\u0441\u044e \u0435\u0433\u043e \u044d\u043a\u043e\u0441\u0438\u0441\u0442\u0435\u043c\u0443:class PickAndPlaceLogic(fb.FunctionBlock):    &#171;&#187;&#187;\u041b\u043e\u0433\u0438\u043a\u0430 \u0437\u0430\u0445\u0432\u0430\u0442\u0430 \u0434\u0435\u0442\u0430\u043b\u0438 \u0441 \u0432\u0438\u0434\u0435\u043d\u0438\u0435\u043c&#187;&#187;&#187;        def on_part_detected_event(self, detection_result):        # \u0412\u0438\u0434\u0435\u043d\u0438\u0435 \u043e\u0431\u043d\u0430\u0440\u0443\u0436\u0438\u043b\u043e \u0434\u0435\u0442\u0430\u043b\u044c \u0441 \u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442\u0430\u043c\u0438        part_coords = detection_result.coordinates        part_orientation = detection_result.rotation                # \u041e\u0442\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u043c \u043a\u043e\u043c\u0430\u043d\u0434\u0443 \u0440\u043e\u0431\u043e\u0442\u0443 \u0447\u0435\u0440\u0435\u0437 OPC UA        self.robot_client.move_to_and_grasp(            position=part_coords,            orientation=part_orientation,            force=5  # \u043d\u044c\u044e\u0442\u043e\u043d\u044b        )        # \u041f\u0443\u0431\u043b\u0438\u043a\u0443\u0435\u043c \u0441\u043e\u0431\u044b\u0442\u0438\u0435 \u0434\u043b\u044f \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0433\u043e \u0431\u043b\u043e\u043a\u0430        self.output(&#171;part_grasped&#187;)class QualityInspectionLogic(fb.FunctionBlock):    &#171;&#187;&#187;\u041a\u043e\u043d\u0442\u0440\u043e\u043b\u044c \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0430 \u043f\u043e\u0441\u043b\u0435 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0438&#187;&#187;&#187;        def on_processing_complete(self, result_image):        # ML-\u043c\u043e\u0434\u0435\u043b\u044c \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u0442 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u043e        quality_score = self.quality_model.predict(result_image)                if quality_score &gt; self.threshold:            self.output(&#171;part_ok&#187;)        else:            self.output(&#171;part_defect&#187;)            self.publish_metrics({                &#171;defect_type&#187;: self.classifier.classify(result_image),                &#171;timestamp&#187;: time.time()            })\u041a\u0430\u0436\u0434\u044b\u0439 \u0431\u043b\u043e\u043a:\u041c\u043e\u0436\u0435\u0442 \u0440\u0430\u0437\u043c\u0435\u0449\u0430\u0442\u044c\u0441\u044f \u043d\u0430 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u043e\u0439 \u043f\u043e\u0434\u0445\u043e\u0434\u044f\u0449\u0435\u0439 \u043c\u0430\u0448\u0438\u043d\u0435 (Raspberry Pi \u0434\u043b\u044f \u043c\u0430\u0448\u0438\u043d\u043d\u043e\u0433\u043e \u0437\u0440\u0435\u043d\u0438\u044f, \u041f\u0440\u043e\u043c\u041f\u041a \u0438\u043b\u0438 Edge \u0441\u0435\u0440\u0432\u0435\u0440 \u0434\u043b\u044f ML, \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440 \u043a\u043e\u0431\u043e\u0442\u0430 \u0441 \u043f\u043e\u043b\u0435\u0432\u043e\u0439 \u0448\u0438\u043d\u043e\u0439)\u041e\u0431\u0449\u0435\u043d\u0438\u0435 \u0447\u0435\u0440\u0435\u0437 \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u044b\u0435 \u043f\u0440\u043e\u0442\u043e\u043a\u043e\u043b\u044b (OPC UA, MQTT)\u041d\u0435 \u0437\u0430\u0432\u0438\u0441\u0438\u0442 \u043e\u0442 \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u043e\u0433\u043e \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044f \u043e\u0431\u043e\u0440\u0443\u0434\u043e\u0432\u0430\u043d\u0438\u044f\u041c\u043e\u0436\u0435\u0442 \u0432\u043a\u043b\u044e\u0447\u0430\u0442\u044c Python \u043a\u043e\u0434, ML-\u043c\u043e\u0434\u0435\u043b\u0438, \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0443 \u043e\u0431\u0440\u0430\u0437\u043e\u0432 \u2014 \u0432\u0441\u0451 \u0432 \u043e\u0434\u043d\u043e\u043c \u043f\u0440\u043e\u0435\u043a\u0442\u0435\u041f\u0440\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u043a\u0435\u0439\u0441: PCBA \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0441\u0442\u0432\u043e\u0412\u0435\u0440\u043d\u0451\u043c\u0441\u044f \u043a \u043f\u0440\u0438\u043c\u0435\u0440\u0443 \u0438\u0437 \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0435\u0439 \u0441\u0442\u0430\u0442\u044c\u0438: \u0441\u0431\u043e\u0440\u043a\u0430 \u044d\u043b\u0435\u043a\u0442\u0440\u043e\u043d\u043d\u044b\u0445 \u043f\u043b\u0430\u0442 (PCBA).\u041f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b:3\u20135 \u0440\u0430\u0437\u043d\u044b\u0445 \u0442\u0438\u043f\u043e\u0432 \u043f\u043b\u0430\u0442 \u0432 \u0434\u0435\u043d\u044c\u041f\u0435\u0440\u0435\u043d\u0430\u043b\u0430\u0434\u043a\u0430 \u043c\u0435\u0436\u0434\u0443 \u0442\u0438\u043f\u0430\u043c\u0438 5\u201310 \u0440\u0430\u0437 \u0432 \u0434\u0435\u043d\u044c\u0422\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f 98%+ \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u043e (\u043a\u043e\u043d\u0442\u0440\u043e\u043b\u044c \u0434\u0435\u0444\u0435\u043a\u0442\u043e\u0432)\u041a\u043e\u0431\u043e\u0442 + CV \u0434\u043b\u044f \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u044f\u0422\u0435\u043a\u0443\u0449\u0438\u0439 \u043f\u043e\u0434\u0445\u043e\u0434 :\u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510\u2502 UR \u043a\u043ebot        \u2502  PolyScope \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435\u2502 PolyScope 5     \u2502  (\u043f\u043e 30 \u043c\u0438\u043d \u043d\u0430 \u043f\u0435\u0440\u0435\u043d\u0430\u043b\u0430\u0434\u043a\u0443)\u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518        \u2191\u2193\u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510\u2502 Siemens S7      \u2502  TIA Portal \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435\u2502 S7-1200         \u2502  (\u043f\u043e 20 \u043c\u0438\u043d)\u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518        \u2191\u2193\u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510\u2502 \u0412\u0438\u0434\u0435\u043d\u0438\u0435 (Linux) \u2502  Python \u043a\u043e\u0434 \u043f\u0435\u0440\u0435\u0434\u0435\u043b\u0430\u0442\u044c\u2502 Basler camera   \u2502  (\u043f\u043e 20 \u043c\u0438\u043d + \u0442\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435)\u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518        \u2191\u2193   OPC UA binding   (20 \u043c\u0438\u043d \u043e\u0442\u043b\u0430\u0434\u043a\u0438)   \u0418\u0422\u041e\u0413\u041e \u041f\u0415\u0420\u0415\u041d\u0410\u041b\u0410\u0414\u041a\u0410: ~90 \u043c\u0438\u043d\u041f\u043e\u0434\u0445\u043e\u0434 \u0441 O-PAS:\u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510\u2502  O-PAS                 \u2502\u2502  (\u0435\u0434\u0438\u043d\u044b\u0439 \u043f\u0440\u043e\u0435\u043a\u0442 61499)          \u2502\u2502                                 \u2502\u2502  \u2022 Robot \u0431\u043b\u043e\u043a (OPC UA)          \u2502\u2502  \u2022 Vision \u0431\u043b\u043e\u043a (Python + ML)    \u2502\u2502  \u2022 Logic \u0431\u043b\u043e\u043a (IEC 61499)       \u2502\u2502  \u2022 Quality \u0431\u043b\u043e\u043a (ML inference)  \u2502\u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518        \u2193 YAML \u043a\u043e\u043d\u0444\u0438\u0433 \u2193    Product_A.yaml \u2192 \u043d\u043e\u0432\u044b\u0435 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044bProduct_B.yaml \u2192 \u043d\u043e\u0432\u044b\u0435 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b    \u0418\u0422\u041e\u0413\u041e \u041f\u0415\u0420\u0415\u041d\u0410\u041b\u0410\u0414\u041a\u0410: ~3\u20135 \u043c\u0438\u043d\u0412\u043c\u0435\u0441\u0442\u043e \u0442\u043e\u0433\u043e, \u0447\u0442\u043e\u0431\u044b \u043f\u0435\u0440\u0435\u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043a\u0430\u0436\u0434\u0443\u044e \u0441\u0438\u0441\u0442\u0435\u043c\u0443 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u043e, \u0432\u044b \u043f\u0440\u043e\u0441\u0442\u043e \u0437\u0430\u0433\u0440\u0443\u0436\u0430\u0435\u0442\u0435 \u0434\u0440\u0443\u0433\u043e\u0439 YAML-\u043a\u043e\u043d\u0444\u0438\u0433, OpenFB \u043f\u0440\u0438\u043c\u0435\u043d\u0438\u0442 \u043d\u043e\u0432\u044b\u0435 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b \u043a\u043e \u0432\u0441\u0435\u043c \u0431\u043b\u043e\u043a\u0430\u043c \u043e\u0434\u043d\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u043e.\u041f\u043e\u0447\u0435\u043c\u0443 \u044d\u0442\u043e \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442: O-PAS \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u0438\u0437\u0430\u0446\u0438\u044fOpenFB \u0432\u0441\u0442\u0440\u043e\u0435\u043d \u0432 \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u0443 Open Process Automation (O-PAS), \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0435\u0442:\u041e\u0442\u043a\u0440\u044b\u0442\u044b\u0435 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u044b \u2014 \u0432\u0441\u0435 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u044b \u0433\u043e\u0432\u043e\u0440\u044f\u0442 \u043d\u0430 \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u044b\u0445 \u043f\u0440\u043e\u0442\u043e\u043a\u043e\u043b\u0430\u0445 (OPC UA, MQTT)\u041d\u0435\u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u044c \u043e\u0442 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044f \u2014 \u043a\u043e\u0431\u043e\u0442 \u043e\u0442 UR, \u043c\u0430\u0448\u0438\u043d\u043d\u043e\u0435 \u0437\u0440\u0435\u043d\u0438\u0435 \u043e\u0442 Basler, \u0437\u0430\u0445\u0432\u0430\u0442 \u043e\u0442 OnRobot \u0440\u0430\u0431\u043e\u0442\u0430\u044e\u0442 \u0432\u043c\u0435\u0441\u0442\u0435\u041c\u043e\u0434\u0443\u043b\u044c\u043d\u043e\u0441\u0442\u044c \u2014 \u043a\u0430\u0436\u0434\u044b\u0439 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442 \u043c\u043e\u0436\u043d\u043e \u0437\u0430\u043c\u0435\u043d\u0438\u0442\u044c \u043d\u0430 \u0430\u043d\u0430\u043b\u043e\u0433 \u0431\u0435\u0437 \u043f\u0435\u0440\u0435\u0434\u0435\u043b\u043a\u0438 \u043b\u043e\u0433\u0438\u043a\u0438\u041f\u0440\u0435\u0434\u0441\u043a\u0430\u0437\u0443\u0435\u043c\u043e\u0441\u0442\u044c \u2014 \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u044b\u0435 \u0431\u043b\u043e\u043a\u0438 \u0441\u043b\u0435\u0434\u0443\u044e\u0442 \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u043e\u043c\u0443 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u0443 IEC 61499\u042d\u0442\u043e \u043e\u0441\u043e\u0431\u0435\u043d\u043d\u043e \u0432\u0430\u0436\u043d\u043e \u0434\u043b\u044f \u0433\u0438\u0431\u043a\u043e\u0433\u043e \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0441\u0442\u0432\u0430, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e:\u0417\u0430\u0432\u0442\u0440\u0430 \u0432\u044b \u0437\u0430\u0445\u043e\u0442\u0438\u0442\u0435 \u0437\u0430\u043c\u0435\u043d\u0438\u0442\u044c \u043a\u043e\u0431\u043e\u0442\u0430 \u0441 UR \u043d\u0430 KUKA \u0438\u043b\u0438 St\u00e4ubli\u0411\u0435\u0437 OpenFB: \u043f\u0435\u0440\u0435\u0434\u0435\u043b\u044b\u0432\u0430\u0442\u044c \u0432\u0441\u044e \u043b\u043e\u0433\u0438\u043a\u0443\u0421 OpenFB: \u043f\u0440\u043e\u0441\u0442\u043e \u043d\u043e\u0432\u0430\u044f OPC UA \u043c\u043e\u0434\u0435\u043b\u044c, \u043e\u0441\u0442\u0430\u043b\u044c\u043d\u043e\u0435 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442\u0427\u0435\u0440\u0435\u0437 \u0433\u043e\u0434 \u043f\u043e\u044f\u0432\u0438\u0442\u0441\u044f \u043d\u043e\u0432\u0430\u044f ML-\u043c\u043e\u0434\u0435\u043b\u044c \u0434\u043b\u044f \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u044f \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0430\u0411\u0435\u0437 OpenFB: \u043f\u0435\u0440\u0435\u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440 \u043c\u0430\u0448\u0438\u043d\u043d\u043e\u0433\u043e \u0437\u0440\u0435\u043d\u0438\u044f, \u0442\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c\u0421 OpenFB: \u0441\u043a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043d\u043e\u0432\u044b\u0439 .onnx \u0444\u0430\u0439\u043b, \u043f\u0435\u0440\u0435\u0437\u0430\u0433\u0440\u0443\u0437\u0438\u0442\u044c\u041d\u0443\u0436\u043d\u043e \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0435\u0449\u0451 \u043e\u0434\u043d\u0443 \u043b\u0438\u043d\u0438\u044e \u0441 \u043f\u043e\u0445\u043e\u0436\u0435\u0439 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0435\u0439\u0411\u0435\u0437 OpenFB: \u043b\u0438\u0446\u0435\u043d\u0437\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043d\u043e\u0432\u044b\u0439 \u041f\u041b\u041a, \u043d\u043e\u0432\u0443\u044e \u0441\u0438\u0441\u0442\u0435\u043c\u0443 CV, \u0438\u043d\u0442\u0435\u0433\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c\u0421 OpenFB: \u0441\u043a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u0442\u044c YAML, \u0440\u0430\u0437\u0432\u0435\u0440\u043d\u0443\u0442\u044c \u043d\u0430 \u043d\u043e\u0432\u043e\u043c \u0443\u0437\u043b\u0435 (\u0442\u043e\u0442 \u0436\u0435 Linux, Raspberry Pi \u0438\u043b\u0438 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440)\u0422\u0438\u043f\u0438\u0447\u043d\u0430\u044f \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u0430 \u0443\u0437\u043b\u0430 OpenFB\u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510\u2502            OpenFB Runtime (Orchestration)             \u2502\u2502  Python + IEC 61499 (\u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u043d\u0430 Linux\/Raspberry Pi) \u2502\u2502                                                      \u2502\u2502  \u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510  \u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510  \u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510 \u2502\u2502  \u2502 Robot          \u2502  \u2502 Vision Block \u2502  \u2502 Quality  \u2502 \u2502\u2502  \u2502 Management     \u2502  \u2502 (TensorFlow) \u2502  \u2502 Block    \u2502 \u2502\u2502  \u2502 Block          \u2502  \u2502              \u2502  \u2502 (ML)     \u2502 \u2502\u2502  \u2502 (OPC UA)       \u2502  \u2502 (GPU \u0443\u0437\u0435\u043b)   \u2502  \u2502          \u2502 \u2502\u2502  \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518  \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518  \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518 \u2502\u2502         \u2502                   \u2502                \u2502       \u2502\u2502    EVENTS+DATA          MQTT PUB         OPC UA     \u2502\u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518        \u2502                   \u2502                \u2502        \u2193                   \u2193                \u2193    \u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510      \u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510    \u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510    \u2502UR Cobot \u2502      \u2502Raspberry \u2502    \u2502 Database\/  \u2502    \u2502         \u2502      \u2502 Pi 5 GPU  \u2502    \u2502 Analytics  \u2502    \u2502Polyscope\u2502      \u2502          \u2502    \u2502            \u2502    \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518      \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518    \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518\u041a\u0430\u0436\u0434\u044b\u0439 \u0431\u043b\u043e\u043a \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u043d\u0435\u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e:\u041e\u0431\u043d\u043e\u0432\u043b\u0451\u043d\u041c\u0430\u0441\u0448\u0442\u0430\u0431\u0438\u0440\u043e\u0432\u0430\u043d (\u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c GPU)\u0417\u0430\u043c\u0435\u043d\u0451\u043d\u041e\u0442\u043b\u0430\u0436\u0435\u043d\u041a\u0435\u0439\u0441 \u044d\u043a\u043e\u043d\u043e\u043c\u0438\u043a\u0438\u041f\u0440\u0435\u0434\u043f\u043e\u043b\u043e\u0436\u0438\u043c, \u0432\u044b \u0432\u043d\u0435\u0434\u0440\u044f\u0435\u0442\u0435 PCBA \u043b\u0438\u043d\u0438\u044e \u0441 \u043a\u043e\u0431\u043e\u0442\u043e\u043c \u0438 CV.\u0421\u0442\u0430\u0442\u044c\u044f\u0422\u0440\u0430\u0434\u0438\u0446\u0438\u043e\u043d\u043d\u044b\u0439 \u043f\u043e\u0434\u0445\u043e\u0434O-PAS + OpenFB\u0421\u0442\u043e\u0438\u043c\u043e\u0441\u0442\u044c \u043e\u0431\u043e\u0440\u0443\u0434\u043e\u0432\u0430\u043d\u0438\u044f\u20ac80K\u20ac80K (\u043e\u0434\u043d\u043e \u0438 \u0442\u043e \u0436\u0435)\u041b\u0438\u0446\u0435\u043d\u0437\u0438\u0438 \u041f\u041e (S7, OPC UA)\u20ac40K\u20ac0\u0412\u0440\u0435\u043c\u044f \u0438\u043d\u0442\u0435\u0433\u0440\u0430\u0446\u0438\u0438120 \u0447\u0430\u0441\u043e\u043260 \u0447\u0430\u0441\u043e\u0432\u0417\u0430\u0440\u043f\u043b\u0430\u0442\u0430 \u0438\u043d\u0442\u0435\u0433\u0440\u0430\u0442\u043e\u0440\u0430 (\u20ac80\/\u0447)\u20ac9,600\u20ac4,800\u0418\u0442\u043e\u0433\u043e \u043a\u0430\u043f\u0438\u0442\u0430\u043b\u044c\u043d\u044b\u0435 \u0437\u0430\u0442\u0440\u0430\u0442\u044b\u20ac129,600\u20ac84,800\u042d\u043a\u043e\u043d\u043e\u043c\u0438\u044f \u043d\u0430 \u0438\u043d\u0442\u0435\u0433\u0440\u0430\u0446\u0438\u0438\u2014\u20ac44,800\u041d\u043e \u0433\u043b\u0430\u0432\u043d\u043e\u0435 \u2014 \u0442\u0435\u043a\u0443\u0449\u0438\u0435 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0438:\u0414\u043e\u043f\u0443\u0441\u0442\u0438\u043c, \u0432\u044b \u0434\u0435\u043b\u0430\u0435\u0442\u0435 8 \u043f\u0435\u0440\u0435\u043d\u0430\u043b\u0430\u0434\u043e\u043a \u0432 \u0434\u0435\u043d\u044c, 250 \u0440\u0430\u0431\u043e\u0447\u0438\u0445 \u0434\u043d\u0435\u0439 \u0432 \u0433\u043e\u0434\u0443.\u041c\u0435\u0442\u0440\u0438\u043a\u0430\u0422\u0440\u0430\u0434\u0438\u0446\u0438\u043e\u043d\u043d\u044b\u0439O-PAS + OpenFB\u0412\u0440\u0435\u043c\u044f \u043f\u0435\u0440\u0435\u043d\u0430\u043b\u0430\u0434\u043a\u043890 \u043c\u0438\u043d5 \u043c\u0438\u043d\u041f\u0440\u043e\u0441\u0442\u043e\u0439 \u0432 \u0433\u043e\u0434 (\u0447)2000111\u0417\u0430\u0440\u043f\u043b\u0430\u0442\u0430 \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440\u0430 (\u20ac25\/\u0447)\u20ac50,000\u20ac2,775\u0413\u043e\u0434\u043e\u0432\u0430\u044f \u044d\u043a\u043e\u043d\u043e\u043c\u0438\u044f\u2014\u20ac47,225\u041e\u0431\u0449\u0430\u044f \u0433\u043e\u0434\u043e\u0432\u0430\u044f \u044d\u043a\u043e\u043d\u043e\u043c\u0438\u044f: \u20ac47,225 + \u0430\u043c\u043e\u0440\u0442\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0435 \u043b\u0438\u0446\u0435\u043d\u0437\u0438\u0438 (\u20ac40K \/ 5 \u043b\u0435\u0442 = \u20ac8K\/\u0433\u043e\u0434) = \u20ac55,225.ROI: (\u20ac44,800 + \u20ac55,225) \/ \u20ac129,600 = 0.77 \u043b\u0435\u0442 = 9 \u043c\u0435\u0441\u044f\u0446\u0435\u0432.\u0418 \u044d\u0442\u043e \u043d\u0435 \u0443\u0447\u0438\u0442\u044b\u0432\u0430\u044f \u044d\u043a\u043e\u043d\u043e\u043c\u0438\u044e \u043d\u0430 \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u044f\u0445 \u041f\u041e \u0438 \u0437\u0430\u043c\u0435\u043d\u0435 \u043e\u0431\u043e\u0440\u0443\u0434\u043e\u0432\u0430\u043d\u0438\u044f \u0431\u043b\u0430\u0433\u043e\u0434\u0430\u0440\u044f \u043e\u0442\u0441\u0443\u0442\u0441\u0442\u0432\u0438\u044e \u0432\u0435\u043d\u0434\u043e\u0440-\u043b\u043e\u043a\u0438\u043d\u0430.\u041a\u0430\u043a \u044d\u0442\u043e \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u043d\u0430 \u043f\u0440\u0430\u043a\u0442\u0438\u043a\u0435\u0412\u044b \u043f\u0438\u0448\u0435\u0442\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u044b\u0435 \u0431\u043b\u043e\u043a\u0438 \u043d\u0430 Python:vision_block.py:class VisionDetectionBlock(fb.FunctionBlock):    def __init__(self, config):        self.model = load_model(config[&#8216;model_path&#8217;])        self.threshold = config[&#8216;quality_threshold&#8217;]        self.mqtt_client = mqtt.Client()        def process_image(self, image_bytes):        image = cv2.imdecode(image_bytes, cv2.IMREAD_COLOR)        detections = self.model.predict(image)                for detection in detections:            if detection.confidence &gt; self.threshold:                self.mqtt_publish(&#171;detection_found&#187;, {                    &#8216;position&#8217;: detection.bbox,                    &#8216;confidence&#8217;: detection.confidence                })config_product_a.yaml:vision:  model_path: models\/pcba_detector_v2.onnx  quality_threshold: 0.95  robot:  speed: 0.8  force: 5.0config_product_b.yaml:vision:&#8230;<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[],"tags":[],"class_list":["post-479779","post","type-post","status-publish","format-standard","hentry"],"_links":{"self":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/479779","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=479779"}],"version-history":[{"count":0,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/479779\/revisions"}],"wp:attachment":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=479779"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=479779"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=479779"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}