par Jacob Davis | Mis à jour le : 01/06/2016 | Commentaires : 2
Vous sentez-vous perdu lorsque vos données de direction du vent sont répertoriées en degrés ? Par exemple, pouvez-vous imaginer dans votre esprit quelle direction représente 195 degrés ? Serait-il plus facile si votre centrale d'acquisition de données pouvait mettre vos données en fonctions des directions de la boussole ? Dans cet article, je vais partager avec vous une méthode facile pour convertir vos données de direction de vent de degrés en directions de la boussole à l'aide du langage de programmation CRBasic.
Si vous êtes comme moi, qui considère que les directions d'une boussole (nord, sud, est et ouest) sont plus faciles à comprendre que les degrés. Par exemple, si quelqu'un me demande pour obtenir sa direction, je ne dis pas, "voyage de cinq blocs sur un cap de 270 degrés." Il est plus facile pour moi, si je dis à la place, "Va en direction de l'Ouest pendant cinq blocs. "
En termes de direction du vent, il est à la fois heureux et malheureux que les centrales de mesure ne "pense" pas comme nous les humains.
Astuce : Si vous souhaitez utiliser huit secteurs au lieu de 16, avec une table de consultation plus courte, diviser par 45 degrés au lieu de 22,5 degrés.
Pour faire la conversion, j'utilise un tableau indexé comme une table de consultation à la place d'une instruction Case. Je préfère le tableau indexé car le code est plus rapide et plus compact que le code d'une instruction Case. En outre, un tableau indexé fonctionne bien pour les données régulièrement espacées, d'un certain nombre de degrés. (Les données sont des catégories de numéros.) En revanche, une instruction Case est un meilleur choix pour les applications où vos données ne sont pas régulièrement espacées, comme la détermination des plages de température qui décrivent l'eau chaude, tiède ou froide. ("Chaud" et les valeurs "froid" seraient de plus grands données, et "très chaud" serait une donnée plus petite.)
Because north on a compass could be described as 0 degrees or 360 degrees, we have to use two data bins for it. This means that, for our 16 compass sectors, we actually need 17 values in our lookup table. The first value and last value are both north. The table below shows the 17 values with the 16 different compass sectors:
Parce que le nord sur une boussole peut être décrit comme 0 degré ou 360 degrés, nous devons utiliser deux bacs de données pour cela. Cela signifie que, pour nos 16 secteurs de la boussole, nous avons réellement besoin de 17 valeurs dans notre table de consultation. La première valeur et la dernière valeur sont à la fois au nord. Le tableau ci-dessous présente les 17 valeurs avec les 16 secteurs de la boussole :
Valeurs | Secteurs de la boussole |
1 |
N |
2 |
NNE |
3 |
NE |
4 |
ENE |
5 |
E |
6 |
ESE |
7 |
SE |
8 |
SSE |
9 |
S |
10 |
SSW |
11 |
SW |
12 |
WSW |
13 |
W |
14 |
WNW |
15 |
NW |
16 |
NNW |
17 |
N |
Vous pouvez utiliser un tableau dans votre programme de centrale d'acquisition de données comme une table de consultation. Une façon simple de remplir le tableau est d'attribuer des valeurs initiales. Soyez sûr que vous utilisez le type String et placez chaque valeur entre guillemets. La ligne de code est un peu longue, mais elle est assez simple:
Dim Sector(17) As String * 3 = {"N","NNE","NE","ENE","E","ESE","SE","SSE","S","SSW","SW","WSW","W","WNW","NW","NNW","N"}
Maintenant nous avons besoin de convertir la direction du vent en des valeurs entières, qui correspondent avec les valeurs de l'indice 17 au sein de notre tableau.
Pour limiter la direction du vent à 360 degrés, il faut effectuer une opération de modulo pour trouver le reste de la division du total des degrés par 360.
Par exemple, si nous travaillons avec 405 degrés, on divise cette valeur par 360. Cela nous donne 1 avec un reste (ou module) de 45:
Dans cet exemple, le reste de 45 degrés est ce qui doit être converti en une direction de boussole. |
Note : Bien que cette étape est inutile avec la plupart des capteurs, il ne pose pas de problème si vous l'incluez dans vos programmes.
Si l'on divise la direction du vent de 22,5 degrés (pour chaque secteur), nous obtenons des chiffres allant de 0 à 16. Parce que les étiquettes stockées dans le tableau sont indexés 1-17, il faut ajouter 1 pour correspondre à la gamme :
Index = WindDir MOD 360 Index = Round(Index/ 22.5,0)+1 CompassDir = Sector(Index)
Dans notre exemple précédent, si l'on prend le reste de 45 degrés et le diviser par 22,5, nous obtenons un résultat de 2:
Si nous ajoutons 1, le résultat est 3 :
Dans notre tableau la valeur “3” correspond à la direction “NE.” Donc, notre reste de 45 degrés est converti en une direction de nord-est. |
Nous pouvons placer la fonction mathématique entière dans le paramètre index du tableau. Les parenthèses forcent l'ordre d'opération de l'intérieur :
CompassDir = Sector(Round((WindDir MOD 360)/ 22.5,0)+1)
Rassembler les morceaux ensembles, nous obtenons le programme de la centrale de mesure suivant, ajouter simplement vos mesures et des tableaux de données.
'Declare Public Variables Public WindDir As Float Units WindDir = degrees Dim Sector(17) As String * 3 = {"N","NNE","NE","ENE","E","ESE","SE","SSE","S","SSW","SW","WSW","W","WNW","NW","NNW","N"} Public CompassDir As String * 3 'Main Program BeginProg Scan (1,Sec,0,0) 'Add wind sensor measurement here CompassDir = Sector(Round((WindDir MOD 360)/ 22.5,0)+1) 'Rounds the wind direction out into 17 sectors. Sectors 1 and 17 are both N. NextScan EndProg
Dans cet article, je l'espère je vous ai aidé à trouver votre chemin afin de mieux comprendre, d'utiliser et de partager vos données de direction du vent à l'aide du code de programmation CRBasic. Si vous avez l'un de nos produits logiciel RTMC, ce logiciel est capable de prendre vos données de direction du vent et directement convertir les degrés en un affichage de la boussole.
Sentez-vous libre de partager des situations où vous voulez représenter la direction du vent à l'aide des points cardinaux. Pouvez-vous penser à des cas similaires avec des données régulièrement espacées où l'on pourrait utiliser cette méthode? Diffusez vos idées ci-dessous.
Traduction du bureau France de Campbell Scientific
Commentaires
Thiago | 10/31/2018 at 01:11 PM
Nice post.
How do I write the calculate compass data into a Table?
I need to calculate a 30 minute average data from wind sensor e write the compass data from it in a table. I don´t know how to do it.
JDavis | 10/31/2018 at 01:29 PM
The compass sector, being a string variable, can only be saved to a table with the Sample instruction. The difficulty, in your case is the vector average of the wind must be calculated first. It is possible to read values back out of a data table. However, you can't save that compass sector to the same table.
We have worked around limitations before by making a table with just the Windvector. You then read that value back out, and can save it with other data in your main table. GetRecord is the easiest way to read values back out of a table.
Please log in or register to comment.