Jump to content

SUBIECTE NOI
« 1 / 5 »
RSS
Playlist melodii radio - unde?

P0335 senzor arbore cotit - senzo...

Avocatul Poporului vs European Om...

Recomandari firme pentru draperii...
 Receptie Eutelsat 5 West. Este po...

Poti receptiona semnal de la mai ...

Cabluri HDMI 2.1 de 4m-5m care sa...

Zoom comparat cu Google Meet
 Monitor/Display wireless?

Pornire greoaie dupa cateva zile ...

De la un proiect scris in python ...

Audi A4 B9 quattro 190 CP!
 Tepari la pariuri pe TikTok

Banca imi cere justificativ fondu...

schema pcb ELECTRA CIM150 PAS

Probleme stomac
 

Scriere "unica" in listobx, event monitoring

- - - - -
  • Please log in to reply
17 replies to this topic

#1
seichter

seichter

    Junior Member

  • Grup: Junior Members
  • Posts: 34
  • Înscris: 09.02.2015
Salutare,

Am urmatorul cod de la care astept sa scrie in listbox o singura data daca evenimentul s-a produs.Aceasta pina la restartarea aplicatiei.
For t = 351 To 375
If Value(t) > "55" Then 'Prag Critic'
Value(t).BackColor = &HFF& 'Rosu'
Value(t).ForeColor = &HFFFF& 'Galben'
FormBase.ListErrors.AddItem ("P-") & Value(t).Tag & (" Temperatura ulei ") & Now
Else
If Value(t) < "54.9" And Value(t) > "50" Then 'Prag Avertizare'
Value(t).BackColor = &HFFFF& 'Rosu'
Value(t).ForeColor = &H0& 'negru'
Else
Value(t).BackColor = &HC0FFC0 'culoare baza'
Value(t).ForeColor = &H80000007		 'Negru'
End If
End If
Next t


Din cauza ca il am intr-un timer scrie periodic in listbox cu frecventa ceasului.Am citit pe net ca o varianta ar fi sa folosesc  o variabila booleana si sa o seteze True sau False daca mesajul a fost scris in Listbox.In timer l-am pus deoarece trebuie sa scaneze periodic in acel array(351-375) si daca a fost indeplinita conditia sa o posteze in listbox o singura data si apoi sa o ignore pina cand se restarteaza aplicatia.
Aici e buba,nu stiu de unde sa incep,banuiesc ca trebuie un array boolean.dar nu stiu cum sa le atribui...
Dati-mi un colt de unde sa o apuc...Posted Image

Edited by MarianG, 19 February 2019 - 19:21.
split and code


#2
pexCom

pexCom

    Senior Member

  • Grup: Senior Members
  • Posts: 2,240
  • Înscris: 15.01.2014
Nu mă pricep la Visual Basic dar presupun că trebuie să adaugi o condiție pe care o evaluezi de fiecare dată la scanare. Sau 2, una pentru fiecare prag - dacă am înțeles bine.

Adică, declari la început și atribui valoarea 'False':

Dim pragCriticAtins As Boolean = False
Dim pragAvertizareAtins As Boolean = False

Apoi, unde verifici valorile pentru 'Prag Critic' / 'Prag Avertizare', mai adaugi o condiție, ca valoarea booleană asociată să fie False. Dacă da, se execută blocul respectiv și imediat se atribuie 'True'.
La următoarea verificare, fiindcă variabila va avea valoarea 'True', codul din If nu se va mai executa.

Dim pragCriticAtins As Boolean = False
Dim pragAvertizareAtins As Boolean = False

For t = 351 To 375
If Value(t) > "55" And pragCriticAtins = False Then 'Prag Critic
pragCriticAtins = True
Value(t).BackColor = &HFF& 'Rosu
Value(t).ForeColor = &HFFFF& 'Galben
FormBase.ListErrors.AddItem ("P-") & Value(t).Tag & (" Temperatura ulei ") & Now
Else
If Value(t) < "54.9" And Value(t) > "50" And pragAvertizareAtins = False Then 'Prag Avertizare
pragAvertizareAtins = True
Value(t).BackColor = &HFFFF& 'Rosu
Value(t).ForeColor = &H0& 'negru
Else
Value(t).BackColor = &HC0FFC0 'culoare baza
Value(t).ForeColor = &H80000007		 'Negru
End If
End If
Next t


Edited by pexCom, 19 February 2019 - 18:24.


#3
MarianG

MarianG

    be that as it may

  • Grup: Moderators
  • Posts: 31,416
  • Înscris: 10.08.2005
Ce inseamna eveniment, avand in vede limbajul avem o neintelegere.

https://docs.microso...event-statement
' Declare an event at module level.'
Event LogonCompleted(ByVal UserName As String)
Sub Logon(ByVal UserName As String)
' Raise the event.'
RaiseEvent LogonCompleted(UserName)
End Sub

apoi lesi EventHandler-ul sa se ocupa de adaugare si eliminare din lista.

situatie reala in care valoarea poate creste, se inregistreaza in lista, apoi scade, factori externi sau eroare de citire
tie ti se modifica lista, se inregistreaza defectul dar cand situatia revine la normal nu-ti dispare din lista
prin urmare cand se intampla a doua oara nu mai esti avertizat

Edited by MarianG, 19 February 2019 - 19:41.


#4
seichter

seichter

    Junior Member

  • Grup: Junior Members
  • Posts: 34
  • Înscris: 09.02.2015
Salut,

@MarianG-ai dreptate,am folosit termenul de eveniment in loc de conditie indeplinita.
Pina la urma,programul asta trebuie sa scaneze in intervalul 351 -375 si daca conditia este indeplinita pentru oricare pozitie sa arunce in ListBox mesajul cu indexul aferent(t)
In continuare se scaneaza dupa alte conditii in acelasi interval.

#5
MarianG

MarianG

    be that as it may

  • Grup: Moderators
  • Posts: 31,416
  • Înscris: 10.08.2005
pai asta iti spun, programul tau scaneza starea unui sistem. (WatchDog)
Cand se modifica o conditie apare o pre-alarma sau o alarma intr-un
Gestionarea alarmelor trebuie sa o faca altcineva, o alta parte din program.

Ce element este "value"?

#6
MarianG

MarianG

    be that as it may

  • Grup: Moderators
  • Posts: 31,416
  • Înscris: 10.08.2005
value este un nume extrem de neinspirat, value poate fi o proprieate a unui element din fereastra
cand numeste in element value, se ajunge la value.value
Private Sub value_Change(Index as integer)
Select Case Index
  Case 351 To 375
   If Value(Index) > "55" Then
	'raiseEvent Prag Critic'
	Value(t).BackColor = &HFF&  'Rosu'
	Value(t).ForeColor = &HFFFF& 'Galben'
   ElseIf Value(t) < "54.9" And Value(t) > "50" Then
	'raiseEvent pre-Avertizare'
	Value(t).BackColor = &HFFFF& 'Rosu'
	Value(t).ForeColor = &H0&  'negru'
   Else
	'raiseEvent situatie normala'
	Value(t).BackColor = &HC0FFC0 ' culoare baza'
	Value(t).ForeColor = &H80000007 'Negru'
   End If
End Select
End Sub
Ce alte conditii in acelasi interval ?

Edited by MarianG, 20 February 2019 - 15:33.


#7
seichter

seichter

    Junior Member

  • Grup: Junior Members
  • Posts: 34
  • Înscris: 09.02.2015
Salut,

In scurt timp voi posta tot programul.
practic e un OPC server conectat la citeva sute de calculatoare si monitorizeaza niste praguri care daca sunt depasite arunca un mesaj in listbox.

value este numele unui array de textboxuri in care sunt afisate datele culese.

Nu am cum sa atasez fisierul.

Edited by seichter, 20 February 2019 - 15:49.


#8
BraviaAmpero

BraviaAmpero

    Member

  • Grup: Members
  • Posts: 923
  • Înscris: 03.11.2018
eu cred ca ar trebui sa angajezi pe cineva care sa-ti rezolve aceste programe, in fond pentru asta angajezi programatori. Sa stii ca nu ai voie sa faci public cod fara acordul propietarilor.
Daca cineva malefic iti citeste codul poate crea un tool ca sa profite de bugurile codului si sa iti distruga toata reteaua sa-ti acapere retea si apoi sa-ti ceara bani tot timpul ca sa te lase
s-o folosesti.
Angajaza-ti un programator sau echipa de programatori cu clauza NDA si lasa-i pe ei sa rezolve aceste probleme , si nu tu care nu esti in domeniul programarii.

#9
MarianG

MarianG

    be that as it may

  • Grup: Moderators
  • Posts: 31,416
  • Înscris: 10.08.2005
ajuti, educi sau taci

#10
seichter

seichter

    Junior Member

  • Grup: Junior Members
  • Posts: 34
  • Înscris: 09.02.2015
Cea mai neaosa varianta care imi vine si o voi testa maine:
Codul actual cu variabila t scaneaza dupa interval si arata in rosu unde conditia a fost indeplinita.<br>
<br>
Pentru fiecare conditie pentru care vreau mesaj :<br>
Case Value(351).BackColor= rosu<br>
ListBox.AddItem(P-1 Temperatura Ulei)<br>
Case Value(352).BackColor=rosu<br>
ListBox.AddItem(P-2 Temperatura Ulei)

Edited by seichter, 20 February 2019 - 19:10.


#11
MarianG

MarianG

    be that as it may

  • Grup: Moderators
  • Posts: 31,416
  • Înscris: 10.08.2005
Case Value(351).BackColor= rosu
ListBox.AddItem(P-1 Temperatura Ulei)
ce vrea sa fie asta ?

#12
seichter

seichter

    Junior Member

  • Grup: Junior Members
  • Posts: 34
  • Înscris: 09.02.2015
Codul,fara select,end case,etc.Ideea.....
Crezi ca nu va merge corect?

Testeaza daca s-a schimbat culoarea textboxului care ma intereseaza si plaseaza mesajul aferent in listbox.
Voi seta ca eveniment on_change la acel textbox .Aceasta inseamna ca testeaza conditia de fiecare data cand se schimba valoarea din acel textbox.

Edited by seichter, 20 February 2019 - 20:25.


#13
MarianG

MarianG

    be that as it may

  • Grup: Moderators
  • Posts: 31,416
  • Înscris: 10.08.2005
datele iti modifica interfata, nu invers,
nu iei decizii de business cand se modifica interfata

da, fix asta inseamna,
testezi conditile de alarma doar cand se schimba valoarea, nu trebuie sa scanezi periodic

#14
seichter

seichter

    Junior Member

  • Grup: Junior Members
  • Posts: 34
  • Înscris: 09.02.2015
Am reusit sa o rezolv.....ideea era sa verific daca in listbox s-a scris mesajul specific,cu ajutorul variabilelor booleene se permite sau nu scrierea mesajului.
Functioneaza asa cum am dorit.

Multumesc pentru indrumari Posted Image
Dim ListaMsg(1 To 6) As String
Dim Msg(1 To 6) As String
Dim Valoare(1 To 6) As Variant
Dim blndublura(1 To 6) As Boolean

Public Sub StergereErori_Click()
ListErrors.Clear
blndublura(1) = False
blndublura(2) = False
blndublura(3) = False
blndublura(4) = False
blndublura(5) = False
blndublura(6) = False
End Sub
Public Sub Timer1_Timer()
P1
P2
P3
P4
P5
P6
valoare(1) = value(1)
valoare(2) = value(2)
valoare(3) = value(3)
valoare(4) = value(4)
valoare(5) = value(5)
valoare(6) = value(6)
msg(1) = "P-1 Temperatura ulei " & Now
msg(2) = "P-2 Temperatura ulei " & Now
msg(3) = "P-3 Temperatura ulei " & Now
msg(4) = "P-4 Temperatura ulei " & Now
msg(5) = "P-5 Temperatura ulei " & Now
msg(6) = "P-6 Temperatura ulei " & Now
End Sub
Public Sub P1()
For a = 1 To 5
If valoare(1) > "60" Then 'Prag Critic'
Listamsg(1) = msg(1)
For x = 0 To ListErrors.ListCount
If ListErrors.List(x) = Listamsg(1) Then
blndublura(1) = True
Exit For
End If
Next x
If blndublura(1) = False Then
ListErrors.AddItem (msg(1))
End If
End If
Next a
End Sub
Public Sub P2()
For a = 1 To 5
If valoare(2) > "60" Then 'Prag Critic'
Listamsg(2) = msg(2)
For x = 0 To ListErrors.ListCount
If ListErrors.List(x) = Listamsg(2) Then
blndublura(2) = True
Exit For
End If
Next x
If blndublura(2) = False Then
ListErrors.AddItem (msg(2)) ' & Now'
End If
End If
Next a
End Sub

etc... Posted Image

Edited by MarianG, 28 February 2019 - 12:11.
code tag


#15
MarianG

MarianG

    be that as it may

  • Grup: Moderators
  • Posts: 31,416
  • Înscris: 10.08.2005
care este rolul lui 'a'?

#16
seichter

seichter

    Junior Member

  • Grup: Junior Members
  • Posts: 34
  • Înscris: 09.02.2015
a este o variabila  in care este stocata valoarea contorului din bucla for.
Este adevarat ca trebuia sa-l declar la inceputul programului.

#17
MarianG

MarianG

    be that as it may

  • Grup: Moderators
  • Posts: 31,416
  • Înscris: 10.08.2005
Public Sub P1()
For a = 1 To 5
If valoare(1) > "60" Then 'Prag Critic'
Listamsg(1) = msg(1)
For x = 0 To ListErrors.ListCount
If ListErrors.List(x) = Listamsg(1) Then
blndublura(1) = True
Exit For
End If
Next x
If blndublura(1) = False Then
ListErrors.AddItem (msg(1))
End If
End If
Next a
End Sub
si la ce ajuta?

Edited by MarianG, 28 February 2019 - 12:09.


#18
seichter

seichter

    Junior Member

  • Grup: Junior Members
  • Posts: 34
  • Înscris: 09.02.2015
Ai mare dreptate, nu are nici o noima acolo.Am scos liniile de cod respective.
Ce-i drept....este folosit in alta parte
for a =1 to 200
if value(a) >"60" then
bla bla bla
else
la la la
end if
next a

Multumesc

Edited by seichter, 28 February 2019 - 15:24.


Anunturi

Bun venit pe Forumul Softpedia!

0 user(s) are reading this topic

0 members, 0 guests, 0 anonymous users

Forumul Softpedia foloseste "cookies" pentru a imbunatati experienta utilizatorilor Accept
Pentru detalii si optiuni legate de cookies si datele personale, consultati Politica de utilizare cookies si Politica de confidentialitate