Recuperer l'heure d'un PC

Forum traitant des automates industriels de marque Schneider - Telemecanique
Avatar du membre
andala
Créateur de langage
Créateur de langage
Messages : 505
Enregistré le : 19 déc. 2016, 10:24
Localisation : Atlantide

Recuperer l'heure d'un PC

Message par andala »

Bonjour à tous,
Que je vous explique ce que je cherche a faire :
Je souhaite faire en sorte que le PC m’envoie l'heure (qu'il prend en NTP) sur mon automate (un TSX57) mais je veux économiser une carte avec gestion du NTP :D

Je me suis dis : existerait-il pas un logiciel pour faire une com Modbus avec le PLC pour lui envoyer l'heure ?

Qu'en pensez vous ? une idée ?
merci ;)
Une bonne action en entraine toujours une autre
MiGaNuTs
Mi homme - Mi automate
Mi homme - Mi automate
Messages : 1573
Enregistré le : 12 nov. 2015, 21:02
Localisation : 45 - Loiret
Contact :

Re: Recuperer l'heure d'un PC

Message par MiGaNuTs »

Bonjour,

A ma connaissance ça n'existe pas.
Cependant les bibliothèques pour faire du modbus sur PC, ça se trouve facilement dans a peu près tous les langages.
Un p'tit bout de python, de VB ou de Processing avec l'aide de chatGPT il doit y'avoir moyen de faire quelque chose.

J'avoue que l'idée est pertinente, ce genre de mini utilitaire pourrait être vachement utile.
MiGaNuTs
Mi homme - Mi automate
Mi homme - Mi automate
Messages : 1573
Enregistré le : 12 nov. 2015, 21:02
Localisation : 45 - Loiret
Contact :

Re: Recuperer l'heure d'un PC

Message par MiGaNuTs »

Bon, en fait c'est pas aussi simple :)
Je pensait pouvoir le faire en 1/4 d'heure. Ça fait 1h que je suis dessus, j'en suis toujours au point zéro :lol:
python semble quand même la moins mauvaise solution. Avec Processing ça a l'air vraiment pénible a faire.
Avatar du membre
itasoft
Mi homme - Mi automate
Mi homme - Mi automate
Messages : 7805
Enregistré le : 20 oct. 2015, 10:15
Localisation : Lyon
Contact :

Re: Recuperer l'heure d'un PC

Message par itasoft »

Si c'est pour mettre l'automate à l'heure du PC ça se fait sous le PL7-PRO
------------clic zoom------------
01.JPG
Automaticien privé (de tout)
itasoft@free.fr
Avatar du membre
andala
Créateur de langage
Créateur de langage
Messages : 505
Enregistré le : 19 déc. 2016, 10:24
Localisation : Atlantide

Re: Recuperer l'heure d'un PC

Message par andala »

itasoft a écrit : 03 déc. 2024, 05:15 Si c'est pour mettre l'automate à l'heure du PC ça se fait sous le PL7-PRO
------------clic zoom------------
01.JPG
Oui merci ^^
Mais je cherche a le faire sans cliquer sans arrêt sur ça pour que cela soit automatique
Une bonne action en entraine toujours une autre
Avatar du membre
itasoft
Mi homme - Mi automate
Mi homme - Mi automate
Messages : 7805
Enregistré le : 20 oct. 2015, 10:15
Localisation : Lyon
Contact :

Re: Recuperer l'heure d'un PC

Message par itasoft »

ça voudrait dire que le PC serait connecté en permanence à l'automate ?
Automaticien privé (de tout)
itasoft@free.fr
Avatar du membre
andala
Créateur de langage
Créateur de langage
Messages : 505
Enregistré le : 19 déc. 2016, 10:24
Localisation : Atlantide

Re: Recuperer l'heure d'un PC

Message par andala »

itasoft a écrit : 03 déc. 2024, 09:13 ça voudrait dire que le PC serait connecté en permanence à l'automate ?
En effet car il s'agit d'une supervision sous Vijeo Citect
Après peut être que l'on peut faire en sorte que Citect envoi lui même l'info de l'heure.... pas con :o .
je regarde
Une bonne action en entraine toujours une autre
MiGaNuTs
Mi homme - Mi automate
Mi homme - Mi automate
Messages : 1573
Enregistré le : 12 nov. 2015, 21:02
Localisation : 45 - Loiret
Contact :

Re: Recuperer l'heure d'un PC

Message par MiGaNuTs »

Effectivement si t'a une supervision, le plus simple c'est de t'en servir pour aller écrire régulièrement la date et l'heure du PC dans un coin de l'automate.
Ensuite coté automate ça peut te servir a le fois pour mettre a l'heure l'horloge interne, et pour surveiller que la supervision est bien connectée.
Avatar du membre
andala
Créateur de langage
Créateur de langage
Messages : 505
Enregistré le : 19 déc. 2016, 10:24
Localisation : Atlantide

Re: Recuperer l'heure d'un PC

Message par andala »

J'ai fait un bout de programmation python avec de l'aide et j'ai fait ça en python :

Code : Tout sélectionner

import asyncio
from pymodbus.server.async_io import ModbusTcpServer
from pymodbus.datastore import ModbusSequentialDataBlock, ModbusSlaveContext, ModbusServerContext
from pymodbus.device import ModbusDeviceIdentification
import logging
from datetime import datetime
import re

# Récupérer l'heure actuelle
current_time = datetime.now()

# Extraire l'année, le mois, le jour, l'heure et les minutes dans des variables
year = current_time.year
month = current_time.month
day = current_time.day
hour = current_time.hour
minute = current_time.minute
week_number = current_time.isocalendar()[1]  # Numéro de la semaine

# Afficher les variables
print(f"Year: {year}")
print(f"Month: {month}")
print(f"Day: {day}")
print(f"Hour: {hour}")
print(f"Minute: {minute}")
print(f"Week number: {week_number}")

# Configuration du journal
logging.basicConfig(level=logging.INFO)
log = logging.getLogger()

# Vérification de l'adresse IP
def is_valid_ip(ip):
    pattern = r"^(?:[0-9]{1,3}\.){3}[0-9]{1,3}$"
    if re.match(pattern, ip):
        parts = ip.split(".")
        return all(0 <= int(part) <= 255 for part in parts)
    return False

# Vérification du port
def is_valid_port(port):
    return 1 <= port <= 65535

# Vérification de l'ID
def is_valid_id(slave_id):
    return 1 <= slave_id <= 247  # Limites selon la norme Modbus

# Demande de l'adresse IP
def get_ip_address():
    ip_address = input("Entrez l'adresse IP du serveur (ex: 127.0.0.1) : ")
    if not ip_address:  # Si l'utilisateur n'entre rien
        ip_address = "127.0.0.1"  # Valeur par défaut
        print(f"Adresse IP non fournie, utilisation de la valeur par défaut : {ip_address}")
    elif not is_valid_ip(ip_address) or ip_address == "localhost":
        print("Adresse IP invalide. Utilisation de la valeur par défaut : 127.0.0.1")
        ip_address = "127.0.0.1"
    return ip_address

# Demande du port
def get_port():
    port_input = input("Entrez le numéro de port du serveur (entre 1 et 65535, par défaut : 502) : ")
    if not port_input:  # Si l'utilisateur n'entre rien
        port = 502  # Valeur par défaut
        print(f"Port non fourni, utilisation de la valeur par défaut : {port}")
    else:
        try:
            port = int(port_input)
            if not is_valid_port(port):
                print("Numéro de port invalide. Utilisation du port par défaut : 502")
                port = 502
        except ValueError:
            print("Entrée invalide. Utilisation du port par défaut : 502")
            port = 502
    return port

# Demande de l'ID d'esclave
def get_slave_id():
    slave_id_input = input("Entrez le numéro d'ID de l'esclave (entre 1 et 247, par défaut : 1) : ")
    if not slave_id_input:  # Si l'utilisateur n'entre rien
        slave_id = 1  # Valeur par défaut
        print(f"ID non fourni, utilisation de la valeur par défaut : {slave_id}")
    else:
        try:
            slave_id = int(slave_id_input)
            if not is_valid_id(slave_id):
                print("ID invalide. Utilisation de l'ID par défaut : 1")
                slave_id = 1
        except ValueError:
            print("Entrée invalide. Utilisation de l'ID par défaut : 1")
            slave_id = 1
    return slave_id

# Configuration des données pour l'esclave avec les variables d'heure
def configure_server(ip_address, port, slave_id):
    # Créer un tableau avec des valeurs pour chaque registre
    register_values = [
        year,            # Année dans le premier registre
        month,           # Mois dans le deuxième registre
        day,             # Jour dans le troisième registre
        hour,            # Heure dans le quatrième registre
        minute,          # Minute dans le cinquième registre
        week_number,     # Minute dans le sixième registre
    ]
    
    # Compléter les autres registres avec une valeur par défaut (par exemple 0)
    register_values += [0] * (20 - len(register_values))  # Compléter jusqu'à 100 registres

    store = ModbusSlaveContext(
        hr=ModbusSequentialDataBlock(1, register_values)  # Registres holding pour l'esclave
    )

    # Associer l'esclave à l'ID fourni par l'utilisateur
    context = ModbusServerContext(
        slaves={slave_id: store},  # Associe le contexte à l'ID
        single=False
    )

    # Configuration des informations sur l'appareil
    identity = ModbusDeviceIdentification()
    identity.VendorName = "Mon Serveur Modbus"
    identity.ProductCode = "MODBUS"
    identity.VendorUrl = "https://example.com"
    identity.ProductName = "Serveur Modbus TCP"
    identity.ModelName = "Modbus Server"
    identity.MajorMinorRevision = "1.0"

    # Adresse et port du serveur
    address = (ip_address, port)

    return context, identity, address

async def start_server(context, identity, address):
    """Démarre le serveur Modbus."""
    server = ModbusTcpServer(context, identity=identity, address=address)
    log.info(f"Serveur Modbus démarré sur {address[0]}:{address[1]}")
    await server.serve_forever()

def main():
    # Demander les informations de configuration pour le serveur
    ip_address = get_ip_address()
    port = get_port()
    slave_id = get_slave_id()

    # Configurer le serveur avec les informations entrées par l'utilisateur
    context, identity, address = configure_server(ip_address, port, slave_id)

    # Démarrer le serveur Modbus
    asyncio.run(start_server(context, identity, address))

if __name__ == "__main__":
    main()
Des suggestions ?
Une bonne action en entraine toujours une autre
Avatar du membre
Bruce33
Dieu du process
Dieu du process
Messages : 930
Enregistré le : 28 oct. 2015, 06:54
Localisation : Pas-de-Calais

Re: Recuperer l'heure d'un PC

Message par Bruce33 »

Bonjour andala,

Je pense qu'il est préférable d'utiliser la supervision Citect.

Concernant le programme en Python, dis-nous d'abord ce qu'il fait. Si tu ne comprends pas précisément son fonctionnement, ne te lance pas là-dedans.
Il me semble que celui-ci crée un serveur Modbus sur le PC alors que le PC devrait être client.
Répondre