Une bibliothèque de protocoles Mewtocol facile à utiliser pour s'interfacer avec les automates Panasonic via TCP/Série.
️ Cette bibliothèque n'est pas un produit officiel de Panasonic et Panasonic ne fournit pas de soutien financier ni de limitations sous quelque forme que ce soit.
️ FP7 n'est actuellement pas pris en charge
Cette bibliothèque n'a été testée qu'avec quelques automates, d'autres types prenant en charge le protocole Panasonic Mewtocol pourraient fonctionner. Utilisez à vos propres risques, d'autres pourraient suivre avec les commentaires de la communauté
Cette bibliothèque a été écrite en netstandard2.0 et devrait être compatible avec de nombreux environnements .NET.
Pour une liste complète des clrs .NET pris en charge, consultez cette page
Utilisez la CLI dotnet et exécutez
dotnet add package Mewtocol.NET
Panasonic a publié une définition de protocole sur son site. Reportez-vous à ce site si vous souhaitez voir les fonctionnalités générales ou ajouter/signaler des fonctionnalités manquantes.
Cette bibliothèque n'est pas encore complète, mais toutes les fonctionnalités essentielles sont fournies
Pour voir une liste complète d’exemples, cliquez ici.
La connexion à un automate est aussi simple que
using MewtocolNet ;
using ( var plc = Mewtocol . Ethernet ( "192.168.178.55" ) . Build ( ) ) {
await plc . ConnectAsync ( ) ;
if ( ! plc . IsConnected ) {
Console . WriteLine ( "Failed to connect to the plc..." ) ;
} else {
Console . WriteLine ( plc . PlcInfo ) ;
}
}
Instructions détaillées
RegisterCollection
using MewtocolNet ;
using MewtocolNet . RegisterAttributes ;
public class TestRegisters : RegisterCollection {
//corresponds to a R100 boolean register in the PLC
[ Register ( "R100" ) ]
public bool TestBool1 { get ; private set ; }
//corresponds to a XD input of the PLC
[ Register ( "XD" ) ]
public bool TestBoolInputXD { get ; private set ; }
//corresponds to a DDT7012 - DDT7013 as a 32bit time value that gets parsed as a timespan (TIME)
//the smallest value to communicate to the PLC is 10ms
[ Register ( "DDT7012" ) ]
public TimeSpan TestTime { get ; private set ; }
//corresponds to a DT1101 - DT1104 string register in the PLC with (STRING[4])
[ Register ( "DT1101" , "STRING[4]" ) ]
public string TestString1 { get ; private set ; }
}
.WithPoller()
après la pièce jointe du registre TestRegisters registers = null ;
//setting up a new PLC serial interface and tell it to use the register collection
var plc = Mewtocol . Serial ( "COM4" , BaudRate . _19200 )
. WithPoller ( )
. WithRegisterCollections ( c => {
registers = c . AddCollection < TestRegisters > ( ) ;
// or use
// c.AddCollection(new TestRegisters());
// if you want to pass data to a constructor
} )
. Build ( ) ;
//connect to it
await plc . ConnectAsync ( async ( ) => {
//restart the plc program during the connection process
await plc . RestartProgramAsync ( ) ;
} ) ;
//wait for the first data cycle of the poller module
//otherwise the property value might still be unset or null
await App . ViewModel . Plc . AwaitFirstDataCycleAsync ( ) ;
if ( App . ViewModel . Plc . IsConnected ) {
Console . WriteLine ( registers . TestBool1 ) ;
}
Note! ce n'est pas votre seule option pour lire les registres, voir ici
En plus de la liaison de propriété automatique, vous pouvez utiliser ces modèles :
await plc . Register . Struct < short > ( "DT100" ) . WriteAsync ( 100 ) ;
var value = await plc . Register . Struct < short > ( "DT100" ) . ReadAsync ( ) ;
IRegister < bool > outputContactReference ;
var plc = Mewtocol . Ethernet ( "127.0.0.1" )
. WithRegisters ( b => {
b . Bool ( "Y4" ) . Build ( out outputContactReference ) ;
} )
. Build ( ) ;
await plc . ConnectAsync ( ) ;
await outputContactReference . WriteAsync ( true ) ;