[ gobs @ 28.03.2013. 13:48 ] @
Pozdrav ,
problem je sledeći :Radi se o kontroli doziranja, čitati sa vage podatak preko seriskog porta o masi i kada masa pređe zadanu aktivirati izlaz na paralelnom portu.vrijeme do dostizanja kilaže je oko 3,5 sekundi.
Ja sam uradio sledeće: u OnTimer_u šaljem zahtjev vagi , ona mi vraća podatak o masi , poredim taj podatak sa zadanim ,i preko 'inpout32.dll' upravljam paralelnim portom.
Kako ubrzati da se program izvršava brže , pošto od momenta dostizanja zadane mase do momenta promjene prođe dosta vremena.
[ captPicard @ 28.03.2013. 14:06 ] @
Bez primjera koda ćemo ti teško pomoći.
[ savkic @ 28.03.2013. 16:55 ] @
> problem je sledeći :Radi se o kontroli doziranja, čitati sa vage podatak preko seriskog porta o masi i kada masa pređe zadanu aktivirati izlaz na paralelnom portu.vrijeme
> do dostizanja kilaže je oko 3,5 sekundi.
> Ja sam uradio sledeće: u OnTimer_u šaljem zahtjev vagi

Na koliko se okida OnTimer?

> , ona mi vraća podatak o masi , poredim taj podatak sa zadanim ,i preko 'inpout32.dll' upravljam paralelnim portom.

Teško je reći bez koda i više detalja. Timer sam po sebi nije precizna stvar, on se okida tek kada aplikacija nema ništa drugo da radi, dakle ako tvoj program nešto drugi radi, timer poruke nećeš ni dobiti.

> Kako ubrzati da se program izvršava brže , pošto od momenta dostizanja zadane mase do momenta promjene prođe dosta vremena.

Šta to tačno znači, promene čega? Da li tvoj program detektuje masu (koliko tu prođe vremena) i onda pošalje neku komandu na paralelni port? Možda je problem u tom uređaju na drugoj strani.
[ Lawd @ 28.03.2013. 18:09 ] @
Koristi thread-ove. Napravi listener thread.
[ gobs @ 28.03.2013. 21:28 ] @
Hvala svima na odgovorima.
Interval Timer_a je 30 .Funkcija programa je samo to da komunicira sa vagom i daje signal
na paralelni port koji se dalje prosljeđuje preko optokaplera.
kod:
Code:

procedure TForm1.Timer1Timer(Sender: TObject);
var
  Str,answer,a: String;
  poz_broja:Integer;
  masa:single;
begin
 zad_masa:=StrToFloat(Edit1.Text);
  com.WriteStr(#05);
  sleep(40);                                // ne moze krace zbog vage
  com.WriteStr(#17);
  sleep(40);
   com.ReadStr(Str,50);
   answer:=answer+str;
   Memo1.Lines.Add(Str);

    if pos('S',answer) >0 then
      begin
        poz_broja:=pos('S',answer);

        Label1.Caption:=copy(answer,poz_broja+2,5);
        answer:='';
      end;
      if pos('U',answer) >0 then
      begin
        poz_broja:=pos('U',answer);

       Label1.Caption:=copy(answer,poz_broja+2,5);
        //a:=copy(answer,poz_broja+2,7);

       // if a then

        masa:=StrToFloat(Label1.Caption);
        if masa < zad_masa then
        begin
           Shape1.Brush.Color:=clLime;
           Out32($378,$0);
        end;

        if masa > zad_masa then
         begin
          Shape1.Brush.Color:=clRed;
          Out32($378,$1);
         end;

        answer:='';
      end;

end;



jos jednom hvala
[ savkic @ 28.03.2013. 23:24 ] @
> Hvala svima na odgovorima.
> Interval Timer_a je 30 .

Ali se funkcija izvršava duže, najmanje 80ms. Za početak ili isključi timer dok si u funkciji ili povećaj interval.

> Funkcija programa je samo to da komunicira sa vagom i daje signal na paralelni port koji se dalje prosljeđuje preko optokaplera.

Nisi napisao gde je usko grlo, da li je spor prijem podataka ili slanje podataka (reakcija uređaja na poslatu komandu).
[ komplikator @ 29.03.2013. 07:58 ] @
Prvo, zadatak koji si opisao bi uz puno manje utjecaja raznih faktora ili mogućih izvora problema izvršavao jedan mali jeftini sklop s mikrokontrolerom tipa atmela 8051 ili AVR, PIC ili sl. za cijenu troškova od možda 20-25$.

Drugo, većina vagi šalje podatke na port kontinuirano ili u nekim bulkovima svakih pola sekunde, sekundu... zavisi kako je programirana. Očitavaš prethodno stanje i novo stanje i ako dođe do promjene vrijednost usporediš sa limitom, okineš port, isprazniš vrijednosti i vozi dalje... Već godinama očitavam mosne vage po silosima i asfaltnim bazama, razne analizatore i sl. i sve kod vaga radi uglavnom na ovaj sistem. Napominjem, ako PC glumi neku automatsku regulaciju tipa kontrolera koji upravlja punjenjem proizvoda u pakovanja na točnu mjeru i sl. tada unatoč idejama o uštedi zbog takvog pristupa ili sl. ipak treba odabrati namjenski i sigurniji uređaj. Također, koliko mi je ostalo u sjećanju, razne vage se mogu programirati svakako i da rade svašta i imaju na sebi razne portove i ekstenzije. Provjeri ima li tvoja vaga port koji može signalizirati i da joj se upiše program gdje se port aktivira na neki limit i preskoči priču s PC-em.
[ gobs @ 29.03.2013. 18:03 ] @
Ljudi hvala vama na javljanju.Konačno rješenje će biti sa PLC_om ,
nego mi je bilo lakše ovako da skuzim protokol pošto sam dobio neku šturu dokumentaciju uz vagu .
Što se tiče vage (vaga CAS AP-EX L serija) ona šalje podatke samo na zahtjev .
Pa rekoh aj da probam ovako da ne trošim PLC a već mi je potreban računar na tom mjestu.