Mis à la bonne place de caractères lu du port com

marin1617
Messages postés
43
Date d'inscription
samedi 3 août 2013
Statut
Membre
Dernière intervention
17 décembre 2019
- 1 oct. 2013 à 16:53
marin1617
Messages postés
43
Date d'inscription
samedi 3 août 2013
Statut
Membre
Dernière intervention
17 décembre 2019
- 29 oct. 2013 à 20:05
Bonjour, un nouveau pb sur lequel je travail.
voici ce que j'obtiens :



OPéRATEUR : LEVEL 3


GROUPES FONCTIONNELS : RELEVE GENERAL



NUMERO LIBELLE SEUILS ETAT MESURE UNITE


1-05-2-01 TEMP. ECHAP. APRES
H
C
4
H
5
A
0
U

D

I

ERE RECUP TD OK 373 °C


1-05-2-02 TEMP. ECHAP. ENTREE


/13/10/10/32/32/32/32/32/32/32/32/32/32/32/32/32/32/32/32/32/32/32/32/32/32/32/32/32/32/32/32/32/32/32/32/32/32/32/32/32/32/32/32/32/32/32/32/32/32/32/32/32/32/32/32/32/32/32/32/32/32/32/32/32/32/32/79/112/233/114/97/116/101/117/114/32/58/32/108/101/118/101/108/32/51/13/10/10/32/32/32/32/32/32/32/32/32/32/32/32/32/32/32/32/32/32/32/32/32/32/71/114/111/117/112/101/115/32/70/111/110/99/116/105/111/110/110/101/108/115/32/58/32/82/69/76/69/86/69/32/71/69/78/69/82/65/76/13/10/10/10/78/85/77/69/82/79/32/32/32/32/76/73/66/69/76/76/69/32/32/32/32/32/32/32/32/32/32/32/32/32/83/69/85/73/76/83/32/32/32/32/32/32/32/32/32/32/32/32/32/32/32/32/32/32/32/32/69/84/65/84/32/32/32/32/32/32/77/69/83/85/82/69/32/32/32/85/78/73/84/69/13/10/10/49/45/48/53/45/50/45/48/49/32/32/84/69/77/80/46/32/69/67/72/65/80/46/32/65/80/82/69/83/32/32/13/32/32/32/32/32/32/32/32/32/32/32/32/32/32/32/32/32/32/32/32/32/32/32/32/32/32/32/32/32/32/72/13/32/32/32/32/32/32/32/32/32/32/32/32/32/32/32/32/32/32/32/32/32/32/32/32/32/32/32/32/32/32/32/67/13/32/32/32/32/32/32/32/32/32/32/32/32/32/32/32/32/32/32/32/32/32/32/32/32/32/32/32/32/32/32/32/52/13/32/32/32/32/32/32/32/32/32/32/32/32/32/32/32/32/32/32/32/32/32/32/32/32/32/32/32/32/32/32/32/32/72/13/32/32/32/32/32/32/32/32/32/32/32/32/32/32/32/32/32/32/32/32/32/32/32/32/32/32/32/32/32/32/32/32/53/13/32/32/32/32/32/32/32/32/32/32/32/32/32/32/32/32/32/32/32/32/32/32/32/32/32/32/32/32/32/32/32/32/32/65/13/32/32/32/32/32/32/32/32/32/32/32/32/32/32/32/32/32/32/32/32/32/32/32/32/32/32/32/32/32/32/32/32/32/48/13/32/32/32/32/32/32/32/32/32/32/32/32/32/32/32/32/32/32/32/32/32/32/32/32/32/32/32/32/32/32/32/32/32/32/85/13/32/32/32/32/32/32/32/32/32/32/32/32/32/32/32/32/32/32/32/32/32/32/32/32/32/32/32/32/32/32/32/32/32/32/32/13/32/32/32/32/32/32/32/32/32/32/32/32/32/32/32/32/32/32/32/32/32/32/32/32/32/32/32/32/32/32/32/32/32/32/32/68/13/32/32/32/32/32/32/32/32/32/32/32/32/32/32/32/32/32/32/32/32/32/32/32/32/32/32/32/32/32/32/32/32/32/32/32/32/13/32/32/32/32/32/32/32/32/32/32/32/32/32/32/32/32/32/32/32/32/32/32/32/32/32/32/32/32/32/32/32/32/32/32/32/32/73/13/32/32/32/32/32/32/32/32/32/32/32/32/32/32/32/32/32/32/32/32/32/32/32/32/32/32/32/32/32/32/32/32/32/32/32/32/32/13/32/32/32/32/32/32/32/32/32/32/32/32/32/32/32/32/32/32/32/32/32/32/32/32/32/32/32/32/32/32/32/32/32/32/32/32/32/69/82/69/32/82/69/67/85/80/32/84/68/32/32/32/32/32/32/32/32/32/32/32/32/79/75/32/32/32/32/32/51/55/48/32/32/32/32/32/176/67/13/10/10/49/45/48/53/45/50/45/48/50/32/32/84/69/77/80/46/32/69/67/72/65/80/46/32/69/78/84/82/69/69

Et ce que je devrais obtenir:




OPéRATEUR : LEVEL 3


GROUPES FONCTIONNELS : RELEVE GENERAL



NUMERO LIBELLE SEUILS ETAT MESURE UNITE

1-05-2-01 TEMP. ECHAP. APRES CHAUDIERE RECUP TD
H 450 OK 373 °C

1-05-2-02 TEMP. ECHAP. ENTREE etc...

Merci

17 réponses

sp40
Messages postés
1284
Date d'inscription
mardi 28 octobre 2003
Statut
Contributeur
Dernière intervention
3 juillet 2015
13
1 oct. 2013 à 17:27
Le code, mon ami, le code...
0
marin1617
Messages postés
43
Date d'inscription
samedi 3 août 2013
Statut
Membre
Dernière intervention
17 décembre 2019

1 oct. 2013 à 17:50
Voici le code :

 procedure TForm1.ComPort1RxChar(Sender: TObject; Count: Integer);
var
    NouveauMsg,MsgInt : string;
    PosEndTrame,i,p : Integer;
 begin
 {*** lecture du port com 1  ***}
     ComPort1.ReadStr(NouveauMsg, Count);

    MonMessage := MonMessage + NouveauMsg;
    MonMessage := Uppercase(MonMessage);
    PosEndTrame := Pos(#13, MonMessage);
    if PosEndTrame <> 0 then
        while PosEndTrame <> 0 do
        begin
            TrameCp := Copy(MonMessage, 0, PosEndTrame -1);
      { *** Remplacement du caractère $F8 par $B0 ***}
          //  p := pos( chr($F8), TrameCp);
            //  if p>0 then       // si le caractère est présent, on le remplace
              //  TrameCp[p] := chr($B0);
                richEditRecept.Lines.Add(TrameCp);  // dans tous les cas, la trame est ajoutée
                Inc (Cpt_Evt);
      { *** lecture des caractères ASCII  *** }
        MsgInt :='';
          For i := 1 to length(NouveauMsg)
            do MsgInt := MsgInt + '/' + inttostr (ord(NouveauMsg[i]));
             RichEditInt.Lines.Text := RichEditInt.Lines.Text + MsgInt;
          
        { *** Mis en couleur de certaines lignes et écriture dans les RichEdit respectif  *** }
             if (pos(' OPR ', TrameCP)) <> 0 then
                begin
               RichEdit_OPR.SelAttributes.Color := clBlue;
               RichEdit_OPR.Lines.Add(TrameCp);
               Inc (Cpt_Alm_Inhi);

                end;
             if (Pos(' ALM ', TrameCp)) <> 0 then
                begin
                  RichEditLog.SelAttributes.Color := clred ;
                  richEditLog.Lines.Add(TrameCp);
                  Inc (Cpt_ALM);
                end;
              if (Pos(' ACK ', TrameCp)) <> 0 then
                begin
                   //RichEditLog.SelAttributes.Color := $000080FF; // Orange
                   RichEditLog.SelAttributes.Color := clTeal;
                   richEditLog.Lines.Add(trameCp);
                end;
              if (Pos(' RTN ', TrameCp)) <> 0 then
                begin
                  RichEditLog.SelAttributes.Color := clLime;
                  RichEditLog.Lines.Add(trameCp);
                end;

    MonMessage := Copy(MonMessage, PosEndTrame +1, Length(MonMessage));
            PosEndTrame := Pos(#13, MonMessage);

        end;
end;
0
sp40
Messages postés
1284
Date d'inscription
mardi 28 octobre 2003
Statut
Contributeur
Dernière intervention
3 juillet 2015
13
2 oct. 2013 à 09:29
Mouais... Pas évident... Tu reçois "CHAUDIERE RECUP TD" en même temps que "H 450 OK 373 °C". Et tout plein d'espaces en plein milieu... (les "32"). Je ne sais pas si c'est normal, mais j'ai bien l'impression qu'il va falloir bidouiller un peu ta réception pour la remettre en forme ou travailler sur la programmation de l'automate... T'es sûr que ton automate n'est pas grillé ?
0
marin1617
Messages postés
43
Date d'inscription
samedi 3 août 2013
Statut
Membre
Dernière intervention
17 décembre 2019

2 oct. 2013 à 09:53
Bonjour Simon et merci de ton aide, en fait c'est un PC qui centralise des alarmes. mon job et de remplacer une imprimante OKI par une imprimante informatique via le port com. J'aurai bien besoin d'un coup de main pour bidouiller ma réception.
Frédéric
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
sp40
Messages postés
1284
Date d'inscription
mardi 28 octobre 2003
Statut
Contributeur
Dernière intervention
3 juillet 2015
13
2 oct. 2013 à 09:59
Aujourd'hui ça va être chaud... D'ici la fin de semaine peut être ?
0
marin1617
Messages postés
43
Date d'inscription
samedi 3 août 2013
Statut
Membre
Dernière intervention
17 décembre 2019

3 oct. 2013 à 22:05
Bonsoir Simon, j'ai modifié les paramètres du PC maître et, depuis l'impression sur l'imprimante OKI est nickel.
Par contre en connectant mon PC (imprimante informatique) ce sont des caractères spéciaux qui apparaissent. Je vais une copie de ce que je reçois demain.

Le marin
0
solilog
Messages postés
273
Date d'inscription
samedi 13 juin 2009
Statut
Membre
Dernière intervention
18 avril 2015
10
3 oct. 2013 à 22:42
Bonsoir,
tes caractères :/32/34/ sont les caractères de la chaine que tu as reçue. tu dois ecrire une function qui convertit
/65/66/67/68 en ABCD car chr(65) = A, chr(66)=B
Regarde cette fonction je l'ai testés avec des caractères et çà roule:
function Port_2_Str( vInput : string ): string;
var p:integer;
    vTmp : string;
    vNbr, err  : integer;
begin
   result:='';
   vTmp := trim( vInput );
   if vTmp[1]='/' then delete(vTmp, 1, 1);
   p:= pos('/', vTmp);
   while p>0 do
   begin
      val( copy(vTmp,1, p-1), vNbr, Err);
      if Err=0 then result := result + chr( vNbr );
      delete(vTmp, 1, p);
      p:= pos('/', vTmp);
   end;
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
   memo2.text := Port_2_Str( Memo1.text );
end;

2 Memo, 1 bouton tu colles dans le memo1 tes /32/34 ....
et tu auras ton texte dans le 2eme memo.
salut.

solilog
0
solilog
Messages postés
273
Date d'inscription
samedi 13 juin 2009
Statut
Membre
Dernière intervention
18 avril 2015
10
4 oct. 2013 à 00:06
Ah,
une petite errreur, il ne traite pas le dernier car si pas de '/' à la fin. Il suffit de rajouter
 
val( vTmp vNbr, Err);
if Err=0 then result := result + chr( vNbr );

avant le dernier end;
solilog


--
0
sp40
Messages postés
1284
Date d'inscription
mardi 28 octobre 2003
Statut
Contributeur
Dernière intervention
3 juillet 2015
13
4 oct. 2013 à 09:17
Solilog, les nombres séparés par les "/" correspondent à la traduction du message par "ord" pour voir juste ce qui arrive sur le port (c'est du debug), la finalité du programme étant de récupérer l'info telle qu'il voudrait la voir...
0
marin1617
Messages postés
43
Date d'inscription
samedi 3 août 2013
Statut
Membre
Dernière intervention
17 décembre 2019

4 oct. 2013 à 07:26
Bonjour Solilog,
Est ce que ton code est en rapport avec les ASCII que j'ai posté plus haut? Car je ne vois pas de /32/34 mais que des 32.
Sinon j'ai modifié les paramètre du PC maître, maintenant l'impression se fais bien sur l'imprimante OKI. Mais par contre les caractères lu sont incompréhensible. Je vais les poster dès que je peux.... Merci de ton aide
Le marin
0
marin1617
Messages postés
43
Date d'inscription
samedi 3 août 2013
Statut
Membre
Dernière intervention
17 décembre 2019

4 oct. 2013 à 08:16
Donc, du fait du changement de pilote du PC maître, je ne parviens plus à lire le port com avec le code posté plus haut.
il me dit : (Project Project1.exe raistOfRessources with message "RichEdit line insertion error". Process stopped.Use step or run to conrinue.)

J'arrive à lire des caractères spéciaux avec l'outil TComTerminal. Voilà pour le moment.....
Le marin
0
solilog
Messages postés
273
Date d'inscription
samedi 13 juin 2009
Statut
Membre
Dernière intervention
18 avril 2015
10
9 oct. 2013 à 18:25
Bonsoir,
J'ai mis /32/34 "comme çà" mais j'ai testé toute ta chaine /13/10/10..., que je l'ai passée à ma fonction et je retrouve exactement ton texte :
OPéRATEUR : LEVEL 3
GROUPES FONCTIONNELS : RELEVE GENERAL
NUMERO LIBELLE SEUILS ETAT MESURE UNITE
1-05-2-01 TEMP. ECHAP. APRES CHAUDIERE RECUP TD
H 450 OK 373 °C

En fait tu reçois tous les caractères ACSII en numerique avec / comme séparateur et il faut les convertir. Donc un fois ta chaine reçue depuis le port com, tu envoies à ma fonction et tu imprimes le résultat.
(attention ma remarque à propos du dernier caractère)
Essaye.
solilog
0
marin1617
Messages postés
43
Date d'inscription
samedi 3 août 2013
Statut
Membre
Dernière intervention
17 décembre 2019

16 oct. 2013 à 12:01
Merci de ton aide solilog, j'ai testé ta fonction, mais il ne se passe rien.
Dans mon RichEditRecept :

OPéRATEUR : LEVEL 3





GROUPES FONCTIONNELS : RELEVE GENERAL







NUMERO LIBELLE SEUILS ETAT MESURE UNITE





1-05-2-01 TEMP. ECHAP. APRES

H

C

4

H

5

A

0

U



D



I



ERE RECUP TD OK 373 °C
dans mon RichEditInt :
/85/82/32/58/32/76/69/86/69/76/32/51/13/10
/13/10/13/10/32/32/32/32/32/32/32/32/32/32
/13/10/13/10/32/32/32/32/32/32/32/32/32/32
/71/69/78/69/82/65/76/13/10/13/10/13/10/13
/71/69/78/69/82/65/76/13/10/13/10/13/10/13
/71/69/78/69/82/65/76/13/10/13/10/13/10/13
/71/69/78/69/82/65/76/13/10/13/10/13/10/13
/85/82/69/32/32/32/85/78/73/84/69/13/10/13
/85/82/69/32/32/32/85/78/73/84/69/13/10/13
/10/13/10/49/45/48/53/45/50/45/48/49/32/32
/80/82/69/83/32/32/13/10/32/32/32/32/32/32
/32/32/32/32/32/32/32/32/32/32/72/13/10/32
/32/32/67/13/10/32/32/32/32/32/32/32/32/32
/32/32/32/32/32/32/32/32/52/13/10/32/32/32
/32/72/13/10/32/32/32/32/32/32/32/32/32/32
/32/32/32/32/32/32/32/32/53/13/10/32/32/32
/32/32/65/13/10/32/32/32/32/32/32/32/32/32
/32/32/32/32/32/32/32/32/32/32/48/13/10/32
/32/32/32/32/32/85/13/10/32/32/32/32/32/32
/32/13/10/32/32/32/32/32/32/32/32/32/32/32
/32/32/32/32/32/32/32/32/32/32/68/13/10/32
/32/32/32/32/32/32/32/13/10/32/32/32/32/32
/32/32/32/73/13/10/32/32/32/32/32/32/32/32
/32/13/10/32/32/32/32/32/32/32/32/32/32/32
/32/51/55/51/32/32/32/32/32/176/67/13/10

et rien dans mon RichEdit_Conv.

 procedure TForm1.ComPort1RxChar(Sender: TObject; Count: Integer);
var
    NouveauMsg,MsgInt : string;
    PosEndTrame,i : Integer;
 begin
 {*** lecture du port com 1  ***}
     ComPort1.ReadStr(NouveauMsg, Count);

    MonMessage := MonMessage + NouveauMsg;
    MonMessage := Uppercase(MonMessage);
    PosEndTrame := Pos(#13, MonMessage);
    if PosEndTrame <> 0 then
        while PosEndTrame <> 0 do
        begin
            TrameCp := Copy(MonMessage, 0, PosEndTrame -1);
      { *** Remplacement du caractère $F8 par $B0 ***}
            //p := pos(#32, TrameCp);
            //  if p>0 then       // si le caractère est présent, on le remplace
              //  TrameCp[p] := (#33);
                richEditRecept.Lines.Add(TrameCp);  // dans tous les cas, la trame est ajoutée
                Inc (Cpt_Evt);
      { *** lecture des caractères ASCII  *** }
        MsgInt :='';
          For i := 1 to length(NouveauMsg)
            do MsgInt := MsgInt + '/' + inttostr (ord(NouveauMsg[i]));
             RichEditInt.Lines.Text := RichEditInt.Lines.Text + MsgInt;

......
Function Conversion( vInput : string):string;
var
p,vNbr,Err : integer;
vTmp : string;
Begin
  result:='';
  vTmp := trim( vInput );
  if vTmp[1]='/' then delete (vTmp,1,1);
  p:= pos ('/', vTmp);
  While p>0 do
    begin
      val( copy(vTmp,1,p-1), vNbr, Err);
      if Err = 0 then result := result + chr( vNbr );
      delete(vTmp,1,p);
      p:= pos('/',vTmp);
    end;
   // val( vTmp vNbr,Err);
   // if err=0 then result := result + chr(vNbr);
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
richEdit_conv.Lines.Text :=  conversion(RicheditRecept.Lines.Text);
end;
0
sp40
Messages postés
1284
Date d'inscription
mardi 28 octobre 2003
Statut
Contributeur
Dernière intervention
3 juillet 2015
13
16 oct. 2013 à 12:05
oui, tu as le mot "chaudiere" et "H 450 OK 373 °C " qui semblent arriver en même temps sur ton port com... est-ce que ça ne serait pas à régler du côté de ton automate ? Parce que là, je ne vois pas trop comment on peut arriver à différencier les différentes trames qui arrivent... T'es bien reparti du code qui marchait bien la dernière fois ? (pas le mien, mais l'autre, je ne sais plus qui te l'avait donné...)
0
marin1617
Messages postés
43
Date d'inscription
samedi 3 août 2013
Statut
Membre
Dernière intervention
17 décembre 2019

16 oct. 2013 à 14:12
Bonjour simonpelloquin, en fait je vais lire le port com dans PC qui sert de centrale d'alarme. Et avant il y avait une imprimante OKI. C'est pour remplacer cette dernière que je travail sur ce sujet.
0
sp40
Messages postés
1284
Date d'inscription
mardi 28 octobre 2003
Statut
Contributeur
Dernière intervention
3 juillet 2015
13
16 oct. 2013 à 14:32
oui, tu m'avais expliqué ça. Mais est-ce que ce n'est pas un réglage à faire du côté de l'automate qui envoie les données. J'ai l'impression que deux trames se chevauchent...
0
marin1617
Messages postés
43
Date d'inscription
samedi 3 août 2013
Statut
Membre
Dernière intervention
17 décembre 2019

16 oct. 2013 à 15:38
La seul possibilité que j'ai, c'est de changer le driver de l'imprimante. Mais si je sélectionne le driver OKI, je reçois des caractères inexploitable que je n'arrive à lire qu'avec l'outil Tcomport, mais bien sur l'impression est correcte.
pas facile
0
sp40
Messages postés
1284
Date d'inscription
mardi 28 octobre 2003
Statut
Contributeur
Dernière intervention
3 juillet 2015
13
16 oct. 2013 à 16:54
Tu l'as dit...
0
solilog
Messages postés
273
Date d'inscription
samedi 13 juin 2009
Statut
Membre
Dernière intervention
18 avril 2015
10
16 oct. 2013 à 17:53
Bonsoir,
Je croyais ton post résolu, ma/ta fonction marche (il faut simplement enlever les commentaires // sur les 2 lignes (pour traiter le dernier caractère, j'insiste).
Si le RichEditInt contient ta longue chaine genre "/85/82/32..." tu fais simplement
RichEdit_Conv.text := Conversion(RichEditInt.text);
et tu auras ton résultat. J'ai testé
Maintenant du devrais t'en sortir, m'arrête là :-)
Salut.
solilog
0
solilog
Messages postés
273
Date d'inscription
samedi 13 juin 2009
Statut
Membre
Dernière intervention
18 avril 2015
10
16 oct. 2013 à 18:00
Re salut
J'ai regardé à nouveau ton source. Tu as un bug:
richEdit_conv.Lines.Text est faux, remplace par
richEdit_conv.Text.
Là tu y es.
solilog




--
0
marin1617
Messages postés
43
Date d'inscription
samedi 3 août 2013
Statut
Membre
Dernière intervention
17 décembre 2019

17 oct. 2013 à 21:56
Excuse moi solilog, mais il ne se passe rien quand j'exécute ce code:



unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, ExtCtrls, CPort, CPortCtl, ComCtrls, jpeg, Menus;

type
  TForm1 = class(TForm)
    ComPort1: TComPort;
    Timer1: TTimer;
    ComLed3: TComLed;
    Label3: TLabel;
    Timer2: TTimer;
    Edit1: TEdit;
    Edit2: TEdit;
    Image1: TImage;
    Button4: TButton;
    Label12: TLabel;
    Label13: TLabel;
    Label14: TLabel;
    MainMenu1: TMainMenu;
    Fichier1: TMenuItem;
    Quitter1: TMenuItem;
    Aide1: TMenuItem;
    GroupBox1: TGroupBox;
    GroupBox2: TGroupBox;
    RichEditRecept: TRichEdit;
    RichEditLog: TRichEdit;
    RichEdit_OPR: TRichEdit;
    Label4: TLabel;
    Label5: TLabel;
    RichEditInt: TRichEdit;
    RichEdit_Conv: TRichEdit;
    Button1: TButton;
    procedure Timer1Timer(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure Timer2Timer(Sender: TObject);
    procedure ComPort1RxChar(Sender: TObject; Count: Integer);
    procedure Button4Click(Sender: TObject);
    procedure Quitter1Click(Sender: TObject);
    procedure Aide1Click(Sender: TObject);
    procedure RichEditReceptChange(Sender: TObject);
    procedure RichEditLogChange(Sender: TObject);
    procedure RichEdit_OPRChange(Sender: TObject);
    procedure RichEditIntChange(Sender: TObject);
    procedure Button1Click(Sender: TObject);

  private
    { Private declarations }
    MonMessage : String;
     mess : string;
  public
    { Public declarations }
  end;

var
  Form1: TForm1;
  AllowedDateTime: string;
  NomFichEvenement: string;
  NomFichEvenement1: string;
  ExtRecept: string;
  NomFichAlarme : string;
  NomFichAlarme1 : string;
  ExtLog : string;
  LegalDateTime : string;
  TrameCp : string;
  Cpt_ALM, Cpt_Evt,Cpt_Alm_Inhi : integer;
implementation

{$R *.dfm}

Function Conversion( vInput : string):string;
var
p,vNbr,Err : integer;
vTmp : string;
Begin
  result:='';
  vTmp := trim( vInput );
  if vTmp[1]='/' then delete (vTmp,1,1);
  p:= pos ('/', vTmp);
  While p>0 do
    begin
      val( copy(vTmp,1,p-1), vNbr, Err);
      if Err = 0 then result := result + chr( vNbr );
      delete(vTmp,1,p);
      p:= pos('/',vTmp);
    end;
   end;

procedure TForm1.Timer1Timer(Sender: TObject);  // Gestion du Port Com
begin
 If  comport1.Port = 'COM1'
  Then
     begin
        comport1.SetDTR(true);  // met à l'état de travail "0" la sortie DTR (+10V)
        comport1.SetRTS(true); // met à l'état de travail "0" la sortie RTS (+10V)
     end
      Else
        begin
          comport1.SetDTR(false) ;
          comport1.SetRTS(false);
       end;
 end;

procedure TForm1.FormCreate(Sender: TObject);
begin
Timer1.Enabled:=true;
Application.Title:='Alarmes CMR';

end;

// Retourne un string sous la forme "ddmmyyyyhhmmss" :
function AllowedStrDateTime(const sDate, sTime: string): string;
var
  AllowedStrDate, AllowedStrTime: string;
begin
  AllowedStrDate := Copy(sDate, 1 , 2) +' '+ Copy(sDate, 4, 2) +' '+ Copy(sDate, 7, 4);
  AllowedStrTime := Copy(sTime, 1, 2) +'H'+ Copy(sTime, 4, 2) +'min'+ Copy(sTime, 7, 2)+'s';
  Result := AllowedStrDate + ' à ' + AllowedStrTime;
end;


 procedure TForm1.ComPort1RxChar(Sender: TObject; Count: Integer);
var
    NouveauMsg,MsgInt : string;
    PosEndTrame,i : Integer;
 begin
 {*** lecture du port com 1  ***}
     ComPort1.ReadStr(NouveauMsg, Count);

    MonMessage := MonMessage + NouveauMsg;
    MonMessage := Uppercase(MonMessage);
    PosEndTrame := Pos(#13, MonMessage);
    if PosEndTrame <> 0 then
     while PosEndTrame <> 0 do
      begin
       TrameCp := Copy(MonMessage, 0, PosEndTrame -1);
       richEditRecept.Lines.Add(TrameCp);  // dans tous les cas, la trame est ajoutée
       Inc (Cpt_Evt);

      { *** lecture des caractères ASCII  *** }
        MsgInt :='';
          For i := 1 to length(NouveauMsg)
            do MsgInt := MsgInt + '/' + inttostr (ord(NouveauMsg[i]));
             RichEditInt.Lines.Text := RichEditInt.Lines.Text + MsgInt;

        { *** Mis en couleur de certaines lignes et écriture dans les RichEdit respectif  *** }
             if (pos(' OPR ', TrameCP)) <> 0 then
                begin
               RichEdit_OPR.SelAttributes.Color := clBlue;
               RichEdit_OPR.Lines.Add(TrameCp);
               Inc (Cpt_Alm_Inhi);

                end;
             if (Pos(' ALM ', TrameCp)) <> 0 then
                begin
                  RichEditLog.SelAttributes.Color := clred ;
                  richEditLog.Lines.Add(TrameCp);
                  Inc (Cpt_ALM);
                end;
              if (Pos(' ACK ', TrameCp)) <> 0 then
                begin
                   //RichEditLog.SelAttributes.Color := $000080FF; // Orange
                   RichEditLog.SelAttributes.Color := clTeal;
                   richEditLog.Lines.Add(trameCp);
                end;
              if (Pos(' RTN ', TrameCp)) <> 0 then
                begin
                  RichEditLog.SelAttributes.Color := clLime;
                  RichEditLog.Lines.Add(trameCp);
                end;

    MonMessage := Copy(MonMessage, PosEndTrame +1, Length(MonMessage));
          PosEndTrame := Pos(#13, MonMessage);

        end;
end;

procedure TForm1.Timer2Timer(Sender: TObject);// gestion de date et heure, Enregistrement Auto
 const EnregistAuto=('00:00:00');

 Begin
 label5.Caption := ('Nb  d'' évènements  ' + inttostr (Cpt_Evt)) ;
label4.Caption := ('Nb d'' alarmes  ' + inttostr(Cpt_ALM)) ;
label14.Caption := FormatDateTime('dddddd tt', Now);
Edit1.Text := DateToStr(Date);
Edit2.Text := TimeToStr(Time);
  if Edit2.Text = EnregistAuto then
      begin
 // envoi des évènements sur un disque local
          NomFichEvenement := 'E:CMREvènementsEvènements.txt '; // PC en machine
         // NomFichEvenement := 'E:CMREvènementsEvènements.txt ';   // Pc portable
          ExtRecept := ExtractFileExt(NomFichEvenement);
          Delete(NomFichEvenement, Pos(ExtRecept, NomFichEvenement), Length(ExtRecept));
          AllowedDateTime := AllowedStrDateTime (Edit1.Text,Edit2.Text);
          NomFichEvenement := Format('%s   %s   %s', [NomFichEvenement, AllowedDateTime, ExtRecept]);
          label12.Visible := true;
          label12.Caption := AllowedDateTime;

          // envoi des alarmes sur un disque local
          NomFichAlarme := 'E:CMRAlarmesAlarmes.txt '; // PC en machine
         // NomFichAlarme := 'E:CMRAlarmesAlarmes.txt ';   // Pc portable
          ExtLog := ExtractFileExt(NomFichAlarme);
          Delete(NomFichAlarme, Pos(Extlog, NomFichAlarme), Length(ExtLog));
          AllowedDateTime := AllowedStrDateTime (Edit1.Text,Edit2.Text);
          NomFichAlarme := Format('%s   %s   %s', [NomFichAlarme, AllowedDateTime, Extlog]);
          label12.Visible := true;
          label12.Caption := AllowedDateTime;

  end;
end;
procedure TForm1.Button4Click(Sender: TObject);  //Enregistement manu
      begin
         // envoi des évènements sur un disque local
          NomFichEvenement := 'E:CMREvènementsEvènements.txt ';   // Chemin d'enregistrement
          ExtRecept := ExtractFileExt(NomFichEvenement);
          Delete(NomFichEvenement, Pos(ExtRecept, NomFichEvenement), Length(ExtRecept));
          AllowedDateTime := AllowedStrDateTime (Edit1.Text,Edit2.Text);
          NomFichEvenement := Format('%s   %s   %s', [NomFichEvenement, AllowedDateTime, ExtRecept]);
         // MemoRecept.Lines.SaveToFile(NomFichEvenement);
          RichEditRecept.Lines.SaveToFile(NomFichEvenement);
          label12.Visible := true;
          label12.Caption := AllowedDateTime;


  end;

procedure TForm1.Quitter1Click(Sender: TObject);
begin
 comport1.SetDTR(false);   // met à l'état de repos "1" la sortie DTR (-10V)
 comport1.SetRTS(false);   // met à l'état de repos "1" la sortie RTS (-10V)
 comport1.Connected:=false;
 close;
end;

procedure TForm1.Aide1Click(Sender: TObject);
begin
showmessage ('Enregistrement sur le ''E:CMR... '' et ''X:2 - Chef MécanicienCMR... ''à chaque passage à 0h, mais il est possible d''effectuer un enregistrement immediat avec la touche enregistrement.');
end;

procedure TForm1.RichEditReceptChange(Sender: TObject);
begin
SendMessage(RichEditRecept.Handle,WM_VSCROLL,SB_BOTTOM,0);
end;

procedure TForm1.RichEditLogChange(Sender: TObject);
begin
SendMessage(RichEditLog.Handle,WM_VSCROLL,SB_BOTTOM,0);
end;

procedure TForm1.RichEdit_OPRChange(Sender: TObject);
begin
SendMessage(RichEdit_OPR.Handle,WM_VSCROLL,SB_BOTTOM,0);
end;

procedure TForm1.RichEditIntChange(Sender: TObject);
begin
SendMessage(RichEditInt.Handle,WM_VSCROLL,SB_BOTTOM,0);
end;



procedure TForm1.Button1Click(Sender: TObject);
begin
   {*** mis en place des caractères ***}
  richEdit_conv.Text :=  conversion(RicheditRecept.Text);

end;

end.
0
marin1617
Messages postés
43
Date d'inscription
samedi 3 août 2013
Statut
Membre
Dernière intervention
17 décembre 2019

29 oct. 2013 à 20:05
Bonjour Solilog, je ne m'en sort pas, peux tu me filer ton code?
Un grand merci d'avance
Le marin
0