تنفيذ منصة Edge I-IoT مخصصة

في المادة السابقة قدمت لمحة موجزة عن الانترنت الصناعية الأشياء (I-تقنيات عمليات) وصفا للمنصة حافة الحوسبة. في هذه المقالة ، أرغب في عرض مثال بسيط على تطبيق نظام Edge I-IoT الأساسي باستخدام تقنيات مفتوحة المصدر شائعة.



صورة



من وجهة نظر معمارية ، تتطلب منصة إنترنت الأشياء حل المهام التالية:



  • تتطلب كمية البيانات المستلمة والمستلمة والمعالجة نطاقًا تردديًا عاليًا وتخزينًا وقدرة حاسوبية.
  • يمكن توزيع الأجهزة على مساحة جغرافية واسعة
  • تتطلب الشركات أن تتطور هندستها المعمارية باستمرار حتى يمكن تقديم خدمات جديدة للعملاء.


تتمثل إحدى ميزات منصة إنترنت الأشياء في الاستقلال بين الكائنات والإشارات ، مما يسمح بإجراء عمليات حسابية متوازية ، وزيادة الإنتاجية.



يتم جمع البيانات الواردة من أجهزة الاستشعار من المصادر: PLC و DCS والميكروكونترولر وما إلى ذلك ويمكن تخزينها في المجال الزمني لتجنب فقدان البيانات بسبب مشاكل الاتصال. يمكن أن تكون البيانات سلاسل زمنية (أحداث) ، أو بيانات شبه منظمة (سجلات وثنائيات) ، أو بيانات غير منظمة (صور). يتم جمع بيانات السلاسل الزمنية والأحداث بشكل متكرر (من كل ثانية إلى عدة دقائق). ثم يتم إرسالها عبر الشبكة وتخزينها في بحيرة بيانات مركزية وقاعدة بيانات التسلسل الزمني TSDB. يمكن أن تكون بحيرة البيانات قائمة على السحابة أو مركز بيانات محلي أو تخزين تابع لجهة خارجية.



يمكن معالجة البيانات على الفور باستخدام تحليل تدفق البيانات المسمى "المسار السريع" بآلية للتحقق من القواعد تعتمد على نقطة ضبط بسيطة أو ذكية. يمكن أن تشمل التحليلات المتقدمة التوائم الرقمية أو التعلم الآلي أو التعلم العميق أو التحليلات القائمة على الفيزياء. يمكن لمثل هذا النظام معالجة كمية كبيرة من البيانات (من عشر دقائق إلى شهر) من أجهزة استشعار مختلفة. يتم تخزين هذه البيانات في التخزين الوسيط. تسمى هذه التحليلات "المسار البارد" ، وكقاعدة عامة ، يتم تشغيلها بواسطة المجدول أو عندما تكون البيانات متاحة وتتطلب الكثير من موارد الحوسبة. غالبًا ما تحتاج التحليلات المتقدمة إلى معلومات إضافية مثل نموذج السيارة الخاضع للمراقبة والسمات التشغيلية ، والتي يمكن العثور عليها في سجل الأصول.يحتوي سجل الأصول على معلومات حول نوع الأصل ، بما في ذلك الاسم والرقم التسلسلي والاسم الرمزي والموقع والإمكانات التشغيلية وتاريخ الأجزاء التي يتكون منها والدور الذي يلعبه في عملية التصنيع. في سجل الأصول ، يمكننا تخزين قائمة بأبعاد كل أصل ، والاسم المنطقي ، ووحدة القياس ، ونطاق الحدود. في القطاع الصناعي ، تعد هذه المعلومات الثابتة ضرورية لنموذج تحليلي صحيح.في القطاع الصناعي ، تعتبر هذه المعلومات الثابتة ضرورية لنموذج تحليلي صحيح.في القطاع الصناعي ، تعتبر هذه المعلومات الثابتة ضرورية لنموذج تحليلي صحيح.



أسباب تطوير منصة مخصصة:



  • عائد الاستثمار: ميزانية صغيرة ؛
  • التكنولوجيا: استخدام التكنولوجيا بغض النظر عن المورد ؛
  • سرية البيانات؛
  • التكامل: الحاجة إلى تطوير مستوى من التكامل مع منصة جديدة أو قديمة ؛
  • قيود أخرى.


صورة



تدفق البيانات من طرف إلى طرف في I-IoT



مثال على التنفيذ المخصص لمنصة Edge



يوضح هذا الشكل تنفيذ روابط النظام الأساسي التالية:



  • مصدر البيانات: على سبيل المثال ، تم تحديد محاكي Simatic PLCSIM Advanced Controller مع خادم OPC المنشط ، كما هو موضح في المقالة السابقة ؛
  • تم اختيار منصة Node-Red الشهيرة مع تثبيت البرنامج المساعد node-red-contrib-opcua كبوابة حدودية ؛
  • يستخدم وسيط MQTT Mosquitto كمرسل لنقل البيانات بين الروابط الأخرى في الدفق ؛
  • يتم استخدام Apache Kafka كمنصة تدفق موزعة تعمل بمثابة تحليلات للمسار السريع باستخدام kafka-streams.


صورة



بوابة العقدة الحمراء الحافة



كبوابة حوسبة حافة ، سوف نستخدم Node-red ، وهو نظام أساسي مخصص بسيط يحتوي على العديد من المكونات الإضافية المختلفة. يتم لعب دور المحول الصناعي بواسطة المكون الإضافي node-red-contrib-opcua. لتجميع البيانات من وحدة التحكم بواسطة طريقة الاشتراك ، يتم استخدام العقد: OpcUa-Browser و OpcUa-client. في عقدة مستعرض OPC ، يتم تكوين عنوان url لخادم OPC (نقطة النهاية) والموضوع ، والذي يحدد مساحة الاسم واسم كتلة البيانات القابلة للقراءة ، على سبيل المثال: ns = 3 ؛ s = "HMI_Alarms_Area". في عقدة عميل OPC ، يتم أيضًا تحديد عنوان url لخادم OPC ، ويتم تعيين الاشتراك والفاصل الزمني لتحديث البيانات كإجراء.



التدفق الرئيسي للعقدة الحمراء
image



إعداد عقدة متصفح OPC
image



OPC-client
image



للاشتراك في قراءة بيانات متعددة ، من الضروري إعداد وتنزيل العلامات من وحدة التحكم ، وفقًا لبروتوكول OPC. للقيام بذلك ، أولاً ، يتم استخدام عقدة الحقن مع مربع الاختيار مرة واحدة فقط ، والذي يؤدي إلى قراءة مرة واحدة لكتل ​​البيانات المحددة في عقد متصفح OPC. ثم تتم معالجة البيانات بواسطة وظيفة فك التشفير والتصفية. بعد ذلك ، تشترك عقدة عميل OPC وتقرأ البيانات المتغيرة من وحدة التحكم. تعتمد المعالجة الإضافية للتيار على التنفيذ والمتطلبات المحددة. في المثال الخاص بي ، أقوم بمعالجة البيانات لإرسالها إلى وسيط MQTT إلى مواضيع مختلفة.



تعد علامات التبويب التحكم في HMI و Office تطبيقًا بسيطًا لـ HMI يعتمد على Scadavis.io ولوحة معلومات ذات لون أحمر عقدة كما هو موضح سابقًا في المقالة .



صورة



مثال على تحليل البيانات من عقدة متصفح OPC:



var items = msg.payload;
for (var i=0; i<items.length; i++) {
    var item = items[i];
	var ref = item.item;
	var nodeClass = ref.$nodeClass;
	var typeDef = ref.typeDefinition;
	var bname = ref.browseName;
	var ns=bname.namespaceIndex;
	var name=bname.name;
	var value = ref.value;
	var datatype = ref.dataType;
	// Select only want namespace variables
	if (ns==3) {
	    var newmsg={};
		newmsg.topic = 
		    ref.nodeId+
		    ";datatype="+datatype;
		newmsg.payload=value;
		node.send(newmsg);
	}
}


وسيط MQTT



يمكن استخدام أي تطبيق كوسيط. في حالتي ، تم تثبيت وسيط Mosquitto بالفعل . يقوم الوسيط بوظيفة نقل البيانات بين بوابة Edge والمشاركين الآخرين في النظام الأساسي. هناك أمثلة مع موازنة الحمل والبنية الموزعة ( مثل هنا ). في هذه الحالة ، سنقتصر على وسيط mqtt واحد مع نقل البيانات دون تشفير.



التخزين المحلي لبيانات السلاسل الزمنية



من الملائم تسجيل بيانات السلاسل الزمنية وتخزينها في قاعدة بيانات السلاسل الزمنية NoSql. تعمل حزمة InfluxData بشكل جيد لأغراضنا . نحتاج إلى أربع خدمات من هذا المكدس:



InfluxDB هي قاعدة بيانات سلاسل زمنية مفتوحة المصدر وهي جزء من مكدس TICK (Telegraf و InfluxDB و Chronograf و Kapacitor). مصمم لمعالجة البيانات عالية التحميل ويوفر لغة استعلام تشبه SQL InfluxQL للتفاعل مع البيانات.



Telegraf هو وكيل لجمع وإرسال المقاييس والأحداث إلى InfluxDB من أنظمة IoT الخارجية وأجهزة الاستشعار وما إلى ذلك. تم تكوينه لجمع البيانات من مواضيع mqtt.



Kapacitor هو محرك بيانات مدمج لـ InfluxDB 1.x ومكون متكامل في منصة InfluxDB. يمكن تكوين هذه الخدمة لمراقبة الإعدادات والإنذارات المختلفة ، بالإضافة إلى تثبيت معالج لإرسال الأحداث إلى أنظمة خارجية مثل كافكا والبريد الإلكتروني وما إلى ذلك.



Chronograf هو واجهة المستخدم والمكون الإداري لمنصة InfluxDB. تُستخدم لإنشاء لوحات معلومات بسرعة باستخدام مرئيات في الوقت الفعلي.



يمكن تشغيل جميع مكونات المكدس محليًا أو إعداد حاوية Docker.



صورة

جلب البيانات وتخصيص لوحات المعلومات باستخدام Chronograf



لبدء InfluxDB ، فقط قم بتشغيل الأمر influxd ، في إعدادات influxdb.conf يمكنك تحديد موقع التخزين والخصائص الأخرى ، بشكل افتراضي يتم تخزين البيانات في دليل المستخدم في دليل influxdb.



لبدء telegraf ، تحتاج إلى تشغيل الأمر telegraf -config telegraf.conf ، حيث يمكنك تحديد مصادر المقاييس والأحداث في الإعدادات ، في مثالنا لـ mqtt يبدو كما يلي:



# # Read metrics from MQTT topic(s)
 [[inputs.mqtt_consumer]]
   servers = ["tcp://192.168.1.107:1883"]
   qos = 0
   topics = ["HMI_Status_Area/#", "HMI_Alarms_Area/#"]
   data_format = "value"
   data_type = "float"  



في خاصية الخوادم ، حدد عنوان url للوسيط mqtt ، يمكن لـ qos ترك 0 ، إذا كان ذلك كافياً لكتابة البيانات دون تأكيد. في خاصية المواضيع ، حدد أقنعة mqtt للموضوعات التي سنقرأ البيانات منها. على سبيل المثال ، HMI_Status_Area / # يعني أننا نقرأ جميع الموضوعات التي لها بادئة HMI_Status_Area. وبالتالي ، فإن Telegraf لكل موضوع سيُنشئ مقياسه الخاص في قاعدة البيانات ، حيث سيكتب البيانات.



لبدء kapacitor ، تحتاج إلى تشغيل الأمر kapacitord -config kapacitor.conf. يمكن ترك الخصائص كإعدادات افتراضية ويمكن إجراء المزيد من الإعدادات باستخدام chronograf.

لبدء تشغيل chronograf ، ما عليك سوى تشغيل أمر chronograf الذي يحمل نفس الاسم. ستكون واجهة الويب متاحة localhost : 8888 /



لتكوين الإعدادات والإنذارات باستخدام Kapacitor ، يمكنك استخدامدليل . باختصار - تحتاج إلى الانتقال إلى علامة التبويب التنبيه في Chronograf وإنشاء قاعدة جديدة باستخدام زر Build Alert Rule ، فالواجهة سهلة الاستخدام ، وكل شيء يتم بصريًا. لإعداد إرسال نتائج المعالجة إلى كافكا ، إلخ. تحتاج إلى إضافة معالج في قسم الشروط



إعدادات معالج Kapacitor
image



توزيع البث مع أباتشي كافكا



بالنسبة للبنية المقترحة ، من الضروري فصل جمع البيانات عن المعالجة ، وتحسين قابلية التوسع واستقلالية الطبقة. يمكننا استخدام قائمة الانتظار لتحقيق هذا الهدف. يمكن أن يكون التطبيق عبارة عن خدمة رسائل Java (JMS) أو بروتوكول انتظار الرسائل المتقدم (AMQP) ، ولكن في هذه الحالة سنستخدم Apache Kafka. يتم دعم كافكا من قبل معظم منصات التحليلات ، ولديه أداء عالٍ للغاية وقابلية للتوسع ، ولديه مكتبة جيدة من نوع كافكا.



يمكنك استخدام المكون الإضافي Node-red node-red-contrib-kafka-manager للتفاعل مع كافكا . ولكن ، مع الأخذ في الاعتبار فصل الجمع عن معالجة البيانات ، سنقوم بتثبيت البرنامج المساعد MQTT ، الذي يشترك في موضوعات Mosquitto. البرنامج المساعد MQTT متاح هنا .



لتكوين الموصل ، انسخ kafka-connect-mqtt-1.1-SNAPSHOT.jar و org.eclipse.paho.client.mqttv3-1.0.2.jar مكتبات (أو إصدار آخر) إلى دليل kafka / libs /. بعد ذلك ، في الدليل / config ، تحتاج إلى إنشاء ملف خصائص mqtt.properties بالمحتوى التالي:



name=mqtt
connector.class=com.evokly.kafka.connect.mqtt.MqttSourceConnector
tasks.max=1
 
kafka.topic=streams-measures
mqtt.client_id=mqtt-kafka-123456789
 
mqtt.clean_session=true
mqtt.connection_timeout=30
mqtt.keep_alive_interval=60
 
mqtt.server_uris=tcp://192.168.1.107:1883
mqtt.topic=mqtt




بعد إطلاق zookeeper-server و kafka-server سابقًا ، يمكننا بدء تشغيل الموصل باستخدام الأمر:



connect-standalone.bat …\config\connect-standalone.properties …\config\mqtt.properties


من موضوع mqtt (mqtt.topic = mqtt) ، ستتم كتابة البيانات في موضوع كافكا التدفقات والتدابير (kafka.topic = streams-sources).



كمثال بسيط ، يمكنك إنشاء مشروع مخضرم باستخدام مكتبة kafka-streams.

باستخدام kafka-streams ، يمكنك تنفيذ العديد من الخدمات والسيناريوهات للتحليلات الساخنة ومعالجة تدفق البيانات.



مثال لمقارنة درجة الحرارة الحالية مع نقطة ضبط الفترة.
StreamsBuilder builder = new StreamsBuilder();

        KStream<String, String> source = builder.stream("streams-measures");

        KStream<Windowed<String>, String> max = source
                .selectKey((String key, String value) -> {
                        return getKey(key, value);
                    }
                )
                .groupByKey()
                .windowedBy(TimeWindows.of(Duration.ofSeconds(WINDOW_SIZE)))
                .reduce((String value1, String value2) -> {
                        double v1=getValue(value1);
                        double v2=getValue(value2);
                        if ( v1 > v2)
                            return value1;
                        else
                            return value2;
                    }
                )
                .toStream()
                .filter((Windowed<String> key, String value) -> {
                        String measure = tagMapping.get(key.key());
                        double parsedValue = getValue(value);

                        if (measure!=null) {
                            Double threshold = excursion.get(measure);
                            if (threshold!=null) {
                                if(parsedValue > threshold) {
                                    log.info(String.format("%s : %s; Threshold: %s", key.key(), parsedValue, threshold));
                                    return true;
                                }
                                return false;
                            }
                        } else {
                            log.severe("UNKNOWN MEASURE! Did you mapped? : " + key.key());
                        }
                        return false;
                    }
                );

        final Serde<String> STRING_SERDE = Serdes.String();
        final Serde<Windowed<String>> windowedSerde = Serdes.serdeFrom(
                new TimeWindowedSerializer<>(STRING_SERDE.serializer()),
                new TimeWindowedDeserializer<>(STRING_SERDE.deserializer(), TimeWindows.of(Duration.ofSeconds(WINDOW_SIZE)).size()));

        // the output
        max.to("excursion", Produced.with(windowedSerde, Serdes.String()));




تسجيل الأصول



في الواقع ، لا يُعد تسجيل الأصول مكونًا هيكليًا لمنصة Edge وهو جزء من بيئة إنترنت الأشياء السحابية. لكن هذا المثال يوضح كيفية تفاعل Edge و Cloud.



كسجل للأصول ، سنستخدم منصة ThingsBoard IoT الشهيرة ، والتي تعد واجهتها أيضًا بديهية تمامًا. التثبيت ممكن مع البيانات التجريبية. يمكن تثبيت النظام الأساسي محليًا أو في عامل إرساء أو باستخدام بيئة سحابية جاهزة .



تتضمن مجموعة البيانات التجريبية أجهزة اختبار (يمكنك بسهولة إنشاء جهاز جديد) يمكنك إرسال القيم إليها. يبدأ تطبيق ThingsBoard افتراضيًا باستخدام وسيط mqtt الخاص به ، والذي تحتاج إلى الاتصال وإرسال البيانات إليهبتنسيق json. لنفترض أننا نريد إرسال البيانات إلى ThingsBoard من TEST DEVICE A1. للقيام بذلك ، نحتاج إلى الاتصال بسمسار ThingBoard على المضيف المحلي: 1883 باستخدام A1_TEST_TOKEN كتسجيل دخول ، والذي يمكن نسخه من إعدادات الجهاز. ثم يمكننا نشر البيانات إلى الموضوع v1 / devices / me / telemetry: {“temperature”: 26}



صورة



تحتوي وثائق النظام الأساسي على دليل لإعداد نقل البيانات ومعالجة التحليلات في كافكا - تحليلات بيانات إنترنت الأشياء باستخدام Kafka و Kafka Streams و ThingsBoard



مثال على استخدام عقدة كافكا في Thingsboard
image





خاتمة



تجعل تقنيات تكنولوجيا المعلومات الحديثة والبروتوكولات المفتوحة من الممكن تصميم أنظمة بأي تعقيد. منصة الحافة هي نقطة الاتصال بين البيئة الصناعية ومنصة إنترنت الأشياء القائمة على السحابة. يمكن أن تتحلل إلى مكونات ماكرو ، من بينها تلعب بوابة الحدود دورًا رئيسيًا ، وهي مسؤولة عن نقل البيانات من الأجهزة إلى مركز بيانات إنترنت الأشياء. تتيح أدوات دفق البيانات المفتوحة التحليلات الفعالة والحوسبة المتطورة.



All Articles