Problème avec code GEARS

Questions de programmation / Offset FSUIPC et IOCP

Re: Problème avec code GEARS

Messagede ijack30 » Ven 11 Nov 2011 01:36

C'est vrai qu'en y pensant et en voyant ton code tout fait, c'est simple. Mais faut y penser.
Par contre, j'avoue que je ne comprends pas la partie
C0 = &GEAR_N_POS > 0
C1 = &GEAR_N_POS < 16383
IF C0 AND C1

La suite, OK, mais ca sort d'ou C0 et C1. Une variable non définie ?

En suivant la logique, j'ai fait pour le train droit et gauche, mais lorsque j'arrive a
C0 = &GEAR_R_POS > 0
C1 = &GEAR_R_POS < 16383
IF C0 AND C1
Si je laisse cela, SIOC plante correctement, et je dois faire une fin de tâche.
Si je mets C2 AND C3, il comprend pas et me fait une erreur sur C2....
Donc je n'ai pas remis cette partie.
Ca marche, mais la vérification pour le transit ne se fait QUE sur la position du train avant.....

En j'ai beau virer tout a l'envers, mettre des IF, des SUBROUTINE, j'arrive pas a faire eteindre les LEDS si mon bus est a 17 Volts ou moins !!! murrouge murrouge
La, il me reste plus beaucoup de cheveux, et encore un peu d'ongle. Mais pas pour longtemps. peurefrayé

J'ai tout repris. Y compris le nom de mes variables, un peu trop long a mon gout, et ca donne donc cela pour l'instant. Ca fonctionne, mais sans le MAINBUS, comme je te le dit

Var 0053, name GEAR, Link FSUIPC_INOUT, Offset $0BE8, Length 4 // Control train d'atterrissage
Var 0054, name GEAR_SW, Link IOCARD_SW, Input 26 // inter manette train
{
&GEAR = &GEAR_SW * 16383
}
Var 0055, name GEAR_N_POS, Link FSUIPC_IN, Offset $0BEC, Length 4 // Position du train avant
{
&GEAR_N_LED = &GEAR_N_POS - 16382

C0 = &GEAR_N_POS > 0
C1 = &GEAR_N_POS < 16383
IF C0 AND C1
{
&GEAR_T_LED = 1
}
ELSE
{
&GEAR_T_LED = 0
}
}
Var 0056, name GEAR_L_POS, Link FSUIPC_IN, Offset $0BF4, Length 4 // Position du train gauche
{
&GEAR_L_LED = &GEAR_L_POS - 16382
}
Var 0057, name GEAR_R_POS, Link FSUIPC_IN, Offset $0BF0, Length 4 // Position du train droit
{
&GEAR_R_LED = &GEAR_R_POS - 16382
}

Var 0062, name GEAR_T_LED, Link IOCARD_OUT, Output 11 // LED train transit
Var 0063, name GEAR_N_LED, Link IOCARD_OUT, Output 12 // LED train avant
Var 0064, name GEAR_R_LED, Link IOCARD_OUT, Output 13 // LED train droit
Var 0065, name GEAR_L_LED, Link IOCARD_OUT, Output 14 // LED train gauche
ijack30
 
Messages: 78
Inscription: 2/02/11
Localisation: Québec

Re: Problème avec code GEARS

Messagede chtipilot » Ven 11 Nov 2011 04:55

C0 = &GEAR_N_POS > 0
C1 = &GEAR_N_POS < 16383
IF C0 AND C1


C0 et C1 sont des variables locales SIOC (voir doc). Elles prennent la valeur vrai ou faut donc on peut aussi lire :
- si &GEAR_N_POS > 0 alors C0=vrai
- si &GEAR_N_POS < 16383 C1=vrai
- si C0 et C1 sont vrai en même temps alors....
Cette méthode simple permet de vérifier qu'une valeur est COMPRISE entre telle et telle valeur (>0 et <16383) cligneoeil
Chtipilot Image

Image
Avatar de l’utilisateur
chtipilot
 
Messages: 371
Inscription: 2/04/11
Localisation: Lille (Nord)

Re: Problème avec code GEARS

Messagede stevelep » Ven 11 Nov 2011 14:02

Si le SIOC plante c'est que tu as du oublier une parenthèse ...

Tu n'as qu'une led pour le TRANS.
Si les trains sortent à des vitesses différente, il faut que la led TRANS reste allumée
jusqu'à ce que le dernier des trains soit verrouillé.

Il y a donc 3 conditions -> donc obligation de réunir le code dans une subroutine ...

BOB

Voila le code (je l'ai pas testé ...)

J'ai mis des CALL à chaque variable pour tout centraliser dans la subroutine.
J'ai mis tous les conditions à tester
J'ai utiliser des additions logique avec les C0 C1 C2 et les AND
C'est un peu complexe mais essaye de comprendre.


Var 0053, name GEAR, Link FSUIPC_INOUT, Offset $0BE8, Length 4 // Control train d'atterrissage
{
CALL &gearsys
}
Var 0054, name GEAR_SW, Link IOCARD_SW, Input 26 // inter manette train
{
CALL &gearsys
}
Var 0055, name GEAR_N_POS, Link FSUIPC_IN, Offset $0BEC, Length 4 // Position du train avant
{
CALL &gearsys
}
Var 0056, name GEAR_L_POS, Link FSUIPC_IN, Offset $0BF4, Length 4 // Position du train gauche
{
CALL &gearsys
}
Var 0057, name GEAR_R_POS, Link FSUIPC_IN, Offset $0BF0, Length 4 // Position du train droit
{
CALL &gearsys
}

Var 0060, name gearsys Link SUBRUTINE
{

&GEAR = &GEAR_SW * 16383

&GEAR_N_LED = &GEAR_N_POS - 16382
&GEAR_L_LED = &GEAR_L_POS - 16382
&GEAR_R_LED = &GEAR_R_POS - 16382

C0 = &GEAR_N_POS > 0
C1 = &GEAR_N_POS < 16383
C2 = C0 AND C1
C0 = &GEAR_L_POS > 0
C1 = &GEAR_L_POS < 16383
C1 = C0 AND C1
C2 = C2 AND C1
C0 = &GEAR_R_POS > 0
C1 = &GEAR_R_POS < 16383
C1 = C0 AND C1
C2 = C2 AND C1

IF C2
{
&GEAR_T_LED = 1
}
ELSE
{
&GEAR_T_LED = 0
}
}

Var 0062, name GEAR_T_LED, Link IOCARD_OUT, Output 11 // LED train transit
Var 0063, name GEAR_N_LED, Link IOCARD_OUT, Output 12 // LED train avant
Var 0064, name GEAR_R_LED, Link IOCARD_OUT, Output 13 // LED train droit
Var 0065, name GEAR_L_LED, Link IOCARD_OUT, Output 14 // LED train gauche
Avatar de l’utilisateur
stevelep
Administrateur du site
 
Messages: 2075
Inscription: 27/03/09
Localisation: LSGN Neuchâtel, Suisse

Re: Problème avec code GEARS

Messagede ijack30 » Ven 11 Nov 2011 14:36

Merci infiniment BOB, je vais tester.
J'avoue ne pas tout comprendre, surtout avec la partie C0- C1- C2.
Je relis le site de Claude Keiffer, il parle de C comme étant une variable Booléene..Soit, mais là j'avoue que ta partie de code me dépasse, surtout
C1 = C0 AND C1
C2 = C2 AND C1
Une variable égale a elle même, mais je vais plancher sur la question, car ca m'intersse de connaître.

je vais donc voir ça ce WE. Mais (excuse d'insister), je ne vois aucune condition pour les LEDs, en fonction de la valeur de ma variable MAINBUS, qui passe de 1 à 0 en fonction du voltage.
C'est cette partie que je ne suis pas capable de rendre active.

Jusqu'ici, bien que mon code n'était pas aussi simple que le tien, le train et ses lumières fonctionnaient très bien, mais en placant (sous routine ou non) la condition du voltage, les LEDs restaient éteintes,( si le BUS était < 17V) mais uniquement au lancement de SIOC, ensuite, elles ne changeaient plus d'état..
Alors comment je peux faire pour que cette condition soit fonctionnelle ?

Encore mille fois merci.
ijack30
 
Messages: 78
Inscription: 2/02/11
Localisation: Québec

Re: Problème avec code GEARS

Messagede Kelt760 » Dim 20 Nov 2011 20:12

Salut
Les variables C0, C1 et C2 sont booléennes, ça veut dire qu'elles contiennent "vrai" ou "faux".

On peut donc écrire par exemple
C0 = &var1 = &var2
Cela veut dire que C0 contiendra vrai si &var& est égale à &var2, et faux sinon.

On peut les manipuler les varaibles booléennes avec les opérateurs booléens AND, OR, et NOT.

Pour le code avec les conditions de courant, je te conseille d'aller lire la page programmation de notre siite :

http://www.simubaron.fr/programmation_sioc.htm

Tu y trouveras des infos utilles.
Pierre
--------------
http://www.simubaron.fr le site des 2 Pierre. Venez nous voir !
Avatar de l’utilisateur
Kelt760
 
Messages: 204
Inscription: 27/03/09

Précédente

Retourner vers Programmation Sioc





Qui est en ligne

Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 31 invités