Surveillance de température certifiée

Notre entreprise utilise un système de gestion de la qualité (SMQ). Dans le cadre de l'une des certifications ISO: 9001, il a été ordonné de collecter des relevés de température et d'humidité dans certaines pièces, par exemple dans la salle des serveurs ou dans les entrepôts.

Parce que Étant donné que toutes les procédures bureaucratiques nécessitent des morceaux de papier, la collecte des données doit être effectuée par un appareil vérifié.

À cet égard, l'hygromètre le plus courant a été pendu et pendant plusieurs années, des gens ont écrit des preuves quotidiennes dans un journal. D'accord, mal à l'aise.


Afin d'automatiser cette procédure, la recherche d'un appareil pour collecter la température et l'humidité a été lancée.

L'objectif était de collecter les données et de les transférer vers Zabbix. (Zabbix, aucun emplacement de stockage n'est requis pour le QMS, mais je ne voulais pas créer un autre système distinct pour la surveillance de la température).

En principe, il y avait de nombreux kits prêts à l'emploi pour cela, par exemple Equicom PING3 ou netping, et il y a encore un tas de tels exemples, vous pouvez également construire votre système sur arduino ou raspeberry,
mais toutes ces options ne convenaient pas, car tous n'ont pas de certification, ou plutôt de vérification métrologique, et ne peuvent donc pas être considérés comme des instruments de mesure officiels et ne conviennent pas pour passer ISO: 9001.

En conséquence, un appareil a été trouvé capable de transmettre des données via Ethernet et inclus dans le registre des instruments de mesure. Il s'est avéré être "Ivit-M.E". développé à Novossibirsk, également produit là-bas. Commandé (en passant, la commande prend beaucoup de temps. Le délai de production est d'environ un mois, plus la vérification, plus la livraison à Moscou).

Tout cela se présente sous cette forme. Lorsque vous le ramassez, vous réalisez immédiatement qu'il s'agit d'une production russe :-)





L'alimentation (commandée séparément) n'est pas connectée au capteur.

Par conséquent, nous le démontons et commençons à nous connecter.





Nous connectons quand même l'entrée. Courant alternatif. J'ai utilisé un câble d'alimentation ordinaire à partir d'un ordinateur.

La sortie est en courant continu. Le plus et le moins sont signés directement sur le tableau.

Ensuite, nous connectons les fils directement au capteur lui-même. Selon les instructions



Les terminaux eux-mêmes ressemblent à ceci:





Éteignez, retirez et retirez la doublure de la moitié en forme de L.
Nous connectons l'alimentation et le réseau.



Le résultat est quelque chose comme ceci:



Parmi les inconvénients de cet appareil - il ne sait pas comment envoyer des données via SNMP, il fonctionne en utilisant le protocole Modbus.

En principe, il existe de nombreux systèmes SCADA et serveurs OPC qui peuvent lire via Modbus, mais la plupart d'entre eux sont soit payés, soit collectés dans une base de données qui leur est propre, d'où il n'est pas clair non plus comment extraire des données pour les transmettre aux futurs zabbiks.

Par conséquent, un petit script python a été écrit pour accéder directement au capteur.
Les données dans les registres sont stockées sous forme de flottant et arrivent lors de leur accès sous cette forme

READ_INPUT_REGISTERS (16855, 57976) 

Pour configurer le capteur, il existe une application config-ivit.exe

Il n'y a pas beaucoup de paramètres là-bas. Vous pouvez configurer le réseau, le courrier.



dans le configurateur, les registres sont spécifiés dans le système hexadécimal, mais dans le script Python, vous devez spécifier les registres dans le système à 10 décimales.

Nous amenons les données sous une forme lisible normale selon la norme ieee-754.

Il existe deux façons de mettre en œuvre le transfert des données reçues du script vers le zabbix.

La première façon: en utilisant userparametr, sur un nœud où l'agent python et zabbiks est installé. Par exemple, j'avais sur le serveur zabbix lui-même.

 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]) 

Du côté du zabbix dans zabbix_agentd.conf, spécifiez:

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

Dans le zabbix lui-même, nous devrons transférer uniquement le numéro de registre et l'adresse IP de l'appareil auquel nous voulons contacter:

par exemple: check_reg[22,192.168.100.100]

Numéros d'enregistrement:

22 - Humidité
34 - Température
36 - point de rosée

La deuxième façon: passer des valeurs via zabbix_sender. Cette méthode est pratique dans la mesure où vous pouvez créer un nœud de réseau distinct qui ne possède pas d'agent et, par conséquent, il sera possible de créer un modèle pour de nombreux périphériques.

 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]))) 

Il ne reste plus qu'à exécuter ce script à exécuter sur la couronne, en spécifiant uniquement l'adresse IP des périphériques et le nom d'hôte de l'hôte

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

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


Ensuite, configurez les déclencheurs, qui sont considérés comme critiques pour nous. Par exemple, température minimale ou maximale, humidité.

C’est tout. Ainsi, nous avons obtenu un contrôle de température certifié, qui est adapté pour passer par le QMS et ISO: 9001

UPD: mise à jour du script à envoyer via l'expéditeur pour se connecter à plusieurs capteurs

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


All Articles