Dat lijkt me ook niet echt de oplossing.
Je hebt gewoon een probleem in je programma.
Alleen wij zullen nooit aan kunnen geven waarom met de informatie die je gegeven hebt.
Als je opdrachten in een treintje moet afwerken, en dat de volgende moet wachten totdat de voorganger klaar is is het handig om in je routine een vlag te zetten.
Zolang de vlag actief is blijf je wachten totdat de routine een result meld, dan ga door met de volgende.(wel een max tijdroutine met een timer mee laten lopen, dan kan je bij onverwachte problemen toch netjes afsluiten)
Als je de opdrachten nu verzameld in een list o.i.d, dan kan je ze sequentieel afhandelen zonder dat je programma daar last van heeft en door kan draaien.
10.4.2, Delphi2010, of Lazarus 2.2.0
Het probleem is opgelost, ik heb 2 dingen gedaan.
Volgens een ander form (van de fabrikant van de I/Okaart K8055) komt het probleem meer voor, het inlezen van sensors kost tijd.
Daar wordt dan ook aangeraden om de sensors in een keer in te lezen, dat bespaart tijd.
Ik heb daarvoor de code readdigitaalchannel verandert in ReadAllDigital. Met deze code krijg je de 5 sensoren opgeteld binnen als een 5 bits getal.
Dit getal moet je weer ontleden.
Volgens dit form mag je deze code niet meer dan 10 keer per seconde inzetten. (ik zet hem nu 4x per seconde in)
Hiervoor las ik de code 5 x 4 = 20 per seconde in, veel te veel dus.
Maar er was ook nog een ander probleem, ik heb de declaratie Bloktaak :array[1..39 ] of string aangepast naar Bloktaak :array[0..40] of string;
Nu draait alles zonder problemen
Uiteindelijk is het dit geworden.
Bloktaak :array[0..40] of string;
enz, enz, enz
For a:=1 to 5 do SensorOud[a]:=Sensor[a];
Inlees:=ReadAllDigital;
If Inlees>15 then begin Sensor[5]:=1; Inlees:=inlees-16; end else Sensor[5]:=0;
If Inlees>7 then begin Sensor[4]:=1; Inlees:=inlees-8; end else Sensor[4]:=0;
If Inlees>3 then begin Sensor[3]:=1; Inlees:=inlees-4; end else Sensor[3]:=0;
If Inlees>1 then begin Sensor[2]:=1; Inlees:=inlees-2; end else Sensor[2]:=0;
If Inlees=1 then begin Sensor[1]:=1 end else Sensor[1]:=0;
If (Image34.Visible=true) and (SensorOud[1]<>Sensor[1]) then begin
If Sensor[1]=1 then Image34.Picture.LoadFromFile('Tekeningen/Sen1b.bmp');
If Sensor[1]=0 then Image34.Picture.LoadFromFile('Tekeningen/Sen1a.bmp');end;
If (Image35.Visible=true) and (SensorOud[2]<>Sensor[2]) then begin
If Sensor[2]=1 then Image35.Picture.LoadFromFile('Tekeningen/Sen2b.bmp');
If Sensor[2]=0 then Image35.Picture.LoadFromFile('Tekeningen/Sen2a.bmp');end;
If (Image36.Visible=true) and (SensorOud[3]<>Sensor[3]) then begin
If Sensor[3]=1 then Image36.Picture.LoadFromFile('Tekeningen/Sen3b.bmp');
If Sensor[3]=0 then Image36.Picture.LoadFromFile('Tekeningen/Sen3a.bmp');end;
If (Image37.Visible=true) and (SensorOud[4]<>Sensor[4]) then begin
If Sensor[4]=1 then Image37.Picture.LoadFromFile('Tekeningen/Sen4b.bmp');
If Sensor[4]=0 then Image37.Picture.LoadFromFile('Tekeningen/Sen4a.bmp');end;
If (Image38.Visible=true) and (SensorOud[5]<>Sensor[5]) then begin
If Sensor[5]=1 then Image38.Picture.LoadFromFile('Tekeningen/Sen5b.bmp');
If Sensor[5]=0 then Image38.Picture.LoadFromFile('Tekeningen/Sen5a.bmp');end;
If Sensor[1]=1 then begin S1:=1; form4.Shape1.Brush.Color:=Clyellow; end;
If Sensor[2]=1 then begin S2:=1; form4.Shape2.Brush.Color:=Clyellow; end;
If Sensor[3]=1 then begin S3:=1; form4.Shape3.Brush.Color:=Clyellow; end;
If Sensor[4]=1 then begin S4:=1; form4.Shape4.Brush.Color:=Clyellow; end;
If Sensor[5]=1 then begin S5:=1; form4.Shape5.Brush.Color:=Clyellow; end;
Gr Theo
Als Bloktaak je probleem was begrijp ik niet waarom je allerlei code laat zien dat niets met Bloktaak te maken heeft.
Maar goed... Fijn dat het opgelost is
There are currently 1 users browsing this thread. (0 members and 1 guests)
Bookmarks