Over niveau gesproken:
Een sensor stuurt de volgende struct per UDP naar een IP op een bepaalde poort. De C-Struct is dit:
en de routines om RH en Temp te converten van unsigned int naar float zijn dit (en ja, ik heb ze al omgezet naar VB>NET, maar de C code leest wat beter):
Deze struct wordt verstuurd via UDP, en ik vang deze in VB op in een Byte-array (alles achter elkaar dus).
Nu wil ik zorgen dat ik de properties kan uitlezen.
mijn idee was dit:
helaas geeft dit temperaturen van -83 etc... niet direct de bedoeling.
Nu is mijn vraag, kan iemand me helpen met het uitlezen van deze waardes (het byta array) in VB.NET?
Een sensor stuurt de volgende struct per UDP naar een IP op een bepaalde poort. De C-Struct is dit:
code:
1
2
3
4
5
6
7
8
| typedef struct Message
{
char Name[25];
unsigned int Type;
unsigned int RH;
unsigned int Temp;
unsigned int Buffer
} |
en de routines om RH en Temp te converten van unsigned int naar float zijn dit (en ja, ik heb ze al omgezet naar VB>NET, maar de C code leest wat beter):
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
| float ConvertTemp(unsigned int Temp) /* converts 16 bit notation to real temp */
{
float temperature;
temperature=Temp;
return (temperature/168.055)-273.16;
}
float ConvertRH(unsigned int RH) /* converts 16 bit notation to real RH */
{
float rh;
float CalcRH;
float Volt;
float temp = 18;
rh=RH;
Volt = (2.500 * (rh/65536));
Volt=(1/0.558)*Volt;
CalcRH= (161.29/(1.0546-(0.00216*temp)))*((Volt/5)-0.16);
return CalcRH;
} |
Deze struct wordt verstuurd via UDP, en ik vang deze in VB op in een Byte-array (alles achter elkaar dus).
Nu wil ik zorgen dat ik de properties kan uitlezen.
mijn idee was dit:
code:
1
2
3
4
5
6
| 'rdata = byte array van length 33 (unsigned int is 16 bit) Dim name As String = Encoding.ASCII.GetString(rdata, 0, 25) Dim Type As Int16 = CInt(rdata.GetValue(25)) * 256 + CInt(rdata.GetValue(26)) Dim RH As Int16 = CInt(rdata.GetValue(27)) * 256 + CInt(rdata.GetValue(28)) Dim Temp As Int16 = CInt(rdata.GetValue(29)) * 256 + CInt(rdata.GetValue(30)) Dim Buffer As Int16 = CInt(rdata.GetValue(31)) * 256 + CInt(rdata.GetValue(32)) |
helaas geeft dit temperaturen van -83 etc... niet direct de bedoeling.
Nu is mijn vraag, kan iemand me helpen met het uitlezen van deze waardes (het byta array) in VB.NET?