Accueil > Forum > Programmation IEC 61131 (LogicLab) > Lecture des températures 3 à partir de sondes 1-Wire
- Ce sujet a 34 réponses, 9 participants et a été mis à jour pour la dernière fois 2 années, 11 mois da [email protected].
-
auteurPost
-
Avril 1, 2011 à 12: pm 05 #34988Anonymeinactif
Utiliser le processeur SlimLine, J’ai besoin d’obtenir les valeurs de température de 3 Capteurs 1-Wire connecté à l'un des ports RS232 du module CPU via l'adaptateur RS232 vers OneWire.J'ai pris l'exemple lié au OWRdTemperature Fb qui ne gère qu'un seul capteur, comment faire pour acquérir les 2 autres?
Avril 1, 2011 à 12: pm 19 #36688maximumModérateurUtilisation du bloc de fonction OWRdTemperature vous pouvez lire toutes les sondes que vous voulez, instanciez simplement un bloc fonction pour chaque sonde que vous souhaitez acquérir. Pour acquérir 3 sondes de température, 3 blocs fonction OWRdTemperature sont donc nécessaires, chaque bloc doit recevoir l'ID de son propre capteur. N'oubliez pas que chaque capteur 1-Wire possède son propre code 64 bits unique.
Puisque les blocs fonctionnels de lecture de température sont tous connectés au bloc fonctionnel OWireMng qui gère le convertisseur série / 1 fil, il faut s'assurer qu'à tout moment un seul des FB d'acquisition de température est actif, il faut donc séquencer son exécution.
À cet égard, j'ai créé un bloc de fonction Séquenceur, le bloc fonction est réalisé en langage ST et est fourni avec le code source. Le FB fournit jusqu'à 8 sorties séquencées, si vous en avez besoin de moins, agissez simplement sur le paramètre MaxSeqNr. Si vous souhaitez augmenter le nombre de sorties, changez simplement le FB.
le FB prévoit le passage d'une séquence à la suivante, à la fois lorsque l'entrée relative est réglée SeqxOk, à la fois pour le délai d'expiration, ce FB est utilisé dans de nombreux domaines, puis possible de l'exporter à partir du programme exemple et de l'importer dans son propre programme. Je joins le imprimer et le code source d'un exemple de programme.
Mars 19, 2014 à 3: pm 37 #38138Sergio BertanaAdministrateur du forumA partir de la version SFR059B000 de la librairie ePLC1WireLib, le FB d'acquisition de température du capteur DS18B20 a été modifié maintenant le FB doit être utilisé sOWRdTemperature, température de lecture à un fil. Ce FB est très similaire au précédent, mais pour permettre de gérer l'acquisition de plusieurs capteurs connectés à un seul adaptateur, il est possible d'aligner les FB.
Comme vu dans le imprimer, le programme du post précédent a été simplifié en supprimant le séquenceur, le passage de la lecture d'une sonde à une autre est géré par la sortie OK du FB. activation Activer L'acquisition du capteur est gérée, une fois terminée (même en cas d'erreur) la sortie Done est activée, ce qui permet l'acquisition du capteur suivant et ainsi de suite. Le Done du FB du dernier capteur désactive le FB du premier et le cycle redémarre.
Comme vous pouvez le voir, chaque capteur est caractérisé par son propre ID unique, si l'ID a été détecté via le programme OneWireViewer (Voir le message) il faut définir l'ID dans la variable en l'écrivant de la même manière affichée dans la fenêtre du programme (Capture d'écran). Je joins programme source.
Mars 19, 2014 à 4: pm 10 #38139Sergio BertanaAdministrateur du forumDepuis janvier de la 2014 nous avons inclus des capteurs Sensit dans la gamme de produits commercialisés, dans le catalogue Sensit capteur de température basé sur le DS18B20.
Mai 3, 2016 à 7: pm 02 #39560AntonioPartecipanteÉtant donné qu'en échelle, je peux facilement lire jusqu'à 8 sondes (mais je pense que nous pouvons encore augmenter le nombre), j'essayais en vain de le transformer en langage ST pour une plus grande compacité et une plus grande flexibilité du code.
Mai 9, 2016 à 3: pm 32 #39561Sergio BertanaAdministrateur du forumJ'ai fait un programme simple en ST (OWTemperature) qui effectue la lecture des sondes 2 en séquence ici est le liste du programme.
Comme vous pouvez le voir dans la partie gestion d'un fil, j'ai également inclus le FB OWID de type sOWRdIdentifier afin d'acquérir l'ID. Pour l'acquérir, le FB doit être activé. Attenzione, per rilevare l’ID del sensore bisogna collegare un solo sensore di temperatura.
OWID(Enable:=TRUE); (* One wire identifier *)
Une fois l'ID acquis, copiez simplement la valeur de idcode dans la définition du capteur. Comme vous pouvez le voir dans mon exemple, j'ai défini deux capteurs dont j'ai détecté l'ID (Télécharger le programme).
Octobre 17, 2017 à 4: pm 25 #39993MarcelloPartecipanteBonjour, si je devais acquérir 12 sondes sur le même bus, y a-t-il un moyen de «partager» le FB sOWRdTemperature avec un nouvel ID sans avoir à créer 12 blocs indépendants?
J'ai vu ça sur ce sujet on dit que le CPU Cortex 7 a maintenant l'interface 1-Wire native à partir de quelle version peut-elle être utilisée?
Octobre 18, 2017 à 9: 02 am #39994Sergio BertanaAdministrateur du forumOui, vous pouvez certainement utiliser une seule instance du FB sOWRdTemperature, il suffit de définir avant de l'activer leIDCode de la sonde. Une fois l'acquisition de température terminée, vous pouvez désactiver le FB, changer le code ID et répéter l'acquisition de la nouvelle sonde, et ainsi de suite ...
Octobre 18, 2017 à 4: pm 34 #39995MarcelloPartecipanteJ'ai essayé de désactiver Enable avec NOT (sOWRdTemperature.Ok) mais étrangement, après la première acquisition, Done et Ok restent sur TRUE alors que je m'attendais à ce qu'ils passent, avec Enable: = FALSE, les deux en FALSE. J'ai essayé aussi avec une variable indépendante mais rien, une fois effectué la première lecture Ok et Terminé restent VRAI. Où est-ce que je me trompe?
Octobre 19, 2017 à 6: 11 am #39996Sergio BertanaAdministrateur du forumVous n'êtes pas obligé d'utiliser Ok mais Terminé pour gérer l'activation, sOWRdTemperature (Enable: = NOT (sOWRdTemperature.Done)). Si vous voyez le manuel, il dit:
Ok: Attivo per un loop se lettura temperatura eseguita correttamente
Done: Si attiva al termine della esecuzione lettura temperaturaDonc, si la lecture ne réussit pas, Ok ne s'activera pas mais Terminé oui. Mais il est encore étrange ce que vous dites car Ok n'est actif qu'une seule boucle (donc vous ne pouvez pas le voir débogué, trop vite) et en désactivant Activer vous devez réinitialiser Terminé. Mon impression est que vous avec Ok actif ne plus exécuter le FB.
June 15, 2018 à 8: 43 am #44305PaulPartecipanteJ'en utilise un Slimline Cortex M7 qui a un port dédié pour le protocole 1-wire et je voudrais l'utiliser pour lire une sonde de température et une sonde d'humidité en séquence.
Je voudrais savoir quel port ouvrir avec sysfopen pour utiliser le connecteur P11 du SlimLine.
Novembre 26, 2019 à 9: 35 am #51366AndreaPartecipanteJe souhaite utiliser l'adaptateur DS9097U-S09 1-Wire vers RS232 pour acquérir des sondes 27 1-wire DS18B20 avec un processeur. SlimLine MPS046B, je voulais savoir s’il était possible d’acquérir autant de sondes dans le cas du schéma de connexion.
Novembre 26, 2019 à 9: 48 am #51462Sergio BertanaAdministrateur du forumJe trouve dans les spécifications Internet que le nombre maximal de capteurs correspond à la longueur maximale des compteurs 1-XIRE 400 et 500. Chaque capteur équivaut à un raccourcissement de la longueur des compteurs 0,5 et chaque mètre de câble 100 provoque une capacité supplémentaire de distorsion croissante du signal 5nF. En pratique, la longueur du réseau et le nombre de capteurs dépendent de:
Type de câbles.
Qualité des connexions.
Brouillage causé par des champs électromagnétiques externes.Nous recommandons des câbles torsadés pour les ordinateurs UTP en connectant les câbles non utilisés, et si le câble blindé est également le blindage, à la ligne de terre. Tous les capteurs sont connectés en parallèle à la ligne, des capteurs 2 fils peuvent être utilisés même si dans le cas de nombreux capteurs connectés au bus, pour éviter la surcharge du signal, il est recommandé d'utiliser des capteurs 3 fils apportant également l'alimentation.
Personnellement, je connais des clients qui ont créé des réseaux avec le DS9097U-S09 dans lesquels des fils 20 ont été connectés à des capteurs 2 sur une longueur de 100 mt. Les capteurs 2 étant des câbles permettant d’éviter une charge excessive du bus, une résistance de 100 Ohm a été placée en série avec le signal de chaque capteur. pouvoir à 220Vca.
Octobre 2, 2020 à 8: 27 am #57742Matthias Dal SantoPartecipanteVeuillez lire 10 sondes à un fil connectées au port COM0 du module CPU via l'adaptateur RS232 vers OneWire et avec la nécessité d'avoir la liste en ST. J'ai pris comme référence certains programmes postés dans le forum mais les exemples sont peut-être datés (ils font référence à la fonction FB OWMng).
Pourriez-vous avoir la liste ST de la lecture de deux sondes ou plus via la nouvelle bibliothèque eLLab1WireLib?
Octobre 2, 2020 à 8: 31 am #57748Sergio BertanaAdministrateur du forumLes bibliothèques sont en constante évolution, maintenant avec la sortie de la version XUnified systèmes d'exploitation toutes les bibliothèques ont été mises à jour pour les rendre compatibles avec la nouvelle architecture. Ainsi, pour utiliser les nouvelles bibliothèques, vous pouvez mettre à jour le système d'exploitation de votre produit ou insérer la bibliothèque dans le projet eLLabXTargetAdjLib comment montré ici.
En venant à votre question dans la base de connaissances, vous trouverez les exemples qui vous intéressent cet article Découvrez comment utiliser le FB OWRdIdentifier pour acquérir l'identifiant unique de chaque capteur.
In cet article vous trouverez des exemples d'acquisition de sondes de température, comme vous pouvez le voir dans le programme FBD si vous avez plus de sondes, vous devez instancier plus de FB OWRdTemperature en connectant le Done du premier surEnable du prochain et ainsi de suite. Imaginez la lecture de 3 sondes que nous aurons.
// Acquires the temperature. Temp[0].OwID:=OWire.OwID; //One-Wire management ID Temp[0].Enable:=NOT(Temp[2].Done); //Enable Temp[0](); //Read temperature Temp[1].OwID:=OWire.OwID; //One-Wire management ID Temp[1].Enable:=Temp[0].Done; //Enable Temp[1](); //Read temperature Temp[2].OwID:=OWire.OwID; //One-Wire management ID Temp[2].Enable:=Temp[1].Done; //Enable Temp[2](); //Read temperature
-
auteurPost
- Vous devez être connecté pour répondre à ce sujet.