Lesen Sie Echtzeit-Sensordaten in C# (Visual Studio 2022) aus einer kontinuierlichen Aktualisierungszeichenfolge, die voC#

Ein Treffpunkt für C#-Programmierer
Anonymous
 Lesen Sie Echtzeit-Sensordaten in C# (Visual Studio 2022) aus einer kontinuierlichen Aktualisierungszeichenfolge, die vo

Post by Anonymous »

Hallo allerseits und vielen Dank im Voraus für jede Hilfe, die Sie mir geben können. Diese Daten müssen verarbeitet werden, um Codierung durchzuführen und Stimuli zu generieren, die mit der TENS -Technik an ein Subjekt geliefert werden sollen. Die Anwendung befindet sich im Bereich der Prothetik, insbesondere für thermische und taktile/nociceptive sensorische Feedback. Der LabView -Code ist so konzipiert, dass ein String als "Stimulator.txt" gespeichert wird, den ich kontinuierlich lesen möchte. In der Zwischenzeit sollte der Rest des Codes weiter ausgeführt werden.private async Task StartReadingThread()
{
if (readingActive) return;
readingActive = true;

while (readingActive)
{
ReadText();
await Task.Delay(50);
}
}
< /code>
Die tatsächliche Lesefunktion ist ReadText (). Im ReadText füge ich nach dem Lesen der Daten aus der Zeichenfolge sie in Listen wie folgt ein: < /p>
indexForceValues.Add(F1);
indextouches.Add(T1);
timesPain.Add(Time);
< /code>
F1 sind die Daten aus dem Kraftsensor, das auf dem Indexfinger der Handprothese platziert ist. T1 ist ein boolescher Wert (0 oder 1), der angibt, ob der Indexfinger berührt oder nicht. Die Zeit ist der Zeitwert, der aus der in LabView generierten Zeichenfolge gelesen wird. Mit Debugging habe ich bestätigt, dass der ReadText die Anweisung nach Anweisung, Zeile für Zeile in der richtigen Reihenfolge ausführt.private void StartReadingTemperature()
{
if (readingActive) return;
readingActive = true;

Task.Run(() =>
{
while (readingActive)
{
ReadText();
System.Threading.Thread.Sleep(50);
}
});
}
< /code>
Mit dieser Version zeigte Debugging, dass die Ausführung von Referate inkonsistent war, mit übersprungenen oder wiederholten Anweisungen. Dies führte zu einer Fehlausrichtung in der Anzahl der in den Indexforcevalues, in den Timesspain -Listen gespeicherten Werte, die in anderen Teilen des Codes Probleme verursachten. /> Hinweis: StartreadingThread wird in einer Makro -Methode namens Start () aufgerufen. Inside start () habe ich das Echtzeit-Schmerzprotokoll und im Inneren eine Weile Schleife: < /p>
while (!stop)
{
StartReadingThread();
...
}
< /code>
Und dann führe ich andere Funktionen für die Datenverarbeitung und -codierung aus.private void StopReadingThread()
{
readingActive = false;
}
< /code>
Ich weiß nicht, wie man dieses Problem löst. Ich bin mir nicht sicher, ob es daran liegt, auch andere Methoden (z. B. Readtext oder Start) asynchron zu erstellen. Ich lese aus der Zeichenfolge, die nur in LabView generiert wird, aber ich nehme die Zeichenfolge normalerweise von ihrem Pfad.public void ReadText()
{
try
{
if (File.Exists(textFile))
{

// Read entire text file content in one string
string text = File.ReadAllText(textFile);

string F1_index = ssize[0];
F1_index = F1_index.Replace(',', '.');
F1 = Math.Round(Convert.ToDouble(F1_index,
CultureInfo.InvariantCulture), 2);`
< /code>
...und zuweist die verschiedenen Werte in der Zeichenfolge Variablen.indexForceValues.Add(F1);
indextouches.Add(T1);
timesPain.Add(Time);
< /code>
und es endet mit: < /p>
catch (IOException ex)
{
Console.WriteLine(ex);
}
< /code>
StartreadingThread () wird wie zuvor in der while (! Stop) -Schloop aufgerufen. Ich habe versucht, es außerhalb der Schleife zu stellen, aber es hat nicht funktioniert.while (!stop)
{
StartReadingTemperature();
if (newTouchState)
{

StopReadingTemperature();

double Tobject = tempList.Last();
StartReadingTemperature();
< /code>
und es funktioniert perfekt, anregend und alles. Templist wird in Refertext erstellt: < /p>
if (newTouchState)
{
tempList.Add(Tobj);
}
< /code>
und die Funktionen StartreadingTemperature und StopReadingTemperature sind: < /p>
private void StartReadingTemperature()
{
if (readingActive) return;
readingActive = true;

Task.Run(() =>
{
while (readingActive)
{
ReadText();
System.Threading.Thread.Sleep(50);
}
});
}

private void StopReadingTemperature()
{
readingActive = false;
}
< /code>
In diesem Fall, dass ich nicht die Ausrichtung von Daten in mehr als einer Liste benötige, aber ich betrachte nur Temperaturdaten, es gibt kein Problem mit der Verwendung von Task.run und Thread.sleep. Der Code liest die Temperaturwerte korrekt und stimuliert folglich.

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post