Description
Le programme suivant est une petite application de démonstration qui envoie le message "Hello World" via un modem compatible Hayes (Com One, Deskline 56K).
Pour lancer l'application, la variable "stage" (étape) doit être réglée à 1 dans une table d'animation Control Expert.
Types de données des variables
start_xxmit_block |
|
command |
|
msgout |
|
Msg_Size |
|
xmit_DONE |
|
xmit_ERROR |
|
xmit_ACTIVE |
|
xxmit_RESPTOUT |
|
xxmit_STARTDLY |
|
xxmit_ENDDLY |
|
xmit_STATUS_mem |
|
counter |
|
stage |
|
Section IEC pour XXMIT
Utilisez le programme suivant dans une section FBD :

Section IEC pour les commandes du modem
Effectuez la programmation suivante dans une section ST :
(* %S6 sert à générer un retard de 2 secondes *) %m6 := %s6;
if xxmit_STATUS_Mem = 0 then
if not(xxmit_STATUS = 0) then
xxmit _STATUS_Mem := xxmit_STATUS;
end_if; end_if;
(* Si erreur XXMIT, le bloc fonction est arrêté *) if xmit_ERROR=1 then
stage := 0;
counter := 0;
start_xxmit_block:=0; end_if;
if stage = 1 then
(* Message d'initialisation*)
xxmit_STATUS_Mem := 0;
counter := 0;
xxmit_ENDDLY := 700;
xxmit_STARTDLY := 600;
xxmit_RESPTOUT := 700;
(* Initialisation du mot de commande *)
command:=2#0000001000000001;
msgout[0] := 16#26;(*&->26*)
msgout[1] := 16#46;(*F->46*)
msgout[2] := 16#26;(*&->26*)
msgout[3] := 16#4B;(*K->46*)
msgout[4] := 16#30;(*0->30*)
msgout[5] := 16#26;(*&->26*)
msgout[6] := 16#44;(*D->44*)
msgout[7] := 16#30;(*0->30*)
msgout[8] := 16#56;(*V->56*)
msgout[9] := 16#31;(*1->31*)
msgout[10] := 16#51;(*Q->51*)
msgout[11] := 16#30;(*0->30*)
msgout[12] := 16#58;(*X->58*)
msgout[13] := 16#30;(*0->30*)
msgout[14] := 16#45;(*E->45*)
msgout[15] := 16#31;(*1->31*)
Msg_Size := 16;
start_xxmit_block:=1;
stage := 2; end_if;
if stage = 3 then
(* Message de numérotation *)
xxmit_STARTDLY := 100;
xxmit_ENDDLY := 100;
xxmit_RESPTOUT := 32000;
(* Initialisation du mot de commande *)
command:=2#0000001000000010;
(* Numéro d'extension *)
msgout[0] := 16#32;(*2*)
msgout[1] := 16#35;(*5*)
msgout[2] := 16#37;(*7*)
msgout[3] := 16#34;(*4*)
start_xxmit_block:=1;
Msg_Size := 4;
stage := 4; end_if;
if (stage = 5)then
if RE(%m6) then
counter := counter + 1;
end_if;
(* Retard de deux secondes *)
if stage = 5 and counter = 2 then
counter := 0;
stage := 7;
end_if; end_if;
if stage = 7 then
(* Message ASCII à envoyer *)
xxmit_STARTDLY := 300;
xxmit_ENDDLY := 400;
xxmit_RESPTOUT := 32000;
(* Initialisation du mot de commande *)
command:2=#0100001000000000;
msgout[0] := 16#48; (*H*)
msgout[1] := 16#65; (*e*)
msgout[2] := 16#6C; (*l*)
msgout[3] := 16#6C; (*l*)
msgout[4] := 16#6F; (*o*)
msgout[5] := 16#20; (* *)
msgout[6] := 16#57; (*W*)
msgout[7] := 16#6F; (*o*)
msgout[8] := 16#72; (*r*)
msgout[9] := 16#6C; (*l*)
msgout[10] := 16#64; (*d*)
msgout[11] := 16#20; (* *)
msgout[12] := 16#21; (*!*)
msgout[13] := 16#21; (*!*)
Msg_Size := 14;
start_xxmit_block:=1;
stage := 8; end_if;
if stage = 100 then
(* Message de raccrochage *)
command:=2#0000001000000100;
xxmit_STARTDLY := 300;
xxmit_ENDDLY := 400;
xxmit_RESPTOUT := 500;
msgout[0] := 16#48;(* *)
msgout[1] := 16#30;(*CR*)
Msg_Size := 2;
start_xxmit_block:=1; end_if;
(* Changement d'état après chaque opération XXMIT *) if xmit_DONE = 1 then
start_xxmit_block:=0;
if stage = 2 then
stage := 3;
end_if;
if stage = 4 then
ounter := 0;
stage := 5;
end_if;
if stage = 8 then
stage := 99;
end_if;
if stage = 99 then
stage :=100;
end_if; end_if;