رصد درجة الحرارة المعتمدة

تستخدم شركتنا نظام إدارة الجودة (QMS). كجزء من شهادة ISO: 9001 ، تم طلب جمع قراءات درجة الحرارة والرطوبة في بعض الغرف ، على سبيل المثال ، في غرفة الخادم أو في المستودعات.

لأن نظرًا لأن جميع الإجراءات البيروقراطية تتطلب قطعًا من الورق ، فيجب أن يتم جمع البيانات بواسطة جهاز تم التحقق منه.

في هذا الصدد ، تم شنق مقياس الرطوبة الأكثر شيوعًا ، ولعدة سنوات كتب الناس أدلة يومية في مجلة. توافق ، غير مريح.


من أجل أتمتة هذا الإجراء ، بدأ البحث عن جهاز لجمع درجة الحرارة والرطوبة.

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

من حيث المبدأ ، كان هناك الكثير من المجموعات الجاهزة لهذا ، على سبيل المثال ، Equicom PING3 أو netping ، وهناك العديد من الأمثلة الأخرى ، يمكنك أيضًا إنشاء نظامك على اردوينو أو توت العليق ،
ولكن كل هذه الخيارات لم يصلح ل ليس لديهم جميعًا شهادات ، أو بالأحرى تحقق من الأرصاد الجوية ، وبالتالي لا يمكن اعتبارهم أدوات قياس رسمية وليست مناسبة لتمرير ISO: 9001.

نتيجة لذلك ، تم العثور على جهاز قادر على نقل البيانات عبر الإيثرنت وإدراجه في سجل أدوات القياس. اتضح أن يكون "Ivit-M.E." وضعت في نوفوسيبيرسك ، أنتجت أيضا هناك. تم الطلب (بالمناسبة ، يستغرق الأمر وقتًا طويلاً. وقت الإنتاج حوالي شهر ، بالإضافة إلى التحقق ، بالإضافة إلى التسليم إلى موسكو).

كل هذا يأتي في هذا النموذج. عندما تستلم السلعة ستدرك على الفور أن هذا إنتاج روسي :-)





مزود الطاقة (أمر منفصل) غير متصل بالمستشعر.

لذلك ، نحن تفكيكها والبدء في الاتصال.





نحن ربط المدخلات على أي حال. التيار المتردد. كنت كابل الطاقة العادية من جهاز كمبيوتر.

الإخراج هو التيار المباشر. يتم توقيع زائد وناقص مباشرة على السبورة.

ثم نقوم بتوصيل الأسلاك مباشرة إلى المستشعر نفسه. وفقا للتعليمات



المحطات نفسها تبدو مثل هذا:





قم بإيقاف التشغيل ، ثم قم بإزالة وانتزاع الخطوط الملاحية المنتظمة من النصف على شكل حرف L.
نحن توصيل الطاقة والشبكة.



والنتيجة هي شيء مثل هذا:



من السلبيات لهذا الجهاز - لا يعرف كيفية إرسال البيانات عبر SNMP ، إنه يعمل باستخدام بروتوكول Modbus.

من حيث المبدأ ، هناك العديد من أنظمة SCADA وخوادم OPC التي يمكن قراءتها عبر Modbus ، ولكن معظمها إما مدفوع أو يتم جمعها في بعض قواعد البيانات الخاصة بها ، والتي من غير الواضح أيضًا كيفية سحب البيانات لإرسالها إلى zabbiks في المستقبل.

لذلك ، تم كتابة نص بيثون صغير للوصول مباشرة إلى المستشعر.
يتم تخزين البيانات الموجودة في السجلات في شكل تعويم وتأتي عند الوصول إليها في هذا النموذج

READ_INPUT_REGISTERS (16855, 57976) 

لتكوين المستشعر يوجد تطبيق config-ivit.exe

لا يوجد الكثير من الإعدادات هناك. يمكنك تكوين الشبكة والبريد.



في المكون ، يتم تحديد السجلات في النظام السداسي عشر ، ولكن في برنامج Python تحتاج إلى تحديد السجلات في النظام العشري.

نجلب البيانات إلى نموذج عادي يمكن قراءته وفقًا لمعيار ieee-754.

هناك طريقتان لتنفيذ نقل البيانات الواردة من البرنامج النصي إلى zabbix.

الطريقة الأولى: استخدام userparametr ، على بعض العقدة حيث يتم تثبيت وكيل بيثون و zabbiks. على سبيل المثال ، كان لدي على خادم zabbix نفسه.

 import modbus_tk.defines as cst import modbus_tk.modbus_tcp as modbus_tcp import sys def check_reg(reg,ip): reg = int(reg) master = modbus_tcp.TcpMaster(host=ip, port=int(502)) master.set_timeout(1.0) getDI = master.execute(1,cst.READ_INPUT_REGISTERS, reg, 2) Num1 = str(bin(getDI[0]))[2:] while len(Num1) < 16: Num1 = '0' + Num1 Num2 = str(bin(getDI[1]))[2:] while len(Num2) < 16: Num2 = '0' + Num2 res = Num1 + Num2 znak = int(res[0], 2) znak2 = (0 - 1) ** znak e = int(res[1:9], 2) - 127 exp = 2 ** e m = 1 + (int(res[9:], 2) / float(2 ** 23)) F = znak2 * exp * m print(round(F, 1)) check_reg(sys.argv[1],sys.argv[2]) 

من جانب zabbix في zabbix_agentd.conf ، حدد:

 UserParameter=check_reg[*], /usr/bin/python /home/appliance/scada.py $1 $2 

في zabbix نفسها ، سنحتاج إلى نقل رقم التسجيل وعنوان IP الخاص بالجهاز الذي نريد الاتصال به فقط:

على سبيل المثال: check_reg[22,192.168.100.100]

أرقام التسجيل:

22 - الرطوبة
34 - درجة الحرارة
36 - نقطة الندى

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

 import modbus_tk.defines as cst import modbus_tk.modbus_tcp as modbus_tcp import sys, os def check_reg(reg,ip): reg = int(reg) master = modbus_tcp.TcpMaster(host=ip, port=int(502)) master.set_timeout(1.0) getDI = master.execute(1,cst.READ_INPUT_REGISTERS, reg, 2) Num1 = str(bin(getDI[0]))[2:] while len(Num1) < 16: Num1 = '0' + Num1 Num2 = str(bin(getDI[1]))[2:] while len(Num2) < 16: Num2 = '0' + Num2 res = Num1 + Num2 znak = int(res[0], 2) znak2 = (0 - 1) ** znak e = int(res[1:9], 2) - 127 exp = 2 ** e m = 1 + (int(res[9:], 2) / float(2 ** 23)) F = znak2 * exp * m return round(F, 1) os.system('zabbix_sender -z 127.0.0.1 -s '+ sys.argv[2]+' -k Humidity -o '+ str(check_reg(22,sys.argv[1]))) os.system('zabbix_sender -z 127.0.0.1 -s '+sys.argv[2]+' -k Temper -o '+ str(check_reg(34,sys.argv[1]))) os.system('zabbix_sender -z 127.0.0.1 -s '+sys.argv[2]+' -k Rosa -o '+ str(check_reg(36,sys.argv[1]))) 

كل ما تبقى هو تشغيل هذا البرنامج النصي للتنفيذ على التاج ، مع تحديد عنوان IP للأجهزة فقط واسم المضيف للمضيف

 */1 * * * * /home/ivitsender.py 192.168.100.100 Ivit1 

 */1 * * * * /home/ivitsender.py 192.168.100.200 Ivit2 


بعد ذلك ، قم بتكوين مشغلات ، والتي تعتبر حاسمة بالنسبة لنا. على سبيل المثال ، الحد الأدنى أو الحد الأقصى لدرجة الحرارة والرطوبة.

هذا كل شيء. وبالتالي ، لقد حصلنا على مراقبة درجة حرارة معتمدة ، وهي مناسبة للمرور عبر QMS و ISO: 9001

محدث: تم تحديث البرنامج النصي ليتم إرساله عبر المرسل للاتصال بأجهزة استشعار متعددة

Source: https://habr.com/ru/post/ar470267/


All Articles