Hallo,
Voor school moeten we een project maken waarbij een microcontroller, in ons geval een stm32f051, gekoppeld moet worden aan een computer applicatie.
Wij hebben ervoor gekozen dat de microcontroller ongeveer 30keer per seconde informatie stuurt naar de computer en de computer leest dit dan ook 30 keer per seconde uit.
Nu werkte dit eerst goed, zal wel niet de mooiste oplossing zijn geweest maar het werkte. Echter is er nu iets veranderd waardoor die niet meer goed loopt waarvan ik geen idee heb wat er is veranderd en waarom (Helaas hebben we daarvoor geen versiebeheer gebruikt...
)
Het probleem:
De C# applicatie leest de poort uit, de eerste keer komt daar het volgende uit: 1 50 50 0 0 0 100 200 4
Een totaal van 9 bytes dus waarbij de 1 en de 4 altijd vast moeten blijven.
Eerst schoof elk karakter steeds één plekje op, waardoor die als het ware begon te lopen.
Nu heb ik als aanpassing de verbinding gesloten na het uitlezen en vervolgens weer openen als die weer terug komt in de functie. Mijn setup zorgt ervoor dat die nog maar 15x per seconden wordt uitgelezen maar dat is opzich niet erg, erger is dat ik dan het volgende krijg, continu: 0 1 50 50 0 0 0 100 200
De laatste byte valt dus af en de eerste veranderd in een 0.
Ik had eraan gedacht om de thread even te laten slapen na het uitlezen van de seriele poort, hem te sluiten en weer te openen en om de in-buffer te discarden maar geen van dit heeft geholpen.
Voor school moeten we een project maken waarbij een microcontroller, in ons geval een stm32f051, gekoppeld moet worden aan een computer applicatie.
Wij hebben ervoor gekozen dat de microcontroller ongeveer 30keer per seconde informatie stuurt naar de computer en de computer leest dit dan ook 30 keer per seconde uit.
Nu werkte dit eerst goed, zal wel niet de mooiste oplossing zijn geweest maar het werkte. Echter is er nu iets veranderd waardoor die niet meer goed loopt waarvan ik geen idee heb wat er is veranderd en waarom (Helaas hebben we daarvoor geen versiebeheer gebruikt...


Het probleem:
De C# applicatie leest de poort uit, de eerste keer komt daar het volgende uit: 1 50 50 0 0 0 100 200 4
Een totaal van 9 bytes dus waarbij de 1 en de 4 altijd vast moeten blijven.
Eerst schoof elk karakter steeds één plekje op, waardoor die als het ware begon te lopen.
Nu heb ik als aanpassing de verbinding gesloten na het uitlezen en vervolgens weer openen als die weer terug komt in de functie. Mijn setup zorgt ervoor dat die nog maar 15x per seconden wordt uitgelezen maar dat is opzich niet erg, erger is dat ik dan het volgende krijg, continu: 0 1 50 50 0 0 0 100 200
De laatste byte valt dus af en de eerste veranderd in een 0.
Ik had eraan gedacht om de thread even te laten slapen na het uitlezen van de seriele poort, hem te sluiten en weer te openen en om de in-buffer te discarden maar geen van dit heeft geholpen.
C#: Mainform
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
49
50
51
52
| //Init USB-Port usbPort.PortName = "COM3"; usbPort.BaudRate = 57600; usbPort.Parity = System.IO.Ports.Parity.None; usbPort.DataBits = 8; usbPort.StopBits = System.IO.Ports.StopBits.One; usbPort.WriteTimeout = 100; usbPort.ReadTimeout = 100; private void ReadSerialBus() { Thread.Sleep(5); if (usbPort.IsOpen) { try { usbPort.Read(Game.byteBuffer, 0, 8); if(Game.byteBuffer[0] != 1 && Game.byteBuffer[8] != 4) { MessageBox.Show("Buffer voor correctie:" + Game.byteBuffer[0].ToString() + "|" + Game.byteBuffer[1].ToString() + "|" + Game.byteBuffer[2].ToString() + "|" + Game.byteBuffer[3].ToString() + "|" + Game.byteBuffer[4].ToString() + "|" + Game.byteBuffer[5].ToString() + "|" + Game.byteBuffer[6].ToString() + "|" + Game.byteBuffer[7].ToString() + "|" + Game.byteBuffer[8].ToString()); txtGameTexts.AppendText("Wacht tot buffer weer klopt. \n"); while(Game.byteBuffer[0] != 1 && Game.byteBuffer[8] != 4) { usbPort.Close(); usbPort.Open(); Thread.Sleep(50); usbPort.Read(Game.byteBuffer, 0, 8); } MessageBox.Show("Buffer na correctie:" + Game.byteBuffer[0].ToString() + "|" + Game.byteBuffer[1].ToString() + "|" + Game.byteBuffer[2].ToString() + "|" + Game.byteBuffer[3].ToString() + "|" + Game.byteBuffer[4].ToString() + "|" + Game.byteBuffer[5].ToString() + "|" + Game.byteBuffer[6].ToString() + "|" + Game.byteBuffer[7].ToString() + "|" + Game.byteBuffer[8].ToString()); txtGameTexts.AppendText("Programma hervat. \n"); } usbPort.Close(); } catch (Exception e) { MessageBox.Show("Er is een probleem met de verbinding .\n+ e.ToString()); usbPort.Close(); } } else { try { usbPort.Open(); } catch(Exception e) { MessageBox.Show("Er is een probleem met de verbinding.\n" + e.ToString()); } } } |