Réseau sous devicenet pour système automatisé
loustic100
Messages postés
52
Statut
Membre
-
loustic100 Messages postés 52 Statut Membre -
loustic100 Messages postés 52 Statut Membre -
Bonjour,
Je dois réaliser un projet qui doit mettre en place un réseau d'automates sous DeviceNet pour piloter un système automatisé. Il faut donc développer un programme sur l'API pour qu'il puisse gérer les communications avec un module d'E/S distant. Ce programme doit être développé en langage ST (Structured Text). On m'a donc donner un programme qui "pourrait faire l'affaire". J'ai changé quelques trucs mais il me reste une erreur : UcmmReq.GEN_ERR = 31 .
Je ne comprends pas pourquoi.
Voici le programme en question :
(*-------------------------- Duplicate MAC-ID Check------------------------------------------------------------------------------------------------------------*)
IF boDupMacOK=FALSE THEN
CheckDuplicateMac();
IF CheckDuplicateMac.STATE=0 THEN (*vérifie que l'état de la duplication de l'adresse MAC est faite*)
boDupMacOK:=TRUE;
END_IF
ELSE
CASE wState OF
0: GetLocalMacId(); (* chercher l'adresse local MAC*)
bNode:=GetLocalMacId.MAC_ID; (* Attribué à bNode l'adresse local MAC*)
wState:=10;
(* ----- Group2-only Device ----- *)
10: (* open expl- and poll-connection *)
MS_CON_SET_REQ(NODE:=2,CMD:=MS_ALLOC,GRP2_ONLY:=TRUE,ALLOC_CHOICE:=16#03,TOUT:=100,
ENABLE:= TRUE);
IF MS_CON_SET_REQ.CONFIRM = TRUE THEN
IF MS_CON_SET_REQ.GEN_ERR = 0 THEN
MS_CON_SET_REQ( ENABLE:= FALSE);
wState:=11;
ELSE
wState:=1010;
END_IF
END_IF
11: (* set exp. packet rate for explicit connection to 0 *)
wLen:=5;
abData[1]:=5; (*class*)
abData[2]:=1; (*Instance*)
abData[3]:=9; (*Attribute*)
abData[4]:=0; (* exp.packet rate *)
abData[5]:=0; (* exp.packet rate *)
ExplMsg(NODE:=2, SRV:=SET_ATTR, TOUT:=100,ENABLE:=TRUE,LEN:=wLen,DATA:=abData);
IF ExplMsg.CONFIRM = TRUE THEN
IF ExplMsg.GEN_ERR = 0 THEN
ExplMsg(ENABLE:=FALSE,LEN:=wLen,DATA:=abData);
wState:=12;
ELSE
wState:=1012;
END_IF
END_IF
12: (* set exp. packet rate for poll connection to 0 *)
wLen:=5;
abData[1]:=5; (*Class*)
abData[2]:=2; (*Instance*)
abData[3]:=9; (*Attribute*)
abData[4]:=0; (* exp.packet rate *)
abData[5]:=0; (* exp.packet rate *)
ExplMsg(NODE:=2, SRV:=SET_ATTR, TOUT:=100,ENABLE:=TRUE,LEN:=wLen,DATA:=abData);
IF ExplMsg.CONFIRM = TRUE THEN
IF ExplMsg.GEN_ERR = 0 THEN
ExplMsg(ENABLE:=FALSE,LEN:=wLen,DATA:=abData);
wState:=15;
ELSE
wState:=1012;
END_IF
END_IF
(*----- UCMM-Device ----- *)
15: (* open explicit connection to UCMM-Device *)
bNode:= 3;
UcmmReq(NODE:= bNode, CMD:= REQ_OPEN, MSG_GROUP:= MSG_GROUP3, TOUT:=100, ENABLE:= TRUE);
IF UcmmReq.CONFIRM =TRUE THEN
IF UcmmReq.GEN_ERR=0 THEN (*Si il n'y a aucune erreur de généré alors la connection peut être effectuer*)
(* Connection instance *)
bCnxInst:=UcmmReq.CNX_INST;
UcmmReq( ENABLE:= FALSE);
wState:=16;
ELSE
wState:=1015;
END_IF
END_IF
16: (* set exp. packet rate for explicit connection to 0 *)
wLen:=5;
abData[1]:=5; (*Class*)
abData[2]:=bCnxInst; (*Instance*)
abData[3]:=9; (*Attribute*)
abData[4]:=0; (* exp.packet rate *)
abData[5]:=0; (* exp.packet rate *)
ExplMsg(NODE:=bNode, SRV:=SET_ATTR, TOUT:=100,ENABLE:=TRUE,LEN:=wLen,DATA:=abData); (*message explicite envoié au noeud bNode; le serveur établis les attributs, *)
IF ExplMsg.CONFIRM = TRUE THEN
IF ExplMsg.GEN_ERR = 0 THEN
ExplMsg(ENABLE:=FALSE,LEN:=wLen,DATA:=abData);
wState:=17;
ELSE
wState:=1016;
END_IF
END_IF
17: (* open poll connection *)
MS_CON_SET_REQ(NODE:=bNode,CMD:=MS_ALLOC,GRP2_ONLY:=FALSE,ALLOC_CHOICE:=16#02,TOUT:=100,
ENABLE:= TRUE);
IF MS_CON_SET_REQ.CONFIRM = TRUE THEN
IF MS_CON_SET_REQ.GEN_ERR = 0 THEN
MS_CON_SET_REQ( ENABLE:= FALSE);
wState:=18;
ELSE
wState:=1017;
END_IF
END_IF
18:(* set exp. packet rate for Poll connection to 0 *)
wLen:=5;
abData[1]:=5; (*Class*)
abData[2]:=2; (*Instance*)
abData[3]:=9; (*Attribute*)
abData[4]:=0; (* exp.packet rate *)
abData[5]:=0; (* exp.packet rate *)
ExplMsg(NODE:=bNode, SRV:=SET_ATTR, TOUT:=100,ENABLE:=TRUE,LEN:=wLen,DATA:=abData);
IF ExplMsg.CONFIRM = TRUE THEN
IF ExplMsg.GEN_ERR = 0 THEN
ExplMsg(ENABLE:=FALSE,LEN:=wLen,DATA:=abData);
wState:=20;
ELSE
wState:=1018;
END_IF
END_IF
(* ----- Poll Group2only-Slave ----- *)
20: (* TX : 2 Byte; 2 Byte I/O (Master point of view) *)
wLen:=2;
pTxPoll2:= ADR(abData);
pTxPoll2^:=abTxPoll2;
wState:=21;
21: (* Poll Slave MAC ID 2 *)
MS_POLL_REQ(NODE:=2,RX_LEN:=1,TOUT:=100, ENABLE:= TRUE,LEN:=wLen,DATA:=abData);
IF MS_POLL_REQ.CONFIRM = TRUE THEN
IF MS_POLL_REQ.GEN_ERR = 0 THEN
(* copy RX Data *)
pRxPoll2 := ADR(abData);
abRxPoll2 := pRxPoll2^;
MS_POLL_REQ( ENABLE:= FALSE,LEN:=wLen,DATA:=abData);
wState:=30;
ELSE
wState:=1021;
END_IF
END_IF
27: (*Test*)
QB0:= abRXPoll2[1]; (* transfer IB0 of slave 1 to QB0 of Master*)
abTXPoll2[1]:=IB0; (* transfer IB0 of Master to QB0 of slave 1*)
abTXPoll2[2]:=IB1; (* transfer IB1 of Master to QB1 of slave 1*)
wState:=20;
END_CASE
END_IF
Pourriez-vous m'éclairer ?
Merci d'avance.
Je dois réaliser un projet qui doit mettre en place un réseau d'automates sous DeviceNet pour piloter un système automatisé. Il faut donc développer un programme sur l'API pour qu'il puisse gérer les communications avec un module d'E/S distant. Ce programme doit être développé en langage ST (Structured Text). On m'a donc donner un programme qui "pourrait faire l'affaire". J'ai changé quelques trucs mais il me reste une erreur : UcmmReq.GEN_ERR = 31 .
Je ne comprends pas pourquoi.
Voici le programme en question :
(*-------------------------- Duplicate MAC-ID Check------------------------------------------------------------------------------------------------------------*)
IF boDupMacOK=FALSE THEN
CheckDuplicateMac();
IF CheckDuplicateMac.STATE=0 THEN (*vérifie que l'état de la duplication de l'adresse MAC est faite*)
boDupMacOK:=TRUE;
END_IF
ELSE
CASE wState OF
0: GetLocalMacId(); (* chercher l'adresse local MAC*)
bNode:=GetLocalMacId.MAC_ID; (* Attribué à bNode l'adresse local MAC*)
wState:=10;
(* ----- Group2-only Device ----- *)
10: (* open expl- and poll-connection *)
MS_CON_SET_REQ(NODE:=2,CMD:=MS_ALLOC,GRP2_ONLY:=TRUE,ALLOC_CHOICE:=16#03,TOUT:=100,
ENABLE:= TRUE);
IF MS_CON_SET_REQ.CONFIRM = TRUE THEN
IF MS_CON_SET_REQ.GEN_ERR = 0 THEN
MS_CON_SET_REQ( ENABLE:= FALSE);
wState:=11;
ELSE
wState:=1010;
END_IF
END_IF
11: (* set exp. packet rate for explicit connection to 0 *)
wLen:=5;
abData[1]:=5; (*class*)
abData[2]:=1; (*Instance*)
abData[3]:=9; (*Attribute*)
abData[4]:=0; (* exp.packet rate *)
abData[5]:=0; (* exp.packet rate *)
ExplMsg(NODE:=2, SRV:=SET_ATTR, TOUT:=100,ENABLE:=TRUE,LEN:=wLen,DATA:=abData);
IF ExplMsg.CONFIRM = TRUE THEN
IF ExplMsg.GEN_ERR = 0 THEN
ExplMsg(ENABLE:=FALSE,LEN:=wLen,DATA:=abData);
wState:=12;
ELSE
wState:=1012;
END_IF
END_IF
12: (* set exp. packet rate for poll connection to 0 *)
wLen:=5;
abData[1]:=5; (*Class*)
abData[2]:=2; (*Instance*)
abData[3]:=9; (*Attribute*)
abData[4]:=0; (* exp.packet rate *)
abData[5]:=0; (* exp.packet rate *)
ExplMsg(NODE:=2, SRV:=SET_ATTR, TOUT:=100,ENABLE:=TRUE,LEN:=wLen,DATA:=abData);
IF ExplMsg.CONFIRM = TRUE THEN
IF ExplMsg.GEN_ERR = 0 THEN
ExplMsg(ENABLE:=FALSE,LEN:=wLen,DATA:=abData);
wState:=15;
ELSE
wState:=1012;
END_IF
END_IF
(*----- UCMM-Device ----- *)
15: (* open explicit connection to UCMM-Device *)
bNode:= 3;
UcmmReq(NODE:= bNode, CMD:= REQ_OPEN, MSG_GROUP:= MSG_GROUP3, TOUT:=100, ENABLE:= TRUE);
IF UcmmReq.CONFIRM =TRUE THEN
IF UcmmReq.GEN_ERR=0 THEN (*Si il n'y a aucune erreur de généré alors la connection peut être effectuer*)
(* Connection instance *)
bCnxInst:=UcmmReq.CNX_INST;
UcmmReq( ENABLE:= FALSE);
wState:=16;
ELSE
wState:=1015;
END_IF
END_IF
16: (* set exp. packet rate for explicit connection to 0 *)
wLen:=5;
abData[1]:=5; (*Class*)
abData[2]:=bCnxInst; (*Instance*)
abData[3]:=9; (*Attribute*)
abData[4]:=0; (* exp.packet rate *)
abData[5]:=0; (* exp.packet rate *)
ExplMsg(NODE:=bNode, SRV:=SET_ATTR, TOUT:=100,ENABLE:=TRUE,LEN:=wLen,DATA:=abData); (*message explicite envoié au noeud bNode; le serveur établis les attributs, *)
IF ExplMsg.CONFIRM = TRUE THEN
IF ExplMsg.GEN_ERR = 0 THEN
ExplMsg(ENABLE:=FALSE,LEN:=wLen,DATA:=abData);
wState:=17;
ELSE
wState:=1016;
END_IF
END_IF
17: (* open poll connection *)
MS_CON_SET_REQ(NODE:=bNode,CMD:=MS_ALLOC,GRP2_ONLY:=FALSE,ALLOC_CHOICE:=16#02,TOUT:=100,
ENABLE:= TRUE);
IF MS_CON_SET_REQ.CONFIRM = TRUE THEN
IF MS_CON_SET_REQ.GEN_ERR = 0 THEN
MS_CON_SET_REQ( ENABLE:= FALSE);
wState:=18;
ELSE
wState:=1017;
END_IF
END_IF
18:(* set exp. packet rate for Poll connection to 0 *)
wLen:=5;
abData[1]:=5; (*Class*)
abData[2]:=2; (*Instance*)
abData[3]:=9; (*Attribute*)
abData[4]:=0; (* exp.packet rate *)
abData[5]:=0; (* exp.packet rate *)
ExplMsg(NODE:=bNode, SRV:=SET_ATTR, TOUT:=100,ENABLE:=TRUE,LEN:=wLen,DATA:=abData);
IF ExplMsg.CONFIRM = TRUE THEN
IF ExplMsg.GEN_ERR = 0 THEN
ExplMsg(ENABLE:=FALSE,LEN:=wLen,DATA:=abData);
wState:=20;
ELSE
wState:=1018;
END_IF
END_IF
(* ----- Poll Group2only-Slave ----- *)
20: (* TX : 2 Byte; 2 Byte I/O (Master point of view) *)
wLen:=2;
pTxPoll2:= ADR(abData);
pTxPoll2^:=abTxPoll2;
wState:=21;
21: (* Poll Slave MAC ID 2 *)
MS_POLL_REQ(NODE:=2,RX_LEN:=1,TOUT:=100, ENABLE:= TRUE,LEN:=wLen,DATA:=abData);
IF MS_POLL_REQ.CONFIRM = TRUE THEN
IF MS_POLL_REQ.GEN_ERR = 0 THEN
(* copy RX Data *)
pRxPoll2 := ADR(abData);
abRxPoll2 := pRxPoll2^;
MS_POLL_REQ( ENABLE:= FALSE,LEN:=wLen,DATA:=abData);
wState:=30;
ELSE
wState:=1021;
END_IF
END_IF
27: (*Test*)
QB0:= abRXPoll2[1]; (* transfer IB0 of slave 1 to QB0 of Master*)
abTXPoll2[1]:=IB0; (* transfer IB0 of Master to QB0 of slave 1*)
abTXPoll2[2]:=IB1; (* transfer IB1 of Master to QB1 of slave 1*)
wState:=20;
END_CASE
END_IF
Pourriez-vous m'éclairer ?
Merci d'avance.
A voir également:
- Réseau sous devicenet pour système automatisé
- Restauration systeme windows 10 - Guide
- Opérateur de réseau mobile - Guide
- Cable reseau player freebox - Forum Freebox
- Vous avez besoin d'une autorisation de la part de système pour modifier ce dossier - Guide
- Entrer les informations d'identification reseau - Guide