Projet

Général

Profil

Anomalie #309 » communication_herezh_pipe.py

Frank Petitjean, 08/11/2021 10:35

 
1
#!/usr/bin/python
2
#-*- coding: utf-8 -*-
3
import os
4
import time
5
from struct import unpack
6
from struct import pack
7
from threading import Thread
8

    
9

    
10
def executionHerezh():
11

    
12
    os.system('/home/frank/squashfs-root/AppRun -f modele.info > modele.log')
13
    print('Fin du calcul Herezh')
14

    
15

    
16
def Calcul_pression(variable_out):
17
    
18
    return variable_out[-1]
19
    
20

    
21
def fonction_externe():
22

    
23
    # Nom fonction nD
24
    nom_fonction_nD = 'fext_press'
25

    
26
    # Valeurs de sortie fonction nD
27
    valeur = 0.001
28

    
29
    # Description du PipeOUT :
30
    nb_variable_out = 3  # Nombre de variables dans PipeOUT et PipeIN : 2 entiers -> 2*4 = 8 bytes
31
    nb_variable_in  = 1  # - variables PipeOUT : réels double -> 2*8 = 16 bytes
32
    nb_byte_out = 2*4 + nb_variable_out*8  # Nombre total de byte
33
    print("Nombre d'octets attendu :",nb_byte_out)  
34

    
35

    
36
    nomPipeOUT=nom_fonction_nD + '_envoi_Hz.FIFO'
37
    nomPipeIN=nom_fonction_nD + '_reception_Hz.FIFO'
38

    
39
    # Ouverture des pipes
40
    PipeOUT = os.open(nomPipeOUT,os.O_RDONLY)
41
    PipeIN  = os.open(nomPipeIN,os.O_WRONLY)
42

    
43
    compteur_boucle = 0 
44
    while 1:     
45
        compteur_boucle += 1 
46
        
47
        # Lecture PipeOut
48
        line = os.read(PipeOUT, nb_byte_out) 
49
        
50
        if line==b'':
51
            break
52

    
53
        time.sleep(0.002)
54

    
55
        # Décodage du PipeOut (i si entier,  d si float double) 
56
        variable_out = unpack('@ii'+nb_variable_out*'d', line) 
57
        nbre_arg_out, nbre_arg_in = variable_out[:2]
58
        
59
        pression = Calcul_pression(variable_out)
60
        
61
        # Encodage du PipeIN et écriture
62
        line = pack('@ii'+nb_variable_in*'d', nbre_arg_out, nbre_arg_in, pression)        
63
        os.write(PipeIN, line)
64

    
65
        if compteur_boucle!=0:
66
            print('Compteur boucle : ',compteur_boucle)
67
            print('Variables out = ',variable_out[2:])
68
            
69
        time.sleep(0.002)
70
         
71
 
72
    os.close(PipeOUT)
73
    os.close(PipeIN)
74

    
75
    print('Fin calcul fonction externe')
76

    
77

    
78
if __name__ == '__main__':
79

    
80
    # Création des threads
81
    thread1 = Thread(target=executionHerezh)
82
    thread2 = Thread(target=fonction_externe)
83

    
84
    # Lancement des threads
85
    thread1.start()
86
    thread2.start()
87

    
88
    thread1.join()
89
    thread2.join()
(2-2/10)
Redmine Appliance - Powered by TurnKey Linux