From db0348770e35fba828f1fba3ac814b1cae91f9ec Mon Sep 17 00:00:00 2001 From: ChevrierVincent <chevrier6@univ-lorraine.fr> Date: Tue, 17 Jan 2023 16:23:35 +0100 Subject: [PATCH] maj partie armoire --- README.md | 2 +- TP2/.gitkeep | 0 TP2/Armoire5.py | 154 --------------------------------------- TP2/Armoire6.py | 157 ---------------------------------------- TP2/bitManip.py | 38 ---------- TP2/docArmoirePython.md | 43 ----------- TP2/test5.py | 90 ----------------------- TP2/test6.py | 90 ----------------------- annuaireFichier.md | 4 +- 9 files changed, 3 insertions(+), 575 deletions(-) delete mode 100644 TP2/.gitkeep delete mode 100644 TP2/Armoire5.py delete mode 100644 TP2/Armoire6.py delete mode 100644 TP2/bitManip.py delete mode 100644 TP2/docArmoirePython.md delete mode 100644 TP2/test5.py delete mode 100644 TP2/test6.py diff --git a/README.md b/README.md index 0a38d7f..2b3f80a 100644 --- a/README.md +++ b/README.md @@ -2,6 +2,6 @@ Vous trouverez ici des exemples de codes utiles pour votre TP. -Les fichiers sont regroupés par séances de TP. +Les fichiers sont regroupés par séances de TP. Le séquencement pédagogique est cependant variable selon les possibilites qu'offrait l'emploi du temps de l'année en cours. Voir le fichier readme.md pour avoir la correspondance. *V Chevrier A Lahmadi* diff --git a/TP2/.gitkeep b/TP2/.gitkeep deleted file mode 100644 index e69de29..0000000 diff --git a/TP2/Armoire5.py b/TP2/Armoire5.py deleted file mode 100644 index 7497944..0000000 --- a/TP2/Armoire5.py +++ /dev/null @@ -1,154 +0,0 @@ -# -*- coding: utf-8 -*- -""" -Created on Mon Jun 22 16:40:33 2020 - -@author: chevrier6 -""" -from bitManip import * -from easymodbus.modbusClient import ModbusClient -from easymodbus.modbusClient import convert_registers_to_float - - -class AutomateException(Exception): - def __init__(self, message): - self.message = message - - -class Armoire5(): - # ici les adresse des mesure commence a ZERO (pas UN comme en java) - - def __init__(self): - self.nbCharge = 7 # de 0 a 6 - self.ipAdresse = "100.75.155.115" - self.adresseMesure = 2 - self.adresseTOR = 32000 - self.adresseMesureSecteur1 = 7 # attention vraie adresse () - self.adresseMesureSecteur2 = 8 # attention vraie adresse - - self.debutAdrCharge = 9 - self.debutAdrSource = 0 - - def okCharge(self, i): - return 0 <= i <= self.nb - 1 - - def resetAll(self): - self.writeTOR(0) - - def resetSource(self): - for i in range(self.nbCharge): - self.setSource1(i) - - def resetCharge(self): - for i in range(self.nbCharge): - self.unsetCharge(i) - - def setCharge(self, charge: int): - if not self.okCharge(charge): - raise AutomateException("numero charge pas compris entre 0 et 6") - val = self.readTOR() - val = setBit(val, charge + self.debutAdrCharge) - self.writeTOR(val) - - def unsetCharge(self, charge): - if not self.okCharge(charge): - raise AutomateException("numero charge pas compris entre 0 et 6") - val = self.readTOR() - val = clearBit(val, charge + self.debutAdrCharge) - self.writeTOR(val) - - def toggleCharge(self, charge): - if not self.okCharge(charge): - raise AutomateException("numero charge pas compris entre 0 et 6") - val = self.readTOR() - val = toggleBit(val, charge + self.debutAdrCharge) - self.writeTOR(val) - - def setSource1(self, charge): - if not self.okCharge(charge): - raise AutomateException("numero charge pas compris entre 0 et 6") - val = self.readTOR() - val = clearBit(val, charge + self.debutAdrSource) - self.writeTOR(val) - - def setSource2(self, charge): - if not self.okCharge(charge): - raise AutomateException("numero charge pas compris entre 0 et 6") - val = self.readTOR() - val = setBit(val, charge + self.debutAdrSource) - self.writeTOR(val) - - def togglesource(self, charge): - if not self.okCharge(charge): - raise AutomateException("numero charge pas compris entre 0 et 6") - val = self.readTOR() - val = toggleBit(val, charge + self.debutAdrSource) - self.writeTOR(val) - - ################################ - - def writeTOR(self, val): - modbusclient = ModbusClient(self.ipAdresse, 502) - modbusclient.connect() - modbusclient.write_single_register(self.adresseTOR, val) - modbusclient.close() - # some tempo to wait measure to stabilize - from time import sleep - sleep(2.) - - def readTOR(self): - modbusclient = ModbusClient(self.ipAdresse, 502) - modbusclient.connect() - inputRegisters = modbusclient.read_inputregisters(self.adresseTOR, 1) - modbusclient.close() - return (int)(inputRegisters[0]) - - ############################################### - def readSecteur1(self): - addr = self.adresseMesure + (self.adresseMesureSecteur1) * 8 - return self.lireValeurAdresse(addr + 2), self.lireValeurAdresse(addr), self.lireValeurAdresse( - addr + 4), self.lireValeurAdresse(addr + 6) - - def readSecteur2(self): - addr = self.adresseMesure + (self.adresseMesureSecteur2) * 8 - return self.lireValeurAdresse(addr + 2), self.lireValeurAdresse(addr), self.lireValeurAdresse( - addr + 4), self.lireValeurAdresse(addr + 6) - - def readMesureCourant(self, source: int): - if not self.okCharge(source): - raise AutomateException("numero charge pas compris entre 0 et 6") - return self.lireValeur(source, 0) - - def readMesureTension(self, source: int): - if not self.okCharge(source): - raise AutomateException("numero charge pas compris entre 0 et 6") - return self.lireValeur(source, 2) - - def readMesurePactive(self, source: int): - if not self.okCharge(source): - raise AutomateException("numero charge pas compris entre 0 et 6") - return self.lireValeur(source, 4) - - def readMesurePreactive(self, source: int): - if not self.okCharge(source): - raise AutomateException("numero charge pas compris entre 0 et 6") - return self.lireValeur(source, 6) - - def readMesure(self, source): - return self.readMesureTension(source), self.readMesureCourant(source), self.readMesurePactive( - source), self.readMesurePreactive(source) - - def lireValeur(self, source, offset): - - addr = self.adresseMesure + (source) * 8 + offset - return self.lireValeurAdresse(addr) - - def lireValeurAdresse(self, addr): - - modbusclient = ModbusClient(self.ipAdresse, 502) - modbusclient.connect() - data = modbusclient.read_holdingregisters(addr, 2) - modbusclient.close() - res = convert_registers_to_float(data) - - return res[0] - diff --git a/TP2/Armoire6.py b/TP2/Armoire6.py deleted file mode 100644 index bcaee02..0000000 --- a/TP2/Armoire6.py +++ /dev/null @@ -1,157 +0,0 @@ -# -*- coding: utf-8 -*- -""" -Created on Mon Jun 22 16:40:33 2020 - -@author: chevrier6 -""" -from bitManip import * -from easymodbus.modbusClient import ModbusClient -from easymodbus.modbusClient import convert_registers_to_float - -class AutomateException(Exception): - def __init__(self, message): - self.message = message - - - - - -class Armoire6(): - # ici les adresse des mesure commence a ZERO (pas UN comme en java) - - - def __init__(self): - self.nbCharge=7 # de 0 a 6 - self.ipAdresse="100.75.155.116" - self.adresseMesure=0 - self.adresseTOR=32000 - self.adresseMesureSecteur1=7 # attention vraie adresse () - self.adresseMesureSecteur2=8 # attention vraie adresse - - self.debutAdrCharge=0 - self.debutAdrSource=7 - - def okCharge(self,i): - return 0 <= i <= nbCharge-1 - - def resetAll(self): - self.writeTOR(0) - - def resetSource(self): - for i in range(self.nbCharge): - self.setSource1(i) - - def resetCharge(self): - for i in range(self.nbCharge): - self.unsetCharge(i) - - def setCharge(self, charge : int ): - if not self.okCharge(charge): - raise AutomateException("numero charge pas compris entre 0 et 6") - val=self.readTOR() - val=setBit(val,charge+self.debutAdrCharge) - self.writeTOR(val) - - - def unsetCharge(self,charge): - if not self.okCharge(charge): - raise AutomateException("numero charge pas compris entre 0 et 6") - val=self.readTOR() - val=clearBit(val,charge+self.debutAdrCharge) - self.writeTOR(val) - - def toggleCharge(self, charge): - if not self.okCharge(charge): - raise AutomateException("numero charge pas compris entre 0 et 6") - val = self.readTOR() - val = toggleBit(val, charge+self.debutAdrCharge) - self.writeTOR(val) - - def setSource1(self,charge): - if not self.okCharge(charge): - raise AutomateException("numero charge pas compris entre 0 et 6") - val=self.readTOR() - val=clearBit(val,charge+self.debutAdrSource) - self.writeTOR(val) - - def setSource2(self, charge): - if not self.okCharge(charge): - raise AutomateException("numero charge pas compris entre 0 et 6") - val = self.readTOR() - val = setBit(val, charge +self.debutAdrSource) - self.writeTOR(val) - - - - def togglesource(self,charge): - if not self.okCharge(charge): - raise AutomateException("numero charge pas compris entre 0 et 6") - val=self.readTOR() - val=toggleBit(val,charge+self.debutAdrSource) - self.writeTOR(val) - - ################################ - - - def writeTOR(self,val): - modbusclient =ModbusClient(self.ipAdresse,502) - modbusclient.connect() - modbusclient.write_single_register(self.adresseTOR,val) - modbusclient.close() - # some tempo to wait measure to stabilize - from time import sleep - sleep(2.) - - - def readTOR(self): - modbusclient =ModbusClient(self.ipAdresse,502) - modbusclient.connect() - inputRegisters = modbusclient.read_inputregisters(self.adresseTOR, 1) - modbusclient.close() - return (int)(inputRegisters[0]) - -############################################### - def readSecteur1(self): - from time import sleep - addr = self.adresseMesure + (self.adresseMesureSecteur1 ) * 8 - return self.lireValeurAdresse(addr + 2), self.lireValeurAdresse(addr), self.lireValeurAdresse(addr + 4), self.lireValeurAdresse(addr + 6) - def readSecteur2(self): - addr = self.adresseMesure + (self.adresseMesureSecteur2 ) * 8 - return self.lireValeurAdresse(addr+2),self.lireValeurAdresse(addr),self.lireValeurAdresse(addr+4),self.lireValeurAdresse(addr+6) - - def readMesureCourant(self,source :int): - if not self.okCharge(source): - raise AutomateException("numero charge pas compris entre 0 et 6") - return self.lireValeur(source,0 ) - def readMesureTension(self,source :int): - if not self.okCharge(source): - raise AutomateException("numero charge pas compris entre 0 et 6") - return self.lireValeur(source,2 ) - def readMesurePactive(self,source :int): - if not self.okCharge(source): - raise AutomateException("numero charge pas compris entre 0 et 6") - return self.lireValeur(source,4 ) - def readMesurePreactive(self,source :int): - if not self.okCharge(source): - raise AutomateException("numero charge pas compris entre 0 et 6") - return self.lireValeur(source,6 ) - - def readMesure(self,source): - return self.readMesureTension(source),self.readMesureCourant(source),self.readMesurePactive(source),self.readMesurePreactive(source) - - def lireValeur(self,source,offset): - - addr= self.adresseMesure + (source ) *8+offset - return self.lireValeurAdresse(addr) - def lireValeurAdresse(self,addr): - - - modbusclient =ModbusClient(self.ipAdresse,502) - modbusclient.connect() - data=modbusclient.read_holdingregisters(addr,2) - modbusclient.close() - res =convert_registers_to_float(data) - - return res[0] - - \ No newline at end of file diff --git a/TP2/bitManip.py b/TP2/bitManip.py deleted file mode 100644 index 2f8ceb2..0000000 --- a/TP2/bitManip.py +++ /dev/null @@ -1,38 +0,0 @@ -# -*- coding: utf-8 -*- -""" -Created on Mon Jun 22 16:43:58 2020 - -@author: chevrier6 -""" - -###################### -def mask16(v): - "same as setBit(v,0)" - b=1 - for i in range(v): - b*=2 - return b - -# 4 next functions from https://wiki.python.org/moin/BitManipulation -# testBit() returns a nonzero result, 2**offset, if the bit at 'offset' is one. -def testBit(int_type, offset): - mask = 1 << offset - return(int_type & mask) - - # setBit() returns an integer with the bit at 'offset' set to 1. - -def setBit(int_type, offset): - mask = 1 << offset - return(int_type | mask) - - # clearBit() returns an integer with the bit at 'offset' cleared. - -def clearBit(int_type, offset): - mask = ~(1 << offset) - return(int_type & mask) - - # toggleBit() returns an integer with the bit at 'offset' inverted, 0 -> 1 and 1 -> 0. - -def toggleBit(int_type, offset): - mask = 1 << offset - return(int_type ^ mask) \ No newline at end of file diff --git a/TP2/docArmoirePython.md b/TP2/docArmoirePython.md deleted file mode 100644 index 95dcaa3..0000000 --- a/TP2/docArmoirePython.md +++ /dev/null @@ -1,43 +0,0 @@ -# Une armoire c'est quoi ? - -- c'est un appareil électrique commandable à distance -- il dispose de 7 charges différentes (numérotées de 0 à 6) et de deux source d'alimentation -(source1 et source2) - -- chaque charge peut être en marche ou pas et soit sur source 1 soit sur source 2 indépendament des autres -- on peut connaitre des infos sur chaque charges (U,I,P,PR) et sur chaque source (i.e. le cumul des charges en marche sur la source concernée) -# Documentation code python de manipulation des armoires - - -## Prerequis logiciel - -- utilisation de la librairie EasyModbus.py -- utilisation d'un code bitManip.py - -## Code disponible - -### Note -Actuellemnt seul le code pour l'armoire 6 est opérationnel - -### Utilisation - -- charger le fichier correspondant à l'armoire à utiliser (exemple Armoire6.py) et ses dépendances - -**Méthodes** - -* Constructeur *ArmoireX()* où X vaut 6 - -* actions générales - - **resetAll**: remet tout à l'état d'origine - - **resetSource** / **resetCharge**: remet la partie source/charge à l'état d'origine - * actions sur les charges - - **setCharge** / **unsetCharge** / **toggleCharge**(*n°charge*): met sur ON/OFF/état inverse la charge. *N°charge* doit être compris entre 0 et 6 -* Actions sur les sources - - **setSource1** / **setSource2** / **togglesource**(*n°charge*): met sur l'alimentaion 1/l'alimentation 2/inverse la source. *N°charge* doit être compris entre 0 et 6 -* Actions sur les sources - -* lecture de valeurs ( -retourne une liste de valeurs [U,I,PA,PR]) - - **readSecteur1**: mesure pour la source 1 - - **readSecteur2**: mesure pour la source 2 - - **readMesure**(*n°charge*): mesure pour la charge paramètre (compris en 0 et 6) \ No newline at end of file diff --git a/TP2/test5.py b/TP2/test5.py deleted file mode 100644 index 70ef3be..0000000 --- a/TP2/test5.py +++ /dev/null @@ -1,90 +0,0 @@ -# -*- coding: utf-8 -*- -""" -Seule Test est à utiliser - -@author: chevrier6 -""" - -from Armoire5 import * -# -# a=Armoire6() -# a.resetAll() -# i=0 -# a.setCharge(i) -# s=a.readMesure(i) -# print(s) -# -# def chenillard(): -# a=Armoire6() -# for i in range(a.nbCharge): -# a.setCharge(i) -# s=a.readMesure(i) -# print(s) - -def pprint(mesure): - output="U={:.2f} I={:.2f} PA={:.2f} PR={:.2f}" - return output.format(mesure[0],mesure[1],mesure[2],mesure[3]) - -def test(charge): - - a=Armoire5() - a.resetAll() - print("charge ",charge) - a.setCharge(charge) - s=a.readMesure(charge) - print(pprint(s), "\nS1" ,pprint(a.readSecteur1()),"\nS2", pprint(a.readSecteur2()),"\n") - a.setSource2(charge) - s=a.readMesure(charge) - print(pprint(s), "\nS1" ,pprint(a.readSecteur1()),"\nS2", pprint(a.readSecteur2()),"\n") - a.unsetCharge(charge) - -# -# def chenillard2(): -# a=Armoire6() -# a.resetAll() -# for i in range(a.nbCharge): -# print("charge ",i) -# a.setCharge(i) -# s=a.readMesure(i) -# print(s, "S1" ,a.readSecteur1(),"S2", a.readSecteur2()) -# a.setSource2(i) -# s=a.readMesure(i) -# print(s, "S1" ,a.readSecteur1(),"S2", a.readSecteur2()) -# a.unsetCharge(i) -# -# -# def chenillard3(): -# a=Armoire6() -# a.resetAll() -# for charge in range(a.nbCharge): -# print("charge ",charge) -# a.setCharge(charge) -# u,i,pa,pr=a.readMesure(charge) -# u1,i1,pa1,pr1=a.readSecteur1() -# u2,i2,pa2,pr2=a.readSecteur2() -# print((u,i,pa,pr), "S1" ,a.readSecteur1(),"S2", a.readSecteur2()) -# print(u-u1,i-i1,pa-pa1,pr-pr1) -# print(u-u2,i-i2,pa-pa2,pr-pr2) -# a.setSource2(charge) -# u,i,pa,pr=a.readMesure(charge) -# u1,i1,pa1,pr1=a.readSecteur1() -# u2,i2,pa2,pr2=a.readSecteur2() -# print((u,i,pa,pr), "S1" ,a.readSecteur1(),"S2", a.readSecteur2()) -# print(u-u1,i-i1,pa-pa1,pr-pr1) -# print(u-u2,i-i2,pa-pa2,pr-pr2) -# a.unsetCharge(charge) -# -# def chenillard2b(): -# a=Armoire6() -# a.resetAll() -# for i in range(a.nbCharge): -# print("charge ",i) -# a.toggleCharge(i) -# s=a.readMesure(i) -# print(s, "S1" ,a.readSecteur1(),"S2", a.readSecteur2()) -# a.setSource2(i) -# s=a.readMesure(i) -# print(s, "S1" ,a.readSecteur1(),"S2", a.readSecteur2()) -# a.unsetCharge(i) - -#chenillard2b() \ No newline at end of file diff --git a/TP2/test6.py b/TP2/test6.py deleted file mode 100644 index 6473506..0000000 --- a/TP2/test6.py +++ /dev/null @@ -1,90 +0,0 @@ -# -*- coding: utf-8 -*- -""" - - -@author: chevrier6 -""" - -from Armoire6 import * -# -# a=Armoire6() -# a.resetAll() -# i=0 -# a.setCharge(i) -# s=a.readMesure(i) -# print(s) -# -# def chenillard(): -# a=Armoire6() -# for i in range(a.nbCharge): -# a.setCharge(i) -# s=a.readMesure(i) -# print(s) - -def pprint(mesure): - output="U={:.2f} I={:.2f} PA={:.2f} PR={:.2f}" - return output.format(mesure[0],mesure[1],mesure[2],mesure[3]) - -def test(charge): - - a=Armoire6() - a.resetAll() - print("charge ",charge) - a.setCharge(charge) - s=a.readMesure(charge) - print(pprint(s), "\nS1" ,pprint(a.readSecteur1()),"\nS2", pprint(a.readSecteur2()),"\n") - a.setSource2(charge) - s=a.readMesure(charge) - print(pprint(s), "\nS1" ,pprint(a.readSecteur1()),"\nS2", pprint(a.readSecteur2()),"\n") - a.unsetCharge(charge) - -# -# def chenillard2(): -# a=Armoire6() -# a.resetAll() -# for i in range(a.nbCharge): -# print("charge ",i) -# a.setCharge(i) -# s=a.readMesure(i) -# print(s, "S1" ,a.readSecteur1(),"S2", a.readSecteur2()) -# a.setSource2(i) -# s=a.readMesure(i) -# print(s, "S1" ,a.readSecteur1(),"S2", a.readSecteur2()) -# a.unsetCharge(i) -# -# -# def chenillard3(): -# a=Armoire6() -# a.resetAll() -# for charge in range(a.nbCharge): -# print("charge ",charge) -# a.setCharge(charge) -# u,i,pa,pr=a.readMesure(charge) -# u1,i1,pa1,pr1=a.readSecteur1() -# u2,i2,pa2,pr2=a.readSecteur2() -# print((u,i,pa,pr), "S1" ,a.readSecteur1(),"S2", a.readSecteur2()) -# print(u-u1,i-i1,pa-pa1,pr-pr1) -# print(u-u2,i-i2,pa-pa2,pr-pr2) -# a.setSource2(charge) -# u,i,pa,pr=a.readMesure(charge) -# u1,i1,pa1,pr1=a.readSecteur1() -# u2,i2,pa2,pr2=a.readSecteur2() -# print((u,i,pa,pr), "S1" ,a.readSecteur1(),"S2", a.readSecteur2()) -# print(u-u1,i-i1,pa-pa1,pr-pr1) -# print(u-u2,i-i2,pa-pa2,pr-pr2) -# a.unsetCharge(charge) -# -# def chenillard2b(): -# a=Armoire6() -# a.resetAll() -# for i in range(a.nbCharge): -# print("charge ",i) -# a.toggleCharge(i) -# s=a.readMesure(i) -# print(s, "S1" ,a.readSecteur1(),"S2", a.readSecteur2()) -# a.setSource2(i) -# s=a.readMesure(i) -# print(s, "S1" ,a.readSecteur1(),"S2", a.readSecteur2()) -# a.unsetCharge(i) - -#chenillard2b() \ No newline at end of file diff --git a/annuaireFichier.md b/annuaireFichier.md index b84ad16..ce82571 100644 --- a/annuaireFichier.md +++ b/annuaireFichier.md @@ -7,7 +7,7 @@ - exemple du cours (exclusion mutuelle et sa solution avec sémaphore): exclumutPb et exclumutPbSemaphore - exemple de syncrhonisation (pingpong et exJoinAlive) -## Code relatif au TP2 (répertoire TP2) +## Code relatif à l'accès aux armoires (dispositifs physiques) (répertoire TP2) Vous trouverez: - une documentation @@ -17,6 +17,6 @@ et les fichiers suivants (besoin du module easymodbus) - bitManip utilitaire - test5 et test6: code exemple d'utilisation des armoires -## Code relatif au TP3 (répertoire TP3) +## Code relatif au Web services (répertoire TP3) Voir docu.md -- GitLab