IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C# Discussion :

Modbus en c#


Sujet :

C#

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    40
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 40
    Points : 52
    Points
    52
    Par défaut Modbus en c#
    Bonjour

    Je souhaite effectuer une communication en c# entre mon pc et une imprimante relié en mode Modbus.
    J'ai la documentation (voir piece jointe) et j'ai trouvé une dll qui semble etre bien structuré à l'adresse http://www.codeproject.com/Tips/16260/Modbus-TCP-class

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
     
        using ModbusTCP;
        using System;
        using System.Collections.Generic;
        using System.Diagnostics;
        using System.IO;
        using System.Net;
        using System.Net.Sockets;
        using System.Text;
        using System.Threading;
        using System.Windows.Forms;
     
        namespace KMP_WT
        {
            static public class CommunicationImprimante
            {
                private static ModbusTCP.Master MBmaster;
                private static ManualResetEvent connectDone = new ManualResetEvent(false);
                private static ManualResetEvent sendDone = new ManualResetEvent(false);
                static public int NumberCommande;
                static internal CFormWT FrmWt;
                static internal string type_marquage;
                //Création de la connexion avec les tetes
                internal const int ListenPortUDP = 10000, ListenPortTCP = 502;
                static internal StringBuilder adresse_ip_string = new StringBuilder();
                static internal string dossierExecution;
                static internal Socket TCP = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
                static internal IPAddress ip_local;
                static internal IPEndPoint ep;
                static internal void Ouvrir_Application(CFormWT frmWt)
                {
                    dossierExecution = Directory.GetCurrentDirectory().Replace("\\", "/");
                    FichierIni.GetPrivateProfileString("General", "Adress", "127.0.0.1", adresse_ip_string, adresse_ip_string.Capacity, dossierExecution + "/Config/Marquage.ini");
                    ip_local = IPAddress.Parse(adresse_ip_string.ToString());
                    FrmWt = frmWt;
                    type_marquage = frmWt.type_marquage;
                    if (type_marquage == "IMAJE" || type_marquage=="DOMINO")
                    {
                        ep = new IPEndPoint(ip_local, ListenPortTCP);
                        MBmaster = new Master(adresse_ip_string.ToString(), ListenPortTCP);
                        MBmaster.OnResponseData += new ModbusTCP.Master.ResponseData(MBmaster_OnResponseData);
                    }
                }
                static public void Envoyer_Commande(string sendedCommande)
                {
                    if (type_marquage == "DOMINO")
                    {
                    Domino_Traitement(sendedCommande);
                }
            }
            private static void Domino_Traitement(string instruction)
            {
                List<byte> commandeEnvoye = new List<byte>();
                List<byte> information = new List<byte>();
                byte[] enteteDomino = new byte[7]{0x00,0x00,0x00,0x00,0x00,0x00,0x00};
                string[] decomposition = instruction.Split(' ');
                information.Add(0x04);
                information.Add(0x00);
                information.Add(0x1E);
                information.Add(0x00);
                information.Add(0x10);
                int octetData = information.Count;
                enteteDomino[4] = (byte)(octetData / 256);
                enteteDomino[5] = (byte)(octetData % 256);
                foreach (byte entete in enteteDomino)
                    commandeEnvoye.Add(entete);
                for (int i = 0; i < information.Count; i++)
                {
                    commandeEnvoye.Add(information[i]);
                }
                MBmaster.WriteSingleRegister(0, 0x30, 0, commandeEnvoye.ToArray());
                Console.WriteLine(commandeEnvoye.ToArray());
            }
     
     
     
            // ------------------------------------------------------------------------
            static private void MBmaster_OnResponseData(ushort ID, byte unit, byte function, byte[] values)
            {
                // ------------------------------------------------------------------------
                // Identify requested data
                foreach (byte test in values)
                    Console.WriteLine(test);
            }
     
            // ------------------------------------------------------------------------
            // Modbus TCP slave exception
            // ------------------------------------------------------------------------
            static private void MBmaster_OnException(ushort id, byte unit, byte function, byte exception)
            {
                string exc = "Modbus says error: ";
                switch (exception)
                {
                    case Master.excIllegalFunction: exc += "Illegal function!"; break;
                    case Master.excIllegalDataAdr: exc += "Illegal data adress!"; break;
                    case Master.excIllegalDataVal: exc += "Illegal data value!"; break;
                    case Master.excSlaveDeviceFailure: exc += "Slave device failure!"; break;
                    case Master.excAck: exc += "Acknoledge!"; break;
                    case Master.excGatePathUnavailable: exc += "Gateway path unavailbale!"; break;
                    case Master.excExceptionTimeout: exc += "Slave timed out!"; break;
                    case Master.excExceptionConnectionLost: exc += "Connection is lost!"; break;
                    case Master.excExceptionNotConnected: exc += "Not connected!"; break;
                }
     
                MessageBox.Show(exc, "Modbus slave exception");
                }
            }
        }
    J'ai deux principaux problemes. La première je n'arrive pas à compendre ce que je dois envoyé. La deuxième la réponse ne marche pas (peut etre dù au premier, je ne sais pas trop)

    Merci d'avance pour votre aide
    Images attachées Images attachées

  2. #2
    Membre chevronné
    Avatar de PixelJuice
    Homme Profil pro
    Ingénieur .NET & Game Designer
    Inscrit en
    Janvier 2014
    Messages
    640
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Ingénieur .NET & Game Designer
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2014
    Messages : 640
    Points : 2 149
    Points
    2 149
    Par défaut
    Bonjour,

    essaye plutôt ce projet la : http://www.codeproject.com/Articles/...tocol-in-C-NET


    Celui ci semble construire directement les trames pour les envoyer au MODBUS.

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    40
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 40
    Points : 52
    Points
    52
    Par défaut
    Merci, je vais regarder ca dans la soirée

Discussions similaires

  1. protocol modbus
    Par greatboy dans le forum Développement
    Réponses: 7
    Dernier message: 21/01/2008, 10h58
  2. [Modbus RTU] Problème d'adresse
    Par virginoue dans le forum Autres langages
    Réponses: 1
    Dernier message: 16/05/2006, 08h33
  3. protocole MODBUS et bibliothèque ?
    Par lucky dans le forum MFC
    Réponses: 4
    Dernier message: 04/03/2005, 11h22
  4. Profibus DB, Modbus ou unitelway?
    Par Arwamour dans le forum Développement
    Réponses: 2
    Dernier message: 03/07/2004, 23h19
  5. Fip, modbus and co...
    Par xave dans le forum Développement
    Réponses: 2
    Dernier message: 24/05/2002, 13h25

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo