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
|
void __fastcall TMonThread::Execute()
{
int i;
int iCompteurRead=0;
int iDebut, iNbr, iIndexRangement=0;
int iDebutW, iNbrW;
int iCompteurWrite=0;
int iIndexRangementW=0;
AnsiString asTmp;
TDate d1,d2;
TCoupleInt *ciCouple;
//CODE DU THREAD DE LECTURE
//on effectue dabord un sleep pour laiser a la com le temps de s'initialiser
Sleep(100);
//on effectue une boucle infinie pour effectuer le meme code a l'infini
while(Form1->bFinThreadLec)
{
Form1->clSurThread.isTCom++;
if(Form1->clSurThread.isTCom > 10000)
Form1->clSurThread.isTCom = 0;
d1=Now(); //recuperation de l'heure au debut de la sequence de requete
//boucle lisant les deux tableaux ou sont stocker les MW a lire (dans le premier) et le nombre de mw pour chaque requete (dans le deuxieme)
for(iCompteurRead=0;iCompteurRead<(Form1->ListMwRead->Count);iCompteurRead++)
{
if(Form1->iCompteurErreurCom < 2)
{
ciCouple = (TCoupleInt *)(Form1->ListMwRead->Items[iCompteurRead]);
iDebut = ciCouple->Valeur1;
iNbr = ciCouple->Valeur2;
if(LireMotsModbus(Form1->ListValeurLecture, iDebut, iNbr, iIndexRangement)==false)
Form1->iCompteurErreurCom++;
else
Form1->iCompteurErreurCom = 0;
iIndexRangement = iIndexRangement + StrToInt(ciCouple->Valeur2);
}
}
iIndexRangement=0;
iCompteurRead=0;
//boucle lisant les deux tableaux ou sont stocker les MW a écrire
//(dans le premier) et le nombre de mw pour chaqur requete (dans le deuxieme)
for(iCompteurWrite=0;iCompteurWrite<(Form1->ListMwWrite->Count);iCompteurWrite++)
{
if(Form1->iCompteurErreurCom < 2)
{
ciCouple = (TCoupleInt *)(Form1->ListMwWrite->Items[iCompteurRead]);
iDebutW = ciCouple->Valeur1;
iNbrW = ciCouple->Valeur2;
if(EcrireMotsModbus(Form1->ListValeurEcriture, iDebutW, iNbrW, iIndexRangementW)==false)
Form1->iCompteurErreurCom++;
else
Form1->iCompteurErreurCom = 0;
iIndexRangementW = iIndexRangementW + StrToInt(ciCouple->Valeur2);
}
}
iIndexRangementW=0;
iCompteurWrite=0;
d2=Now(); //recuperation de l'heure a la fin de la sequence de requete
//calcul du temps en ms qu'a mis le programme pour faire toute les requetes
Form1->iTempsCom=StrToInt(FormatDateTime("szzz",d2-d1));
Form1->TimerSurveilance->Enabled = true;
}
Form1->bTLecFini = true;
} |
Partager