Problemas con el networkstream.write y textbox en while loop
Publicado por Fernando olmeda (2 intervenciones) el 07/02/2024 15:03:13
Buenos días
Tengo un problema con este código. Basicamente debe hacer lo siguiente
1 - Arrancamos el programa y conectamos el puerto ethernet a la IP y puerto especificados
2 - Mandamos cada 250 ms por timer1.tick una petición de lectura a una bascula conectada por ethernet y leemos la respuesta
3 - En un textbox ponemos el valor de la respuesta
4 - Una vez alcanzamos un peso de mas de 395 kg y está estable, ponemos variable en verdadero y continuamos enviando una señal de tara y una vez tarado y mientras tarado sea verdadero leeremos el peso neto y lo mostraremos en un textbox.
En el If pesoestable = true es donde tengo el primer problema. El peso400.write (tara,0,tara.length) solo funciona si pongo un stop en esa linea y pulso F10 para continuar. Si no hago stop ahí, directamente pasa de hacerlo y no ejecuta la tara. No entiendo el por que.
Vale, imaginemos que hemos tarado y ya puedo leer el neto. Hago un while tarado = verdadero para que lea el neto. El pesoneto.read lo hace pero el textbox3.text = pesoestable no se muestra, siempre está en blanco. Por que
El tercer problema lo tengo con la codificación, una vez extraido el recipiente de la báscula, el peso estará en negativo y debo destarar la bascula mandando un código y volver a empezar desde el inicio como si recien arranco el programa.
Como codifico el string recibido para que vea que es menor a 0 y ejecute esa parte del código.
Saludos y gracias.
Como resumen que es lo que pretendo que haga el código.
Al arrancar y pulsar el boton "Conectar", enlazamos la báscula ethernet con el pc
Una vez conectados, mandamos cada 250 ms un comando para leer el peso bruto y mostrarlo en un textbox
Si el peso bruto es superior a 395 kg y es estable durante 10 segundos, mandamos un comando de tara. Una vez tarada la báscula.
Mientras la báscula esté tarada, voy enviando comandos para leer el peso neto.
Cuando el peso neto sea negativo osea menor a cero, debo mandar otro comando de destarar y la báscula volverá a estar como al inicio y yo debo volver a leer cada 250 ms el peso bruto y esperar a que el peso bruto este por encima de 395 kg y estable.
Tengo un problema con este código. Basicamente debe hacer lo siguiente
1 - Arrancamos el programa y conectamos el puerto ethernet a la IP y puerto especificados
2 - Mandamos cada 250 ms por timer1.tick una petición de lectura a una bascula conectada por ethernet y leemos la respuesta
3 - En un textbox ponemos el valor de la respuesta
4 - Una vez alcanzamos un peso de mas de 395 kg y está estable, ponemos variable en verdadero y continuamos enviando una señal de tara y una vez tarado y mientras tarado sea verdadero leeremos el peso neto y lo mostraremos en un textbox.
En el If pesoestable = true es donde tengo el primer problema. El peso400.write (tara,0,tara.length) solo funciona si pongo un stop en esa linea y pulso F10 para continuar. Si no hago stop ahí, directamente pasa de hacerlo y no ejecuta la tara. No entiendo el por que.
Vale, imaginemos que hemos tarado y ya puedo leer el neto. Hago un while tarado = verdadero para que lea el neto. El pesoneto.read lo hace pero el textbox3.text = pesoestable no se muestra, siempre está en blanco. Por que
El tercer problema lo tengo con la codificación, una vez extraido el recipiente de la báscula, el peso estará en negativo y debo destarar la bascula mandando un código y volver a empezar desde el inicio como si recien arranco el programa.
Como codifico el string recibido para que vea que es menor a 0 y ejecute esa parte del código.
Saludos y gracias.
Como resumen que es lo que pretendo que haga el código.
Al arrancar y pulsar el boton "Conectar", enlazamos la báscula ethernet con el pc
Una vez conectados, mandamos cada 250 ms un comando para leer el peso bruto y mostrarlo en un textbox
Si el peso bruto es superior a 395 kg y es estable durante 10 segundos, mandamos un comando de tara. Una vez tarada la báscula.
Mientras la báscula esté tarada, voy enviando comandos para leer el peso neto.
Cuando el peso neto sea negativo osea menor a cero, debo mandar otro comando de destarar y la báscula volverá a estar como al inicio y yo debo volver a leer cada 250 ms el peso bruto y esperar a que el peso bruto este por encima de 395 kg y estable.
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
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
Imports System.Net.Sockets
Imports System.Text
Imports System.Text.UTF8Encoding
Imports System.Text.UTF7Encoding
Imports System.Net.NetworkInformation
Imports System.Runtime.InteropServices
Public Class Form1
Dim open As TcpListener
Dim server As TcpListener
Dim client, client2, host As TcpClient
Dim dati, hdat, peso400, desbloqueatara, pesoneto, leerpesoneto As NetworkStream
Dim ip As String = Nothing
Dim port As Integer
Dim peso As StringBuilder = New StringBuilder()
Dim pesoactual As Double = 0.0
Dim pesonetoactual As Double = 0.0
Dim lecturas As Integer = 1
Dim lastWeight As Double
Const stableRange As Double = 0.05
Dim currentWeight As Double
Dim pesoestable, tarado As Boolean
Private Sub btnconectar_Click_1(sender As Object, e As EventArgs) Handles btnconectar.Click
ip = txtip.Text
'port = Val(txtpuerto.Text)
client = New TcpClient
client.Connect("192.168.1.28", 5000)
If client.Connected = True Then
dati = client.GetStream
hdat = client.GetStream
peso400 = client.GetStream
desbloqueatara = client.GetStream
pesoneto = client.GetStream
leerpesoneto = client.GetStream
MsgBox("Connected", MsgBoxStyle.Information)
btnconectar.Enabled = False
Timer1.Start()
Else
MsgBox("Error", MsgBoxStyle.Critical)
End If
End Sub
Public Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick
If client.Available > 0 Then
Dim mistring As String
mistring = "SB" & vbCr
Dim sb As [Byte]() = System.Text.Encoding.ASCII.GetBytes(mistring)
hdat.Write(sb, 0, sb.Length)
Dim t(client.Available) As Byte
dati.Read(t, 0, t.Length)
Dim testo As String = UTF7.GetString(t)
TextBox1.Text = testo & vbCrLf
pesoactual = Val(testo)
currentWeight = Val(testo)
If (Math.Abs(currentWeight - lastWeight) < 0.05) And lecturas < 50 And currentWeight > 395 Then
TextBox4.Text = lecturas & " - " & pesoestable
lecturas = lecturas + 1
If lecturas = 20 Then pesoestable = True Else pesoestable = False
Else
TextBox3.Text = lecturas & " " & "Detectando peso estable"
lecturas = 1
End If
lastWeight = currentWeight
If pesoestable = True Then
TextBox3.Text = "peso estable"
Dim enviartara As String
enviartara = "ST" & vbCr
Dim tara As [Byte]() = System.Text.Encoding.ASCII.GetBytes(enviartara)
peso400.Write(tara, 0, tara.Length)
pesoestable = False
lecturas = 1
tarado = True
End If
While tarado = True
Dim pestable As String
pestable = "SN" & vbCr
Dim pe As [Byte]() = System.Text.Encoding.ASCII.GetBytes(pestable)
leerpesoneto.Write(pe, 0, pe.Length)
pesoneto.Read(t, 0, t.Length)
Dim pesestable As String = UTF8.GetString(t)
TextBox3.Text = "dasdf"
TextBox3.Text = pesestable
pesonetoactual = Val(pesestable)
If pesonetoactual < 0 Then
tarado = False
Dim destara As String
destara = "SD" & vbCr
Dim dtara As [Byte]() = System.Text.Encoding.ASCII.GetBytes(destara)
desbloqueatara.Write(dtara, 0, dtara.Length)
End If
End While
End If
End Sub
End Class
Valora esta pregunta


0