FORUM DE DISCUSSION SUR LE LANGAGE PANORAMIC
Vous souhaitez réagir à ce message ? Créez un compte en quelques clics ou connectez-vous pour continuer.
FORUM DE DISCUSSION SUR LE LANGAGE PANORAMIC

Développement d'applications avec le langage Panoramic
 
AccueilAccueil  RechercherRechercher  Dernières imagesDernières images  S'enregistrerS'enregistrer  MembresMembres  Connexion  
Derniers sujets
» Logiciel de planétarium.
ELECTRONIQUE : Une réalisation pilotée par PANORAMIC Emptypar Pedro Sam 23 Nov 2024 - 15:50

» Un autre pense-bête...
ELECTRONIQUE : Une réalisation pilotée par PANORAMIC Emptypar Froggy One Jeu 21 Nov 2024 - 15:54

» Récupération du contenu d'une page html.
ELECTRONIQUE : Une réalisation pilotée par PANORAMIC Emptypar Pedro Sam 16 Nov 2024 - 14:04

» Décompilation
ELECTRONIQUE : Une réalisation pilotée par PANORAMIC Emptypar JL35 Mar 12 Nov 2024 - 19:57

» Un album photos comme du temps des grands-mères
ELECTRONIQUE : Une réalisation pilotée par PANORAMIC Emptypar jjn4 Mar 12 Nov 2024 - 17:23

» traitement d'une feuille excel
ELECTRONIQUE : Une réalisation pilotée par PANORAMIC Emptypar jjn4 Jeu 7 Nov 2024 - 3:52

» Aide-mémoire mensuel
ELECTRONIQUE : Une réalisation pilotée par PANORAMIC Emptypar jjn4 Lun 4 Nov 2024 - 18:56

» Des incomprèhension avec Timer
ELECTRONIQUE : Une réalisation pilotée par PANORAMIC Emptypar Klaus Mer 30 Oct 2024 - 18:26

» KGF_dll - nouvelles versions
ELECTRONIQUE : Une réalisation pilotée par PANORAMIC Emptypar Klaus Mar 29 Oct 2024 - 17:58

» instructions panoramic
ELECTRONIQUE : Une réalisation pilotée par PANORAMIC Emptypar maelilou Lun 28 Oct 2024 - 19:51

» Figures fractales
ELECTRONIQUE : Une réalisation pilotée par PANORAMIC Emptypar Marc Ven 25 Oct 2024 - 12:18

» Panoramic et Scanette
ELECTRONIQUE : Une réalisation pilotée par PANORAMIC Emptypar Yannick Mer 25 Sep 2024 - 22:16

» Editeur d étiquette avec QR évolutif
ELECTRONIQUE : Une réalisation pilotée par PANORAMIC Emptypar JL35 Lun 23 Sep 2024 - 22:40

» BUG QR Code DelphiZXingQRCode
ELECTRONIQUE : Une réalisation pilotée par PANORAMIC Emptypar Yannick Dim 22 Sep 2024 - 11:40

» fichier.exe
ELECTRONIQUE : Une réalisation pilotée par PANORAMIC Emptypar leclode Ven 20 Sep 2024 - 19:02

Navigation
 Portail
 Index
 Membres
 Profil
 FAQ
 Rechercher
Rechercher
 
 

Résultats par :
 
Rechercher Recherche avancée
Novembre 2024
LunMarMerJeuVenSamDim
    123
45678910
11121314151617
18192021222324
252627282930 
CalendrierCalendrier
Le Deal du moment : -29%
DYSON V8 Origin – Aspirateur balai sans fil
Voir le deal
269.99 €

 

 ELECTRONIQUE : Une réalisation pilotée par PANORAMIC

Aller en bas 
2 participants
AuteurMessage
Marc

Marc


Nombre de messages : 2466
Age : 63
Localisation : TOURS (37)
Date d'inscription : 17/03/2014

ELECTRONIQUE : Une réalisation pilotée par PANORAMIC Empty
MessageSujet: ELECTRONIQUE : Une réalisation pilotée par PANORAMIC   ELECTRONIQUE : Une réalisation pilotée par PANORAMIC EmptyLun 16 Sep 2024 - 10:54

Bonjour à tous !

Je partage une réalisation (software + hardware) qui n’aura pas grand intérêt pour la communauté.

Il s’agit d’une aide au diagnostic et dépannage d’un automate existant.

Cette aide est composée :

1) D’une partie informatique dont voici  le code source :
Code:
' Programme de test des circuits CIBUS
' Marc - Juillet 2024
' Ecrit en langage Panoramic 0.9.29.i9

dim dossier$, info$, trame$, receptionTrame$, poidsFaible%, poidsFort%, octet1$, octet2$, octet3$, octet4$, poids%, i%
dim brasseurOnOFF%, broyeurOnOff%, pompeOnOff%, vanneRetourOnOff%, vanneDepart1OnOff%, vanneDepart2OnOff%, vanneDepart3OnOff%, vanneDepart4OnOff%, vanneDistribOnOff%
dim produit1_On_Off%, produit2_On_Off%, produit3_On_Off%, produit4_On_Off%, produit5_On_Off%, produit6_On_Off%, produit7_On_Off%, produit8_On_Off%, produit9_On_Off%
dim numVanneDistribution%, delai%, null%, quartet_H%, quartet_L%, poidsOnOff%
dim portCom%, parity%, sPortCom$, sBaudRate$, sParity$, sDataBit$, sStopBit$

label afficheFenetreSerial, fermerFenetreSerial, ouvrirLiaisonSerie
label choixPortCom, choixBaudrate, choixNbBits, choixParity, choixBitstop, enregistrer

data "Broyeur","Brasseur","Pompe","Vanne retour","Vanne départ 1","Vanne départ 2","Vanne départ 3","Vanne départ 4","Vanne distrib."
data "Produit 1","Produit 2","produit 3","Produit 4","Produit 5","Produit 6","Produit 7","Produit 8","Produit 9","Poids cuve"

dossier$ = dir_current$ + chr$(92)

creerInterfaceUtilisateur()

chargerFichierConfiguration()

end
' ------------------------------------------------------------------------------
sub boucleDeFonctionnement()

    while 1 = 1
        ' détection appui sur le bouton "Broyeur"
        if clicked(10) = 1
            appelBroyeur()
        end_if
        
        ' détection appui sur le bouton "Brasseur"
        if clicked(20) = 1
            appelBrasseur()
        end_if

       ' détection appui sur le bouton "Pompe"
        if clicked(30) = 1
            appelPompe()
        end_if

       ' détection appui sur le bouton "Vanne retour"
        if clicked(40) = 1
            appelVanneRetour()
        end_if
    
       ' détection appui sur le bouton "Vanne départ 1"
        if clicked(50) = 1
            appelVanneDepart1()
        end_if
    
       ' détection appui sur le bouton "Vanne départ 2"
        if clicked(60) = 1
            appelVanneDepart2()
        end_if
    
       ' détection appui sur le bouton "Vanne départ 3"
        if clicked(70) = 1
            appelVanneDepart3()
        end_if
    
       ' détection appui sur le bouton "Vanne départ 4"
        if clicked(80) = 1
            appelVanneDepart4()
        end_if

       ' détection appui sur le bouton "Vanne distribution"
        if clicked(90) = 1
            appelVanneDistribution()
        end_if

       ' détection appui sur le bouton "Produit 1"
        if clicked(100) = 1
            appelProduit1()
        end_if

       ' détection appui sur le bouton "Produit 2"
        if clicked(110) = 1
            appelProduit2()
        end_if

       ' détection appui sur le bouton "Produit 3"
        if clicked(120) = 1
            appelProduit3()
        end_if

       ' détection appui sur le bouton "Produit 4"
        if clicked(130) = 1
            appelProduit4()
        end_if

       ' détection appui sur le bouton "Produit 5"
        if clicked(140) = 1
            appelProduit5()
        end_if

       ' détection appui sur le bouton "Produit 6"
        if clicked(150) = 1
            appelProduit6()
        end_if

       ' détection appui sur le bouton "Produit 7"
        if clicked(160) = 1
            appelProduit7()
        end_if

       ' détection appui sur le bouton "Produit 8"
        if clicked(170) = 1
            appelProduit8()
        end_if

       ' détection appui sur le bouton "Produit 9"
        if clicked(180) = 1
            appelProduit9()
        end_if
        
        ' détection appui sur le bouton "Poids cuve"
        if clicked(190) = 1
            appelPoidsCuve()
        end_if

        ' détection appui sur le bouton "Stop"
        if clicked(4) = 1
            arretMoteurs()
        end_if
        
        ' détection appui sur le bouton "Vanne +"
        if mouse_left_down(6) = 1
            appelVannePlus()
        end_if

       ' détection appui sur le bouton "Vanne -"
        if mouse_left_down(7) = 1
            appelVanneMoins()
        end_if
        
        ' détection appui sur "On/Off" liaison série
        if clicked(297) = 1
            arretMoteurs()
            caption 298,"Non connecté"
            active 296
            on_click 297,ouvrirLiaisonSerie
            exit_while    
        end_if
        
        lecturePoids()
        
        ' pause pour ralentir la boucle de fonctionnement (ne pas affoler le processeur)
        pause 50

    end_while
end_sub
' ------------------------------------------------------------------------------
sub purgeClicked()
    dim_local i%, null%
    
    for i% = 10 to 190 step 10
        null% = clicked(i%)    
    next i%
    
    null% = clicked(297)
    null% = clicked(4)
    null% = clicked(6)
    null% = clicked(7)
end_sub
' ------------------------------------------------------------------------------
sub creerInterfaceUtilisateur()
    dim_local n%, x%, y%, nom$

    ' dimensions de la fenetre
    width 0,width(0) - width_client(0) + 1000
    height 0,height(0) - height_client(0) + 800
    
    ' titre de la fenêtre
    caption 0,"Test des circuits CIBUS"
    
    ' centrer la fenetre à l'écran
    top 0,(screen_y - height(0)) / 2
    left 0,(screen_x - width(0)) / 2

    ' créer PICTURE fond de fenêtre pour pouvoir dessiner dessus
    picture 1
    width 1,width_client(0)
    height 1,height_client(0)
    color 1,0,181,220
    
    ' créer menu déroulant
    main_menu 295
        sub_menu 296
        parent 296,295
        caption 296,"Port COM"
        on_click 296,afficheFenetreSerial

        sub_menu 297
        parent 297,295
        caption 297,"On/Off"
        hide 297
        
        sub_menu 298
        parent 298,295
        caption 298,"Non connecté"
    
    ' créer buffer image
    image 3
    
    ' créer bouton STOP
    picture 4
    width 4,58
    height 4,58
    top 4,600
    left 4,850
    color 4,0,181,220
    2d_target_is 4
    2d_pen_color 204,30,30
    2d_line 17,0,40,0
    2d_line 40,0,57,17
    2d_line 57,17,57,40
    2d_line 57,40,40,57
    2d_line 40,57,17,57
    2d_line 17,57,0,40
    2d_line 0,40,0,17
    2d_line 0,17,17,0
    2d_flood 29,29,204,30,30
    2d_pen_color 255,255,255
    2d_line 18,2,39,2
    2d_line 39,2,55,18
    2d_line 55,18,55,39
    2d_line 55,39,39,55
    2d_line 39,55,18,55
    2d_line 18,55,2,39
    2d_line 2,39,2,18
    2d_line 2,18,18,2
    2d_flood 29,29,255,255,255
    2d_pen_color 204,30,30
    2d_line 19,4,38,4
    2d_line 38,4,53,19
    2d_line 53,19,53,38
    2d_line 53,38,38,53
    2d_line 38,53,19,53
    2d_line 19,53,4,38
    2d_line 4,38,4,19
    2d_line 4,19,19,4
    2d_flood 29,29,204,30,30
    print_target_is 4
    font_color 4,255,255,255
    font_name 4,"Bahnschrift Light Condensed"
    font_size 4,16
    font_bold 4
    print_locate 10,16
    print "STOP"
    cursor_point 4
    hint 4,"Arrêt d'urgence"
    
    ' créer les boutons
    x% = 40
    y% = 40
    for n% = 10 to 190 step 10
        read nom$

        button_picture_target_is_object
        button_picture n%
        top n%,y%
        left n%,x%
        width n%,160
        height n%,45
        button_picture_target_is_picture
        width n%,156
        height n%,41
        cursor_point n%

        create_hide
        
        ' habillage bouton "OFF"
        picture n%+1
        width n%+1,156
        height n%+1,41
        color n%+1,240,240,240
        2d_target_is n%+1
        2d_fill_color 240,240,240
        font_name n%+1,"Arial"
        font_size n%+1,14
        print_target_is n%+1
        print_locate centrer%(nom$),9
        print nom$
        
        2d_image_copy 3,0,0,155,41
        2d_target_is n%
        2d_image_paste 3,0,0
        
        ' habillage bouton "ON"
        picture n%+2
        width n%+2,156
        height n%+2,41
        color n%+2,0,240,0
        2d_target_is n%+2
        2d_fill_color 0,240,0
        font_name n%+2,"Arial"
        font_size n%+2,14
        print_target_is n%+2
        print_locate centrer%(nom$),9
        print nom$        
        
        create_show
        
        y% = y% + 60
        if n% = 90
            x% = 800
            y% = 40
        end_if
    next n%
    
    ' positionner le bouton "Vannes distrib."
    top 90,590
    
    ' positionner le bouton "Poids cuve"
    left 190,40
    top 190,695

    ' créer afficheur 1er octet machines
    creerAfficheurBinaire(200,340,42)
    
    ' créer afficheur 2ème octet machines
    creerAfficheurBinaire(220,340,592)
    
    ' affichage n° de vanne distrib.
    panel 5
    top 5,590
    left 5,210
    width 5,45
    height 5,45
    caption 5,"0"
    font_name 5,"Arial"
    font_size 5,14
    
    ' flèche vers le haut
    picture 6
    width 6,30
    height 6,22
    top 6,590
    left 6,255
    color 6,240,240,240
    2d_target_is 6
    2d_pen_color 255,255,255
    2d_line 0,0,29,0
    2d_pen_color 160,160,160
    2d_line 29,0,29,22
    2d_pen_color 50,50,50
    2d_point 14,7
    2d_line 13,8,16,8
    2d_line 12,9,17,9
    2d_line 11,10,18,10
    2d_line 10,11,19,11
    2d_line 9,12,20,12
    2d_line 8,13,21,13
    2d_line 7,14,22,14
    2d_line 6,15,23,15
    cursor_point 6
    
    ' flèche vers le bas
    picture 7
    width 7,30
    height 7,22
    top 7,613
    left 7,255
    color 7,240,240,240
    2d_target_is 7
    2d_pen_color 160,160,160
    2d_line 29,0,29,22
    2d_line 0,21,30,21
    2d_pen_color 50,50,50
    2d_point 14,14
    2d_line 13,13,16,13
    2d_line 12,12,17,12
    2d_line 11,11,18,11
    2d_line 10,10,19,10
    2d_line 9,9,20,9
    2d_line 8,8,21,8
    2d_line 7,7,22,7
    2d_line 6,6,23,6
    cursor_point 7
    
    ' créer afficheur valeur décimale du poids  
    panel 270
    top 270,697
    left 270,210
    height 270,40
    width 270,90
    font_name 270,"Arial"
    font_size 270,14
    caption 270,"- - - - kg"
      
    ' créer afficheur binaire poids
    creerAfficheurBinaire(240,310,697)
    creerAfficheurBinaire(260,640,697)
    
    dessinerSerigraphie()

    creerFenetreSerial()

    open_dialog 290
    save_dialog 291
    serial 293
    
end_sub
' ------------------------------------------------------------------------------
sub creerAfficheurBinaire(n%,x%,y%)
    dim_local i%, x1%

    panel n%
    left n%,x%
    top n%,y%
    width n%,320
    height n%,40
    font_size n%,14
    command_target_is n%

    for i% = 1 to 8
        panel n% + i%
        width n% + i%,40
        height n% + i%,40
        left n% + i%,x1%
        x1% = x1% + 40
        caption n% + i%,8-i%
    next i%
    
    command_target_is 0
end_sub
' ------------------------------------------------------------------------------
sub dessinerSerigraphie()
    2d_target_is 1
    2d_pen_color 0,0,0
    2d_pen_width 1
    ' ligne Broyeur
    2d_line 200,62,340,62
    ' ligne Brasseur
    2d_line 200,122,400,122
    2d_line 400,122,400,82
    ' ligne Pompe
    2d_line 200,182,440,182
    2d_line 440,182,440,82
    ' ligne Vanne retour
    2d_line 200,242,480,242
    2d_line 480,242,480,82
    ' accolade Demultiplexer 4 to 16
    2d_line 509,83,521,95
    2d_line 521,95,571,95
    2d_line 571,95,579,103
    2d_line 579,103,587,95
    2d_line 587,95,638,95
    2d_line 638,95,651,82
    
    2d_fill_color 0,181,220
    print_target_is 1
    font_name 1,"Arial"
    font_size 1,12
    print_locate 533,112
    print "Demultiplexer"
    print_locate 556,132
    print "4 to 16"
    print_locate 442,19
    print "Octet machines"
    print_locate 412,569
    print "Octet Vannes distribution"
    print_locate 216,569
    print "Vanne n°"
    print_locate 234,674
    print "Poids"
    print_locate 420,674
    print "Octet poids fort"
    print_locate 737,674
    print "Octet poids faible"
    font_size 1,10
    print_locate 213,750
    print "12 bits + sign"
    print_locate 310,750
    print "Alarme"
    print_locate 360,750
    print "NC"
    print_locate 400,750
    print "NC"
    print_locate 465,750
    print "Bit de signe : 0=positif"
    
    
    font_name 1,"Consolas"
    font_size 1,14
    font_color 1,255,255,0 : print_locate 530,160 : print "0  0  0  0" : font_color 1,0,0,0 : print_locate 650,160 : print "(0)"
    font_color 1,255,255,0 : print_locate 530,183 : print "0  0  0  1" : font_color 1,0,0,0 : print_locate 650,183 : print "(1)"
    font_color 1,255,255,0 : print_locate 530,206 : print "0  0  1  0" : font_color 1,0,0,0 : print_locate 650,206 : print "(2)"
    font_color 1,255,255,0 : print_locate 530,229 : print "0  0  1  1" : font_color 1,0,0,0 : print_locate 650,229 : print "(3)"
    font_color 1,255,255,0 : print_locate 530,252 : print "0  1  0  0" : font_color 1,0,0,0 : print_locate 650,252 : print "(4)"
    font_color 1,255,255,0 : print_locate 530,275 : print "0  1  0  1" : font_color 1,0,0,0 : print_locate 650,275 : print "(5)"
    font_color 1,255,255,0 : print_locate 530,298 : print "0  1  1  0" : font_color 1,0,0,0 : print_locate 650,298 : print "(6)"
    font_color 1,255,255,0 : print_locate 530,321 : print "0  1  1  1" : font_color 1,0,0,0 : print_locate 650,321 : print "(7)"
    font_color 1,255,255,0 : print_locate 530,344 : print "1  0  0  0" : font_color 1,0,0,0 : print_locate 650,344 : print "(8)"
    font_color 1,255,255,0 : print_locate 530,367 : print "1  0  0  1" : font_color 1,0,0,0 : print_locate 650,367 : print "(9)"
    font_color 1,255,255,0 : print_locate 530,390 : print "1  0  1  0" : font_color 1,0,0,0 : print_locate 650,390 : print "(10)"
    font_color 1,255,255,0 : print_locate 530,413 : print "1  0  1  1" : font_color 1,0,0,0 : print_locate 650,413 : print "(11)"
    font_color 1,255,255,0 : print_locate 530,436 : print "1  1  0  0" : font_color 1,0,0,0 : print_locate 650,436 : print "(12)"
    font_color 1,255,255,0 : print_locate 530,459 : print "1  1  0  1" : font_color 1,0,0,0 : print_locate 650,459 : print "(13)"
    font_color 1,255,255,0 : print_locate 530,482 : print "1  1  1  0" : font_color 1,0,0,0 : print_locate 650,482 : print "(14)"
    font_color 1,255,255,0 : print_locate 530,505 : print "1  1  1  1" : font_color 1,0,0,0 : print_locate 650,505 : print "(15)"
    ' lignes : sections départs vers produits
    2d_line 682,194,696,194
    2d_line 682,217,696,217
    2d_line 682,240,696,240
    2d_line 682,263,696,263
    2d_line 682,286,696,286
    2d_line 682,309,696,309
    2d_line 682,332,696,332
    2d_line 682,355,696,355
    2d_line 682,378,696,378
    ' lignes : sections arrivées aux produits    
    2d_line 785,62,799,62
    2d_line 785,122,799,122
    2d_line 785,182,799,182
    2d_line 785,242,799,242
    2d_line 785,302,799,302
    2d_line 785,362,799,362
    2d_line 785,422,799,422
    2d_line 785,482,799,482
    2d_line 785,542,799,542
    ' lignes obliques Produits
    2d_line 696,194,785,62
    2d_line 696,217,785,122
    2d_line 696,240,785,182
    2d_line 696,263,785,242
    2d_line 696,286,785,302
    2d_line 696,309,785,362
    2d_line 696,332,785,422
    2d_line 696,355,785,482
    2d_line 696,378,785,542
    
    ' Lignes : sections vannes départ
    2d_line 200,302,280,302
    2d_line 200,362,280,362
    2d_line 200,422,280,422
    2d_line 200,482,280,482
    ' lignes : sections arrivées
    2d_line 440,400,520,400
    2d_line 440,423,520,423
    2d_line 440,446,520,446
    2d_line 440,469,520,469
    ' lignes obliques
    2d_line 280,302,440,400
    2d_line 280,362,440,423
    2d_line 280,422,440,446
    2d_line 280,482,440,469
    
    ' ligne vannes distribution
    2d_line 287,613,338,613
    
    ' lignes octets poids
    2d_line 256,737,256,747
    2d_line 329,737,329,747
    2d_line 369,737,369,747
    2d_line 409,737,409,747
    2d_line 449,737,449,759
    2d_line 449,759,463,759
    
    ' lignes au dessus des octets poids
    2d_line 420,671,526,671
    2d_line 738,671,858,671
    
end_sub
' ------------------------------------------------------------------------------
fnc centrer%(a$)
    dim_local longueur%, offset%
    longueur% = text_width(a$,11)
    offset% = (156 - longueur% ) / 2
    result offset%
end_fnc


' ******************************************************************************
' COMMANDE MOTEURS - COMMANDE MOTEURS - COMMANDE MOTEURS - COMMANDE MOTEURS - CO
' ------------------------------------------------------------------------------
sub appelBroyeur()
    if broyeurOnOff% = 0
        broyeurOnOff% = 1
        quartet_H% = quartet_H% + 128
        2d_target_is 12
        2d_image_copy 3,0,0,155,40
        2d_target_is 10
        2d_image_paste 3,0,0
    else
        broyeurOnOff% = 0
        quartet_H% = quartet_H% -128
        2d_target_is 11
        2d_image_copy 3,0,0,155,40
        2d_target_is 10
        2d_image_paste 3,0,0
    end_if
    afficherOctetMoteurs()
end_sub
' ------------------------------------------------------------------------------
sub appelBrasseur()
    if brasseurOnOff% = 0
        brasseurOnOff% = 1
        quartet_H% = quartet_H% + 64
        2d_target_is 22
        2d_image_copy 3,0,0,155,40
        2d_target_is 20
        2d_image_paste 3,0,0
     else
        brasseurOnOff% = 0
        quartet_H% = quartet_H% - 64
        2d_target_is 21
        2d_image_copy 3,0,0,155,40
        2d_target_is 20
        2d_image_paste 3,0,0
    end_if
    afficherOctetMoteurs()
end_sub
' ------------------------------------------------------------------------------
sub appelPompe()
    if pompeOnOff% = 0
        pompeOnOff% = 1
        quartet_H% = quartet_H% + 32
        2d_target_is 32
        2d_image_copy 3,0,0,155,40
        2d_target_is 30
        2d_image_paste 3,0,0
    else
        pompeOnOff% = 0
        quartet_H% = quartet_H% - 32
        2d_target_is 31
        2d_image_copy 3,0,0,155,40
        2d_target_is 30
        2d_image_paste 3,0,0
    end_if
    afficherOctetMoteurs()
end_sub    
' ------------------------------------------------------------------------------
sub appelVanneRetour()
    if vanneRetourOnOff% = 0
        vanneRetourOnOff% = 1
        quartet_H% = quartet_H% + 16
        2d_target_is 42
        2d_image_copy 3,0,0,155,40
        2d_target_is 40
        2d_image_paste 3,0,0
    else
        vanneRetourOnOff% = 0
        quartet_H% = quartet_H% - 16
        2d_target_is 41
        2d_image_copy 3,0,0,155,40
        2d_target_is 40
        2d_image_paste 3,0,0
    end_if
    afficherOctetMoteurs()
end_sub
' ------------------------------------------------------------------------------
sub appelVanneDepart1()
    if vanneDepart1OnOff% = 0
        vanneDepart1OnOff% = 1
        eteindreBoutonPrecedent()
        quartet_L% = 10
        2d_target_is 52
        2d_image_copy 3,0,0,155,40
        2d_target_is 50
        2d_image_paste 3,0,0
    else
        vanneDepart1OnOff% = 0
        quartet_L% = 0
        2d_target_is 51
        2d_image_copy 3,0,0,155,40
        2d_target_is 50
        2d_image_paste 3,0,0
    end_if
    afficherOctetMoteurs()                
end_sub
' ------------------------------------------------------------------------------
sub appelVanneDepart2()
    if vanneDepart2OnOff% = 0
        vanneDepart2OnOff% = 1
        eteindreBoutonPrecedent()
        quartet_L% = 11
        2d_target_is 62
        2d_image_copy 3,0,0,155,40
        2d_target_is 60
        2d_image_paste 3,0,0
    else
        vanneDepart2OnOff% = 0
        quartet_L% = 0
        2d_target_is 61
        2d_image_copy 3,0,0,155,40
        2d_target_is 60
        2d_image_paste 3,0,0
    end_if
    afficherOctetMoteurs()
end_sub
' ------------------------------------------------------------------------------
sub appelVanneDepart3()
    if vanneDepart3OnOff% = 0
        vanneDepart3OnOff% = 1
        eteindreBoutonPrecedent()
        quartet_L% = 12
        2d_target_is 72
        2d_image_copy 3,0,0,155,40
        2d_target_is 70
        2d_image_paste 3,0,0
    else
        vanneDepart3OnOff% = 0
        quartet_L% = 0
        2d_target_is 71
        2d_image_copy 3,0,0,155,40
        2d_target_is 70
        2d_image_paste 3,0,0
    end_if
    afficherOctetMoteurs()
end_sub
' ------------------------------------------------------------------------------
sub appelVanneDepart4()
    if vanneDepart4OnOff% = 0
        vanneDepart4OnOff% = 1
        eteindreBoutonPrecedent()
        quartet_L% = 13
        2d_target_is 82
        2d_image_copy 3,0,0,155,40
        2d_target_is 80
        2d_image_paste 3,0,0
    else
        vanneDepart4OnOff% = 0
        quartet_L% = 0
        2d_target_is 81
        2d_image_copy 3,0,0,155,40
        2d_target_is 80
        2d_image_paste 3,0,0
    end_if
    afficherOctetMoteurs()
end_sub
' ------------------------------------------------------------------------------
sub appelProduit1()
    if produit1_On_Off% = 0
        produit1_On_Off% = 1
        eteindreBoutonPrecedent()
        quartet_L% = 1
        2d_target_is 102
        2d_image_copy 3,0,0,155,40
        2d_target_is 100
        2d_image_paste 3,0,0
    else
        produit1_On_Off% = 0
        quartet_L% = 0
        2d_target_is 101
        2d_image_copy 3,0,0,155,40
        2d_target_is 100
        2d_image_paste 3,0,0
    end_if
    afficherOctetMoteurs()
end_sub
' ------------------------------------------------------------------------------
sub appelProduit2()
    if produit2_On_Off% = 0
        produit2_On_Off% = 1
        eteindreBoutonPrecedent()
        quartet_L% = 2
        2d_target_is 112
        2d_image_copy 3,0,0,155,40
        2d_target_is 110
        2d_image_paste 3,0,0
    else
        produit2_On_Off% = 0
        quartet_L% = 0
        2d_target_is 111
        2d_image_copy 3,0,0,155,40
        2d_target_is 110
        2d_image_paste 3,0,0
    end_if
    afficherOctetMoteurs()
end_sub
' ------------------------------------------------------------------------------
sub appelProduit3()
    if produit3_On_Off% = 0
        produit3_On_Off% = 1
        eteindreBoutonPrecedent()
        quartet_L% = 3
        2d_target_is 122
        2d_image_copy 3,0,0,155,40
        2d_target_is 120
        2d_image_paste 3,0,0
    else
        produit3_On_Off% = 0
        quartet_L% = 0
        2d_target_is 121
        2d_image_copy 3,0,0,155,40
        2d_target_is 120
        2d_image_paste 3,0,0
    end_if
    afficherOctetMoteurs()
end_sub
' ------------------------------------------------------------------------------
sub appelProduit4()
    if produit4_On_Off% = 0
        produit4_On_Off% = 1
        eteindreBoutonPrecedent()
        quartet_L% = 4
        2d_target_is 132
        2d_image_copy 3,0,0,155,40
        2d_target_is 130
        2d_image_paste 3,0,0
    else
        produit4_On_Off% = 0
        quartet_L% = 0
        2d_target_is 131
        2d_image_copy 3,0,0,155,40
        2d_target_is 130
        2d_image_paste 3,0,0
    end_if
    afficherOctetMoteurs()
end_sub
' ------------------------------------------------------------------------------
sub appelProduit5()
    if produit5_On_Off% = 0
        produit5_On_Off% = 1
        eteindreBoutonPrecedent()
        quartet_L% = 5
        2d_target_is 142
        2d_image_copy 3,0,0,155,40
        2d_target_is 140
        2d_image_paste 3,0,0
    else
        produit5_On_Off% = 0
        quartet_L% = 0
        2d_target_is 141
        2d_image_copy 3,0,0,155,40
        2d_target_is 140
        2d_image_paste 3,0,0
    end_if
    afficherOctetMoteurs()
end_sub
' ------------------------------------------------------------------------------
sub appelProduit6()
    if produit6_On_Off% = 0
        produit6_On_Off% = 1
        eteindreBoutonPrecedent()
        quartet_L% = 6
        2d_target_is 152
        2d_image_copy 3,0,0,155,40
        2d_target_is 150
        2d_image_paste 3,0,0
    else
        produit6_On_Off% = 0
        quartet_L% = 0
        2d_target_is 151
        2d_image_copy 3,0,0,155,40
        2d_target_is 150
        2d_image_paste 3,0,0
    end_if
    afficherOctetMoteurs()
end_sub
' ------------------------------------------------------------------------------
sub appelProduit7()
    if produit7_On_Off% = 0
        produit7_On_Off% = 1
        eteindreBoutonPrecedent()
        quartet_L% = 7
        2d_target_is 162
        2d_image_copy 3,0,0,155,40
        2d_target_is 160
        2d_image_paste 3,0,0
    else
        produit7_On_Off% = 0
        quartet_L% = 0
        2d_target_is 161
        2d_image_copy 3,0,0,155,40
        2d_target_is 160
        2d_image_paste 3,0,0
    end_if
    afficherOctetMoteurs()
end_sub
' ------------------------------------------------------------------------------
sub appelProduit8()
    if produit8_On_Off% = 0
        produit8_On_Off% = 1
        eteindreBoutonPrecedent()
        quartet_L% = 8
        2d_target_is 172
        2d_image_copy 3,0,0,155,40
        2d_target_is 170
        2d_image_paste 3,0,0
    else
        produit8_On_Off% = 0
        quartet_L% = 0
        2d_target_is 171
        2d_image_copy 3,0,0,155,40
        2d_target_is 170
        2d_image_paste 3,0,0
    end_if
    afficherOctetMoteurs()                
end_sub
' ------------------------------------------------------------------------------
sub appelProduit9()
    if produit9_On_Off% = 0
        produit9_On_Off% = 1
        eteindreBoutonPrecedent()
        quartet_L% = 9
        2d_target_is 182
        2d_image_copy 3,0,0,155,40
        2d_target_is 180
        2d_image_paste 3,0,0
    else
        produit9_On_Off% = 0
        quartet_L% = 0
        2d_target_is 181
        2d_image_copy 3,0,0,155,40
        2d_target_is 180
        2d_image_paste 3,0,0
    end_if
    afficherOctetMoteurs()
end_sub
' ------------------------------------------------------------------------------
sub eteindreBoutonPrecedent()
    select quartet_L%
        case 1
            produit1_On_Off% = 0
            2d_target_is 101
            2d_image_copy 3,0,0,155,40
            2d_target_is 100
            2d_image_paste 3,0,0
            
        case 2
            produit2_On_Off% = 0
            2d_target_is 111
            2d_image_copy 3,0,0,155,40
            2d_target_is 110
            2d_image_paste 3,0,0

        case 3
            produit3_On_Off% = 0
            2d_target_is 121
            2d_image_copy 3,0,0,155,40
            2d_target_is 120
            2d_image_paste 3,0,0

        case 4
            produit4_On_Off% = 0
            2d_target_is 131
            2d_image_copy 3,0,0,155,40
            2d_target_is 130
            2d_image_paste 3,0,0
        
        case 5
            produit5_On_Off% = 0
            2d_target_is 141
            2d_image_copy 3,0,0,155,40
            2d_target_is 140
            2d_image_paste 3,0,0
        
        case 6
            produit6_On_Off% = 0
            2d_target_is 151
            2d_image_copy 3,0,0,155,40
            2d_target_is 150
            2d_image_paste 3,0,0

        case 7
            produit7_On_Off% = 0
            2d_target_is 161
            2d_image_copy 3,0,0,155,40
            2d_target_is 160
            2d_image_paste 3,0,0

        case 8
            produit8_On_Off% = 0
            2d_target_is 171
            2d_image_copy 3,0,0,155,40
            2d_target_is 170
            2d_image_paste 3,0,0
            
        case 9
            produit9_On_Off% = 0
            2d_target_is 181
            2d_image_copy 3,0,0,155,40
            2d_target_is 180
            2d_image_paste 3,0,0

        case 10
            vanneDepart1OnOff% = 0
            2d_target_is 51
            2d_image_copy 3,0,0,155,40
            2d_target_is 50
            2d_image_paste 3,0,0

        case 11
            vanneDepart2OnOff% = 0
            2d_target_is 61
            2d_image_copy 3,0,0,155,40
            2d_target_is 60
            2d_image_paste 3,0,0

        case 12
            vanneDepart3OnOff% = 0
            2d_target_is 71
            2d_image_copy 3,0,0,155,40
            2d_target_is 70
            2d_image_paste 3,0,0

        case 13
            vanneDepart4OnOff% = 0
            2d_target_is 81
            2d_image_copy 3,0,0,155,40
            2d_target_is 80
            2d_image_paste 3,0,0
    end_select
end_sub
' ------------------------------------------------------------------------------
sub afficherOctetMoteurs()
    dim_local i%, bit%, octet$, n%
    
    inactive 0

    n% = quartet_H% + quartet_L%
    
    ' décodage décimal en binaire
    octet$ = ""
    while n% > 0
        if frac(n% / 2) = 0
            octet$ = "0" + octet$
        else
            octet$ = "1" + octet$
        end_if
        n% = int(n% / 2)
    end_while

    while len(octet$) < 8
        octet$ = "0" + octet$
    end_while

    ' affiche la valeur binaire de numVanneDistribution%
    for bit% = 0 to 7
        if mid$(octet$,bit%+1,1) = "1"
            color 201+bit%,240,60,50
        else
            color 201+bit%,240,240,240        
        end_if
    next bit%

    transmettreTrameSerie()

    active 0
end_sub


' ******************************************************************************
' VANNES DISTRIBUTION - VANNES DISTRIBUTION - VANNES DISTRIBUTION - VANNES DISTR
' ------------------------------------------------------------------------------
sub appelVanneDistribution()
    if vanneDistribOnOff% = 0
        vanneDistribOnOff% = 1
        numVanneDistribution% = val(caption$(5))
        2d_target_is 92
        2d_image_copy 3,0,0,155,40
        2d_target_is 90
        2d_image_paste 3,0,0
    else
        vanneDistribOnOff% = 0
        2d_target_is 91
        2d_image_copy 3,0,0,155,40
        2d_target_is 90
        2d_image_paste 3,0,0
    end_if
    affichageOctetVanneDistri()
end_sub
' ------------------------------------------------------------------------------
sub appelVannePlus()
    if mouse_right_down(6) = 1
        exit_sub
    end_if
    null% = mouse_left_up(6)
    numVanneDistribution% = val(caption$(5))
    delai% = 450
    while mouse_left_up(6) <> 1
        if numVanneDistribution% < 255
            numVanneDistribution% = numVanneDistribution% + 1
        end_if
        caption 5,str$(numVanneDistribution%)
        pause delai%
        delai% = delai% - 1
        if delai% < 447
            delai% = 20
        end_if
    end_while
    null% = mouse_left_up(6)
    null% = mouse_left_down(6)
    null% = mouse_right_up(6)
    null% = mouse_right_down(6)
    affichageOctetVanneDistri()
end_sub
' ------------------------------------------------------------------------------
sub appelVanneMoins()
    if mouse_right_down(7) = 1
        exit_sub
    end_if
    null% = mouse_left_up(7)
    numVanneDistribution% = val(caption$(5))
    delai% = 450
    while mouse_left_up(7) <> 1
        if numVanneDistribution% > 0
            numVanneDistribution% = numVanneDistribution% - 1
        end_if
        caption 5,str$(numVanneDistribution%)
        pause delai%
        delai% = delai% - 1
        if delai% < 447
            delai% = 20
        end_if
    end_while
    null% = mouse_left_up(7)
    null% = mouse_left_down(7)
    null% = mouse_right_up(7)
    null% = mouse_right_down(7)
    affichageOctetVanneDistri()
end_sub
' ------------------------------------------------------------------------------
sub affichageOctetVanneDistri()
    dim_local i%, bit%, octet$, n%

    inactive 0

    if vanneDistribOnOff% = 0
        for bit% = 0 to 7
            color 221+bit%,240,240,240        
        next bit%

        numVanneDistribution% = 0
        transmettreTrameSerie()
        active 0
        exit_sub
    end_if
            
    n% = numVanneDistribution%
    
    ' décodage décimal en binaire
    octet$ = ""
    while n% > 0
        if frac(n% / 2) = 0
            octet$ = "0" + octet$
        else
            octet$ = "1" + octet$
        end_if
        n% = int(n% / 2)
    end_while

    while len(octet$) < 8
        octet$ = "0" + octet$
    end_while

    ' affiche la valeur binaire de numVanneDistribution%
    for bit% = 0 to 7
        if mid$(octet$,bit%+1,1) = "1"
            color 221+bit%,240,60,50
        else
            color 221+bit%,240,240,240        
        end_if
    next bit%

    transmettreTrameSerie()

    active 0
end_sub


' ******************************************************************************
' POIDS POIDS POIDS POIDS POIDS POIDS POIDS POIDS POIDS POIDS POIDS POIDS POIDS
' ------------------------------------------------------------------------------
sub appelPoidsCuve()
    if poidsOnOff% = 0
        poidsOnOff% = 1
        2d_target_is 192
        2d_image_copy 3,0,0,155,40
        2d_target_is 190
        2d_image_paste 3,0,0
    else
        poidsOnOff% = 0
        2d_target_is 191
        2d_image_copy 3,0,0,155,40
        2d_target_is 190
        2d_image_paste 3,0,0
    end_if
end_sub
' ------------------------------------------------------------------------------
sub lecturePoids()
    ' !!! Les deux octets poids sont en logique inversée !!!
    dim_local octet$, n%, bit%

    receptionTrame$ = serial_read$(293)
    
    if len(receptionTrame$) > 3
        octet1$ = left$(receptionTrame$,1)
        if octet1$ = chr$(170)
            octet4$ = mid$(receptionTrame$,4,1)
            if octet4$ = chr$(187)
                octet2$ = mid$(receptionTrame$,2,1)
                poidsFaible% = asc(octet2$)
                octet3$ = mid$(receptionTrame$,3,1)
                poidsFort% = asc(octet3$)

                ' octet poids fort : décoder décimal en binaire
                n% = poidsFort%
                octet$ = ""
                
                while n% > 0
                   if frac(n% / 2) = 0
                       octet$ = "0" + octet$
                    else
                       octet$ = "1" + octet$
                    end_if
                    n% = int(n% / 2)
                end_while

                while len(octet$) < 8
                   octet$ = "0" + octet$
                end_while

                ' octet poids fort : afficher la valeur binaire
                for bit% = 0 to 7
                    if mid$(octet$,bit%+1,1) = "1"
                        color 241+bit%,240,60,50
                    else
                        color 241+bit%,240,240,240        
                    end_if
                next bit%


                ' octet poids faible : décoder décimal en binaire
                n% = poidsFaible%
                octet$ = ""
                
                while n% > 0
                   if frac(n% / 2) = 0
                       octet$ = "0" + octet$
                    else
                       octet$ = "1" + octet$
                    end_if
                    n% = int(n% / 2)
                end_while

                while len(octet$) < 8
                   octet$ = "0" + octet$
                end_while

                ' octet poids faible : afficher la valeur binaire
                for bit% = 0 to 7
                    if mid$(octet$,bit%+1,1) = "1"
                        color 261+bit%,240,60,50
                    else
                        color 261+bit%,240,240,240        
                    end_if
                next bit%

                ' détection coupure courant si tous les bits sont à 1
                if poidsFort% > 254
                     message "Sécurité : attente mise sous tension !"
                end_if    

                '  0 kg = 01101111 11111111 : -1 kg = 01110000 00000000              

                ' inversion des bits pour passer en logique positive
                poidsFaible% = 255 - poidsFaible%
                poidsFort% = 127 - poidsFort%

                ' 0 kg = 00010000 00000000 : -1 kg = 00001111 11111111
                
                ' traitement si le poids est une valeur positive (bit 4 poids fort à 1)
                if poidsFort% > 15
                    poidsFort% = poidsFort% - 16
                else :' si c'est une valeur négative
                    poidsFort% = 15 - poidsFort% : ' inversion des 4 bits poids faibles de l'octet fort
                    poidsFort% = poidsFort% * (-1)  
                    poidsFaible% = 255 - poidsFaible% :' inversion des 8 bits de l'octet faible
                    poidsFaible% = poidsFaible% + 1
                    poidsFaible% = poidsFaible% * (-1)
                end_if
                
                ' afficher poids à l'écran
                poids% = (poidsFort% * 256) + poidsFaible%
                caption 270,str$(poids%) + " kg"
            end_if
        end_if
    end_if            
end_sub



' ******************************************************************************
' PORT COM PORT COM PORT COM PORT COM PORT COM PORT COM PORT COM PORT COM PORT C
' ------------------------------------------------------------------------------
sub creerFenetreSerial()
    dim_local n%
    command_target_is 0

    create_hide
    panel 300
    height 300,300
    width 300,290
    top 300,5
    left 300,5
    create_show

    command_target_is 300
    
    ' picture fond du PANEL 70
    picture 301
    width 301,290
    height 301,300
    color 301,191,191,191
    2d_target_is 301
    2d_fill_off
    2d_pen_color 112,112,112
    2d_rectangle 0,0,290,300
    
    ' bandeau haut du PANEL 2
    picture 302
    width 302,287
    height 302,25
    top 302,1
    left 302,1
    2d_target_is 302
    2d_pen_color 0,0,60
    2d_fill_color 0,0,60
    2d_rectangle 10,9,13,16
    2d_rectangle 9,10,14,15
    2d_rectangle 8,11,15,14
    2d_line 14,12,47,12
    2d_line 18,11,20,11
    2d_line 19,10,21,10
    2d_line 20,9,23,9
    2d_line 22,8,24,8
    2d_line 23,7,26,7
    2d_line 25,6,28,6
    2d_rectangle 28,5,33,8
    2d_rectangle 29,4,32,9
    2d_line 23,13,25,13
    2d_line 24,14,26,14
    2d_line 25,15,28,15
    2d_line 27,16,29,16
    2d_line 28,17,31,17
    2d_line 30,18,35,18
    2d_rectangle 34,16,39,21
    2d_line 42,8,42,17
    2d_line 43,9,43,16
    2d_line 44,10,44,15
    2d_line 45,11,45,14
    2d_pen_color 0,0,0
    2d_fill_color 0,0,0
    2d_fill_off
    print_target_is 302
    print_locate 56,5
    print "Configuration port COM"

    ' croix blanche sur fond rouge
    picture 303    
    width 303,45
    height 303,24
    left 303,244
    top 303,1
    color 303,232,17,35
    2d_target_is 303
    2d_pen_color 241,107,118
    2d_line 18,7,27,16
    2d_line 17,8,26,17
    2d_line 17,15,26,6
    2d_line 18,16,27,7
    2d_pen_color 255,255,255
    2d_line 17,7,27,17
    2d_line 17,16,27,6
    cursor_point 303
    on_click 303,fermerFenetreSerial
    
    ' n° port COM
    combo 304
    top 304,50
    left 304,124
    width 304,100
    height 304,25
    for n% = 1 to 255
        item_add 304,"COM" + str$(n%)
    next n%
    on_change 304,choixPortCom
    
    ' vitesse en bauds
    combo 305
    top 305,90
    left 305,124
    width 305,100
    height 305,25
    item_add 305,"110"
    item_add 305,"300"
    item_add 305,"600"
    item_add 305,"1200"
    item_add 305,"2400"
    item_add 305,"4800"
    item_add 305,"9600"
    item_add 305,"14400"
    item_add 305,"19200"
    item_add 305,"38400"
    item_add 305,"57600"
    item_add 305,"115200"
    on_change 305,choixBaudrate
    
    ' données : nombre bits
    combo 306
    top 306,130
    left 306,124
    width 306,100
    item_add 306,"5"
    item_add 306,"6"
    item_add 306,"7"
    item_add 306,"8"
    on_change 306,choixNbBits
    
    ' parité
    combo 307  
    top 307,170
    left 307,124
    width 307,100
    item_add 307,"Aucune"
    item_add 307,"Impaire"
    item_add 307,"Paire"
    on_change 307,choixParity
    
    ' bits d'arrêt
    combo 308
    top 308,210
    left 308,124
    width 308,100
    item_add 308,"1"
    item_add 308,"1.5"
    item_add 308,"2"
    on_change 308,choixBitstop
 
    ' bouton "Définir par défaut"
    button 309
    top 309,260
    left 309,21
    width 309,108
    caption 309,"Set defaults"
    cursor_point 309
    on_click 309,enregistrer

    ' bouton "OK"
    button 310
    top 310,260
    left 310,161
    width 310,108
    caption 310,"OK"
    cursor_point 310
    on_click 310,ouvrirLiaisonSerie

    ' legendes
    print_target_is 301
    print_locate 94,53
    print "Port:"
    
    print_locate 67,93
    print "Baud rate:"
    
    print_locate 71,133
    print "Data bits:"

    print_locate 86,173
    print "Parity:"
    
    print_locate 72,213
    print "Stop bits:"
    
    command_target_is 0
end_sub
' ------------------------------------------------------------------------------
afficheFenetreSerial:
    for i% = 10 to 190 step 10
        inactive i%
    next i%
        
    show 300
return
' ------------------------------------------------------------------------------
choixPortCom:
    sPortCom$ = item_index$(304)
return
' ------------------------------------------------------------------------------
choixBaudrate:
    sBaudRate$ = item_index$(305)
return
' ------------------------------------------------------------------------------
choixNbBits:
    sDataBit$ = item_index$(306)
return
' ------------------------------------------------------------------------------
choixParity:
    sParity$ = item_index$(307)
return
' ------------------------------------------------------------------------------
choixBitstop:
    sStopBit$ = item_index$(308)
return
' ------------------------------------------------------------------------------
fermerFenetreSerial:
    hide 300

    for i% = 10 to 190 step 10
        active i%
    next i%
return
' ------------------------------------------------------------------------------
ouvrirLiaisonSerie:
    if sPortCom$ = ""
        info$ = "Veuillez configurer le port COM !"
        if message_warning_ok(info$) > 0
            show 300
        end_if
        return
    end_if

    portCom% = val(mid$(sPortCom$,4,len(sPortCom$)))    
    serial_close 293

    caption 298,"Non connecté"
    active 296

    if serial_port_exists(portCom%) = 0
        hide 297
        info$ = "Le port " + sPortCom$ + " n'est pas disponible !" + chr$(13) + chr$(13)
        info$ = info$ + "Vérifiez les connexions électriques ainsi que le numéro de port COM attribué."
        if message_error_ok(info$) < 2
            return
        end_if
    end_if
    
    hide 300
    
    if sParity$ = "Aucune" then parity% = 0
    if sParity$ = "Impaire" then parity% = 1
    if sParity$ = "Paire" then parity% = 2

    serial_port 293,portCom%
    serial_baudrate 293,val(sBaudRate$)
    serial_databits 293,val(sDataBit$)
    serial_parity 293,parity%
    serial_stopbits 293,val(sStopBit$)
    serial_open 293

    arretMoteurs()
    
    off_click 297
    caption 298,"Connecté"
    inactive 296
    show 297

    for i% = 10 to 190 step 10
        active i%
    next i%
    
    purgeClicked()
    boucleDeFonctionnement()
return
' ------------------------------------------------------------------------------
enregistrer:
    file_open_write 293,dossier$ + "test_cibus.cfg"
        file_writeln 293,sPortCom$
        file_writeln 293,sBaudRate$
        file_writeln 293,sDataBit$
        file_writeln 293,sParity$
        file_writeln 293,sStopBit$
    file_close 293
return
' ------------------------------------------------------------------------------
sub chargerFichierConfiguration()
    ' charger fichier configuration s'il existe
    if file_exists(dossier$ + "test_cibus.cfg") = 1
        file_open_read 292,dossier$ + "test_cibus.cfg"
            sPortCom$ = file_readln$(292)
            sBaudRate$ = file_readln$(292)
            sDataBit$ = file_readln$(292)
            sParity$ = file_readln$(292)
            sStopBit$ = file_readln$(292)
        file_close 292  
        trigger_click 310
    else
        ' valeurs par défaut
        sPortCom$ = ""
        sBaudRate$ = "9600"
        sDataBit$ = "8"
        sParity$ = "Aucune"
        sStopBit$ ="1"
    end_if

    text 304,sPortCom$
    text 305,sBaudRate$
    text 306,sDataBit$
    text 307,sParity$
    text 308,sStopBit$
end_sub
' ------------------------------------------------------------------------------




' ******************************************************************************
' STOP - STOP - STOP - STOP - STOP - STOP - STOP - STOP - STOP - STOP - STOP - S
' ------------------------------------------------------------------------------
sub arretMoteurs()
    inactive 0
    quartet_H% = 0
    eteindreBoutonPrecedent()
    quartet_L% = 0

    numVanneDistribution% = 0
    
    broyeurOnOff% = 0
    2d_target_is 11
    2d_image_copy 3,0,0,155,40
    2d_target_is 10
    2d_image_paste 3,0,0

    brasseurOnOff% = 0
    2d_target_is 21
    2d_image_copy 3,0,0,155,40
    2d_target_is 20
    2d_image_paste 3,0,0

    pompeOnOff% = 0
    2d_target_is 31
    2d_image_copy 3,0,0,155,40
    2d_target_is 30
    2d_image_paste 3,0,0

    vanneRetourOnOff% = 0
    2d_target_is 41
    2d_image_copy 3,0,0,155,40
    2d_target_is 40
    2d_image_paste 3,0,0
  
    afficherOctetMoteurs()

    vanneDistribOnOff% = 0
    2d_target_is 91
    2d_image_copy 3,0,0,155,40
    2d_target_is 90
    2d_image_paste 3,0,0

    affichageOctetVanneDistri()
    
    active 0
end_sub

' ------------------------------------------------------------------------------
sub transmettreTrameSerie()
    trame$ = ""
    trame$ = trame$ + chr$(quartet_H% + quartet_L%)
    trame$ = trame$ + chr$(numVanneDistribution%)
    trame$ = trame$ + chr$(255)
    trame$ = trame$ + chr$(255)
    serial_write 293,trame$
end_sub

ELECTRONIQUE : Une réalisation pilotée par PANORAMIC Cibus110

Ce programme permet de contrôler toute la partie électronique/électrotechnique existante avec la possibilité d’outrepasser les possibilités techniques de l’automate d’origine.



2) D’une partie électronique qui se substitue à l'installation existante. Elle permet de vérifier le bon fonctionnement des ordres envoyés par l’automate.

ELECTRONIQUE : Une réalisation pilotée par PANORAMIC Cibus210

Très succinctement :

Cette partie électronique simule toute l’installation électronique/électrotechnique commandée par l’automate.
La communication est bidirectionnelle : un retour d’information revient vers l’automate.
Chaque élément (moteurs, vannes …) est représenté par une LED.
Les informations de défaut sont simulées par des interrupteurs.
L’information des jauges de contraintes (mesure du poids) est simulée par un Arduino NANO programmé en compteur 12 bits + retenue.

La partie électronique est composée de deux modules reliés par une nappe de 40 conducteurs :
- Une carte interface ordinateur/machines réalisée avec un Arduino UNO.
- Une carte multifonction d’affichage de l’état des machines et de simulation de comptage du poids (réalisé par l’Arduino NANO).


Pour finir, si vous souhaitez tester le code-source ci-dessus, c’est tout à fait possible. Il suffit de sélectionner le port COM n°1 dans le menu « Port COM ».
Pour information, le PORT COM 1, bien qu’il aboutisse dans le vide, est actif dans toutes les versions de Windows.


Le couple PANORAMIC / ELECTRONIQUE fonctionne à merveille !
Revenir en haut Aller en bas
Yannick




Nombre de messages : 8635
Age : 53
Localisation : Bretagne
Date d'inscription : 15/02/2010

ELECTRONIQUE : Une réalisation pilotée par PANORAMIC Empty
MessageSujet: re   ELECTRONIQUE : Une réalisation pilotée par PANORAMIC EmptyLun 16 Sep 2024 - 21:55

Bonsoir Marc.

Excuse moi mais ce soir je vais te contredire. Laughing

              Tout à grand intérêt.


Peut être pas aujourd'hui ni demain...
...mais après demain qui sait ?

Il a déjà l'intérêt de montrer l'étendue des possibles en Panoramic.
Revenir en haut Aller en bas
 
ELECTRONIQUE : Une réalisation pilotée par PANORAMIC
Revenir en haut 
Page 1 sur 1
 Sujets similaires
-
» Un magazine Electronique sur Panoramic et +
» Domotique et électronique : Panoramic et l’Arduino DUE.
» Domotique et électronique : Panoramic et la liaison série.
» Domotique et électronique avec Panoramic : Sommaire
» Objet 3D_PLANE, réalisation d'un dé en 3D

Permission de ce forum:Vous ne pouvez pas répondre aux sujets dans ce forum
FORUM DE DISCUSSION SUR LE LANGAGE PANORAMIC :: PANORAMIC :: Vos sources, vos utilitaires à partager-
Sauter vers: