Action en C dans WinCC

Partie du forum pour tout ce qui concerne la supervision industrielle. Forum, conseil, astuce et entraide sur les logiciels de supervision tels que PC Vue, Vijeo designer, WinCC, win cc, monitor pro, so machine, Citect, Intouch .
Répondre
Avatar du membre
Damall
Codeur fou
Codeur fou
Messages : 233
Enregistré le : 13 janv. 2016, 09:22
Localisation : Luxembourg

Action en C dans WinCC

Message par Damall »

Bonjour,

j'ai une photocellule à animer dans WinCC V6.0, qui dans l'automate à l'adresse DB5.DBX665.6

Dans WinCC, pour limiter le nombre de variables, c'est déclaré en mot : AG1DB5DBW664

Pour garder le standard de ceux qui ont développer la supervision j'ai fait un copier/coller d'une photocellule qui fonctionne et j'ai changer le script en C :

#include "apdefap.h"
long _main(char* lpszPictureName, char* lpszObjectName, char* lpszPropertyName)
{
// WINCC:TAGNAME_SECTION_START
// syntax: #define TagNameInAction "DMTagName"
// next TagID : 1
#define Tag_Lichtschranke "AG1DB5DBW664"
// WINCC:TAGNAME_SECTION_END

// WINCC:PICNAME_SECTION_START
// syntax: #define PicNameInAction "PictureName"
// next PicID : 1
// WINCC:PICNAME_SECTION_END

return(L_Status(GetTagWord(Tag_Lichtschranke),14)); // Bit14 et 15

}

ça ne fonctionne pas !

J'ai fait l'essai en utilisant variable dynamique en la variable AG1DB5DBW664 Bit 6 et ça fonctionne.

Je ne comprend pas! j'ai essayé dans changer 14 par 6 mais rien ne change. :o :o :o
Modifié en dernier par Damall le 28 janv. 2016, 09:49, modifié 2 fois.
Avatar du membre
itasoft
Mi homme - Mi automate
Mi homme - Mi automate
Messages : 7805
Enregistré le : 20 oct. 2015, 10:15
Localisation : Lyon
Contact :

Re: Action en C dans WinCC

Message par itasoft »

slts,
Si c’est DB5.DBW665.6 pourquoi c’est déclarée en AG1DB5DBW664 au lieu de AG1DB5DBW665 ?
Automaticien privé (de tout)
itasoft@free.fr
Avatar du membre
Damall
Codeur fou
Codeur fou
Messages : 233
Enregistré le : 13 janv. 2016, 09:22
Localisation : Luxembourg

Re: Action en C dans WinCC

Message par Damall »

Salut,

c'est déclarer en tant que WORD.

C'est pour que dans WinCC on n'utilise qu'un seul TAG, plutôt que de déclarer 16 BOOL.

Pour l'achat des licences WinCC mois il y a de variables, mois c'est chers.

@+
philou77
Mi homme - Mi automate
Mi homme - Mi automate
Messages : 2142
Enregistré le : 21 oct. 2015, 10:00
Localisation : Ile de France

Re: Action en C dans WinCC

Message par philou77 »

Salut !
+1 avec itasoft.

un word c'est 16 bits , pas 32 !

Donc ou la déclaration est pas bonne, ou bien il faut aller voir le 21ème bit de ton mot !
attention avec l'ordre poids faible et poids fort pour un mot de 32 bit !
Modifié en dernier par philou77 le 28 janv. 2016, 13:44, modifié 1 fois.
Si vous avez compris tout ce que je viens d'écrire, c'est que j'ai dû faire une erreur quelque part ! :D
Avatar du membre
Damall
Codeur fou
Codeur fou
Messages : 233
Enregistré le : 13 janv. 2016, 09:22
Localisation : Luxembourg

Re: Action en C dans WinCC

Message par Damall »

Erreur de ma part,

adresse DB5.DBX665.6
steph68
Codeur fou
Codeur fou
Messages : 275
Enregistré le : 21 oct. 2015, 08:23

Re: Action en C dans WinCC

Message par steph68 »

hello
Si c’est DB5.DBW665.6 pourquoi c’est déclarée en AG1DB5DBW664 au lieu de AG1DB5DBW665
parce que ce n'est pas schneider.
l'adressage mémoire est différent

DBW664 = 2 octets = DBB664 et DBB665
DBD664 = 2 mots = DBW664 et DBW666



et sans la fonction "L_Status", arrives-tu à avoir la valeur du mot en entier (les 16 bits) ?
quelle est la fonction de "L_Status" (c'est quoi la signature / le prototype de cette fonction) ?

ça sent une valeur retour de type "char" qui est convertie vers un "long" (donc on ne garde que les 8 bits de poids faible)...

@+
Avatar du membre
itasoft
Mi homme - Mi automate
Mi homme - Mi automate
Messages : 7805
Enregistré le : 20 oct. 2015, 10:15
Localisation : Lyon
Contact :

Re: Action en C dans WinCC

Message par itasoft »

Slts,
Je récapitule, les cellules sont dans des bits de mots, sur le WinCC on déclare des mots pour économiser la mémoire, donc si je comprends bien la fonction en C c’est juste pour faire un masque afin d’extraite le bit ?
Il faut avoir tué son père et sa mère pour faire du Siemens,
LOL
Automaticien privé (de tout)
itasoft@free.fr
steph68
Codeur fou
Codeur fou
Messages : 275
Enregistré le : 21 oct. 2015, 08:23

Re: Action en C dans WinCC

Message par steph68 »

pas pour économiser de la mémoire mais pour économiser des tags (un mnémonique déclaré) donc de l'argent (en fonction de la quantité requise, le prix de la licence change - par tranches de tags)

utiliser des bits de mot c'est une bonne pratique, peu importe la cible (schneider ou siemens ...)
c'est juste qu'il ne déclare qu'un seul tag pour le mot entier et pas 16 tags (un pour chaque bits du mot)
donc si je comprends bien la fonction en C c’est juste pour faire un masque afin d’extraite le bit
j'en sais rien, je suppose comme toi (c'est du copier-coller d'un autre script) et c'est là qu'est surement l'erreur...
j'ai pas encore de boule de crystal (mais ça va venir :mrgreen: )

la définition est dans le fichier "apdefap.h", surement une fonction inline (ou au pire une macro)

@+
kosbor
Aguerri de l'automation
Aguerri de l'automation
Messages : 83
Enregistré le : 23 oct. 2015, 18:29

Re: Action en C dans WinCC

Message par kosbor »

C'est quand meme pas sorcier wincc c'est standard à 100%
pour ce probleme il y a 10 facons differentes de resoudre le probleme si on veut faire du c ok , mais c'est la facon la plus compliqué,
alors qu'il existe des dialogues dynamique super simple avec choix de bit masqué :roll: :o ......

on peut ajouter dans la vue où on veut dynamiser l'objet, une fenetre d'application dispo dans le designer (gsc diag un genre de console debug) et faire un printf
L_Status est une fonction de projet crée maison, elle est dispo dans Cscript treenode "fonctions de projet"

Code : Tout sélectionner

#include "apdefap.h"
long _main(char* lpszPictureName, char* lpszObjectName, char* lpszPropertyName)
{
#define Tag_Lichtschranke "AG1DB5DBW664"

printf("Tag_Lichtschranke---> %d  ;    L_Status(GetTagWord(Tag_Lichtschranke),14)---> %d         \r\n", GetTagWord(Tag_Lichtschranke) ,L_Status(GetTagWord(Tag_Lichtschranke),14));
return(L_Status(GetTagWord(Tag_Lichtschranke),14)); // Bit14 et 15

}



ps: point trés important pour les operations sur masque maison toujours surveiller qu'on est pas >au bit 31 sinon overflow
et pourquoi ne pas utiliser le vbs c'est quand meme beaucoup plus simple et on garde surtout les references croisées contrairement au c
Avatar du membre
Damall
Codeur fou
Codeur fou
Messages : 233
Enregistré le : 13 janv. 2016, 09:22
Localisation : Luxembourg

Re: Action en C dans WinCC

Message par Damall »

itasoft a écrit :Slts,

Il faut avoir tué son père et sa mère pour faire du Siemens,

LOL
Si tu savais tout ce que les allemand sont capable de faire pour rendre un programme le plus compliquer possible. Je me demande s'ils ne le font pas exprès pour qu'on les rappel pour faire des modifs.

Pour en revenir à mon problème, je crois que je vais pas chercher plus longtemps, je vais passer en dialogue dynamique.
Répondre