Accueil > Forum > contrôleurs SlimLine e Netsyst (LogicLab) > Réinitialiser le système du programme utilisateur
- Ce sujet a 14 réponses, 2 participants et a été mis à jour pour la dernière fois 1 année, 2 mois da Sergio Bertana.
-
auteurPost
-
Septembre 6, 2013 à 6: 49 am #35405Maurizio ContiPartecipante
Je voudrais écrire une fonction de surveillance qui réinitialise l'automate pour moi en cas de blocage (en supposant clairement que le système laisse la fonction de surveillance opérationnelle).
Il est possible de le réinitialiser Slimline du code ST?
Septembre 6, 2013 à 6: 53 am #37754Sergio BertanaAdministrateur du forumCe billet me donne l'occasion d'expliquer en détail tous les mécanismes d'autocontrôle du fonctionnement géré par le système d'exploitation et par le matériel du SlimLine.
Les systèmes SlimLine ils disposent d'un double circuit de surveillance matériel, l'un basé sur un circuit spécialement préparé et l'autre géré en interne par le processeur ARM. Si le programme n'actualise pas cycliquement ces deux chiens de garde, le système est réinitialisé en mode matériel, forçant un redémarrage. Toute cette gestion est faite spécifiquement pour s'assurer qu'aucun blocage du système ne le bloque, la norme CEI prévoit en effet qu'en cas de blocages sur le fonctionnement du programme le système redémarre. Il existe également d'autres contrôles gérés en mode matériel par le processeur ARM qui provoquent le redémarrage du système:
Le programme accède à une zone mémoire incorrecte.
Le processeur trouve une instruction incorrecte dans le programme.
Les anomalies sont activées / désactivées.
La mémoire du tas du processeur est corrompue.Il peut arriver que dans le programme transféré au système, il y ait une erreur grave qui provoque le redémarrage du système.Dans ce cas, je me trouverais dans une impasse, le redémarrage du système réexécute le programme en redémarrant une erreur et cela indéfiniment. Alors voici et si SlimLine reconnaît qu'il était connecté à un PC avec l'environnement de développement LogicLab, en cas d'erreur il ne redémarre pas le programme mais passe en mode programmation.
Septembre 6, 2013 à 7: 16 am #37755Sergio BertanaAdministrateur du forumJ'ajoute la réponse à votre demande, comme dit dans le post précédent, SlimLine il est redémarré si le programme ne rafraîchit pas cycliquement le circuit de surveillance, donc si dans votre programme vous êtes coincé dans une boucle infinie, vous faites redémarrer le système. Par exemple, il est possible d'écrire un programme du type:
PENDANT (Di00CPU) DO END_WHILE;
Comme on peut le constater en activant la variable Di00CPU (définie comme% IX255.0, entrée 0 du module de processeur), le programme s’arrête en boucle infinie, ce qui provoque le redémarrage du système. SlimLine pour l'intervention du circuit de surveillance.
Attenzione! Eseguendo questo tipo di tests od in generale se il programma và sempre in errore può essere impossibile riconnettere il sistema a LogicLab, per risolvere il problema occorre eseguire un catch del sistema e la successiva cancellazione del programma (Vedi post).
Septembre 9, 2013 à 4: pm 03 #37761Maurizio ContiPartecipanteJ'ai essayé de régler la réinitialisation en faisant correspondre `` correctement '' le programme avec l'instruction WHILE (TRUE) DO END_WHILE;
L'effet que j'obtiens est de perdre le contrôle par LogicLab (et je pense également à la fonctionnalité de l'API) avec la signalisation ERROR en rouge dans la barre d'état. À partir de là, il n'est plus possible de se connecter à l'automate avec LogicLab. Pour ce faire, je dois éteindre et rallumer l'automate, puis tout recommence à fonctionner normalement.Septembre 10, 2013 à 1: pm 04 #37762Sergio BertanaAdministrateur du forumC'est ce que vous vouliez réaliser. Si vous lisez bien mon article, en fermant le programme en boucle infinie, le système se réinitialise puis recommence depuis le début (exactement comme s'il était éteint et rallumé).
Votre question était de redémarrer sous certaines conditions, donc ici la boucle infinie ne doit être activée que sur les conditions dans lesquelles vous voulez redémarrer.
Septembre 11, 2013 à 10: 10 am #37767Maurizio ContiPartecipanteJe confirme ce que vous dites, le programme redémarre mais la capacité de le contrôler est perdue SlimLine par LogicLab. Même en désactivant la connexion puis en la réactivant, ou en quittant et en entrant à nouveau LL, il n'est plus possible de se connecter au SlimLine. Le seul moyen que j'ai trouvé est de l'éteindre et de le rallumer SlimLine, alors aussi LL fonctionne.
Septembre 11, 2013 à 10: 24 am #37768Sergio BertanaAdministrateur du forumMais quel type de connexion utilisez-vous avec elle? SlimLine ?
Connexion en série, devrait reprendre sans aucun problème.
Connexion TCP / IP sur un réseau Ethernet, en redémarrant la connexion est perdue, il doit être désactivé, puis réactivé.
Connexion TCP / IP sur USB, vous devez déconnecter et reconnecter le câble USB et / ou éteindre et rallumer l'appareil.Septembre 11, 2013 à 4: pm 38 #37769Maurizio ContiPartecipanteJ'utilise la connexion TCP / IP sur USB; en fait, si je déconnecte et reconnecte le câble USB après la «réinitialisation», tout se remet en marche. C'est certainement mieux que d'éteindre / de rallumer l'API.
Septembre 11, 2013 à 4: pm 48 #37770Sergio BertanaAdministrateur du forumLe problème est que le pilote Windows RNDIS au redémarrage ne remarque pas la déconnexion du système et maintient donc la connexion USB active, il SlimLine au lieu de cela, après avoir réinitialisé, il a interrompu le point final et ne communique donc plus.
Débrancher le câble ou l'éteindre et le rallumer SlimLine il n'y a pas de signal électrique sur l'USB du PC qui réinitialise toutes les connexions actives.
Mars 12, 2014 à 1: pm 53 #38128Maurizio ContiPartecipanteLe module OEM PCB131A020 récemment acheté a un comportement différent du MPS050A020 suite à une réinitialisation forcée: en fait, alors que ce dernier redémarre régulièrement, le premier reste stationnaire (je dois partir de LogicLab). Dois-je configurer quelque chose quelque part?
Mars 12, 2014 à 2: pm 47 #38129Sergio BertanaAdministrateur du forumIl Module OEM c'est exactement le même circuit que vous trouvez dans le module complet MPS050A020, il n'y a donc aucune différence de circuit. Vous pouvez vérifier si le firmware installé dans les deux modules est de la même version SFW184 *** 0 sinon vous pouvez effectuer une mise à jour (Voir noteMais vous me dites que vous devez partir de LogicLab, je me demandais que ce n'est pas que lorsque vous forcez la réinitialisation, vous ayez connecté LogicLab, car dans ce cas, le système se réinitialise, mais le programme utilisateur ne se lance pas.
Octobre 11, 2019 à 2: pm 55 #50127RuboxPartecipanteEn lisant sur le forum je tombe sur des articles qui m'intéressent, même s'ils sont "vieux" par des années et j'ai des questions après des questions.
Il est intéressant de pouvoir redémarrer l'automate en le plaçant dans une boucle infinie. Existe-t-il un moyen de savoir que le système a redémarré en raison de quelque chose d'anormal? Comme un indicateur booléen qui me dit un ou plusieurs redémarrages pour le chien de garde?
Octobre 11, 2019 à 3: pm 03 #50194Sergio BertanaAdministrateur du forumActuellement, il n'y a pas de variable qui indique le type de démarrage du système, mais je trouve l'idée intéressante et voyons si nous pouvons également inclure cette possibilité dans une future version du système d'exploitation.
Si vous voulez "comprendre" que le système a redémarré pour un chien de garde créé par vous dans le programme (boucle infinie), il existe une solution de contournement. Avant de vous arrêter dans la boucle, écrivez une certaine valeur dans un emplacement de mémoire de sauvegarde (exemple en supposant un UDINT 16 # 12345678). Attendez ensuite quelques secondes pour vous assurer que les données ont bien été sauvegardées, vous pouvez également synchroniser en testant la variable SysBackupEnd, qui doit être activé au moins 2 fois.
Maintenant, au démarrage, vous vérifiez la valeur de la variable et si c'est la valeur que vous avez définie, le système a redémarré à cause de votre commande. Bien sûr, juste après la vérification, vous devez définir la valeur de la variable sur 0.
Février 10, 2023 à 9: 44 am #70065Alessandro CampodonicoPartecipanteJe suis tombé sur ce vieux fil, car je serais intéressé à redémarrer le SlimLine du programme utilisateur.
Je me demandais s'il y avait eu un "système alternatif pour redémarrer le lo" mis en place au fil des ans slimline du programme, ou si la solution doit toujours être maintenue valide
TANT QUE (Di00CPU) FAIRE END_WHILE
Février 13, 2023 à 11: 06 am #70095Sergio BertanaAdministrateur du forumPour redémarrer le système, vous pouvez utiliser la fonction SysOSIDValue passant comme OSID la définition OSID_PLC_COMMAND avec les valeurs :
- reboot: redémarre le système.
- restart: redémarre uniquement le programme automate, toutes les variables sont réinitialisées.
Voici un exemple de programme (Doit être exécuté dans la tâche Back).
PROGRAM RebootRestart VAR i : UDINT; (* Auxiliary variable *) Reboot : BOOL; (* Reboot command *) Restart : BOOL; (* Restart command *) END_VAR IF (Reboot) THEN i:=SysOSIDValue(TRUE, OSID_PLC_COMMAND, ADR('reboot')); END_IF; IF (Restart) THEN i:=SysOSIDValue(TRUE, OSID_PLC_COMMAND, ADR('restart')); END_IF;
-
auteurPost
- Vous devez être connecté pour répondre à ce sujet.