Bonjour à toutes et à tous!
Mon application C# dialogue avec un capteur de mecatronique en modbus.
Je dois aller lire un bit pour ceci je fais :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30 private ushort[] LectureNMots(byte slaId, ushort n, ushort stA) { ModbusSerialMaster master = ModbusSerialMaster.CreateRtu(port); ushort[] rep = new ushort[n]; try { ushort[] readRegs = master.ReadHoldingRegisters(slaId, stA, n); for (int i = 0; i < n; i++) { rep[i] = readRegs[i]; } return rep; } catch { for(int i = 0; i<n; i++) { if (i == n - 1) { rep[i] = 32768; } else { rep[i] = 0; } } return rep; //valeur négative la plus faible } }
Je recupère un nombre en decimale (ex : 2097) qui represente 2 octets (16bits de b15 à b0)
Moi je veux uniquement aller lire l'état du bit4
Quand je fais une conversion de Dec en Bin, suivant la valeur du registre lu je ne dispose pas de 16bits et cela me pose des problemes de filtrage.
Car je veux faire.
Existt t il une solution élegante ???
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48 private void button1_Click(object sender, EventArgs e) { /// public long RRegistreBitStabilite(byte slaveId) /// { long lecture; long lecture1; long lecture2; long lecture3; string st; string st1; string st2; lecture = LectureNMots(slaveId, 1, 125)[0]; st = convDecBin(lecture); st2 = st1.Substring(3, 1); ///} label2.Text = st; label3.Text = st1; label4.Text = st2; } /// <summary> /// renvoie le chiffre binaire correspondant a l'entier passé en paramètre /// </summary> /// <param name="dec">dec est le chiffre décimal (base 10) que l'on veut convertir</param> /// <returns>retourne le chiffre binaire</returns> public static string convDecBin(int dec) { string res = ""; int div; int i; do { div = 0; i = dec; while (i != 1 && i != 0) { i -= 2; div += 1; } res = Convert.ToString(dec - (2 * div)) + res; dec = div; } while (dec != 0); return res; }
Merci
Partager