Una biblioteca de protocolos Mewtocol fácil de usar para interactuar con PLC Panasonic a través de TCP/Serial.
️ Esta biblioteca no es un producto oficial de Panasonic ni proporciona soporte financiero ni limitaciones de ningún tipo.
️ Actualmente el 7PM no es compatible
Esta biblioteca solo se probó con unos pocos PLC; es posible que funcionen otros tipos que admitan el protocolo Panasonic Mewtocol. Úselo bajo su propio riesgo, otros podrían seguirlo con comentarios de la comunidad.
Esta biblioteca fue escrita en netstandard2.0 y debería ser compatible con muchos entornos .NET.
Para obtener una lista completa de .NET clrs compatibles, consulte esta página
Utilice la CLI de dotnet y ejecute
dotnet add package Mewtocol.NET
Panasonic ha publicado una definición de protocolo en su sitio. Consulte este sitio si desea ver la funcionalidad general o agregar/informar funciones faltantes.
En este momento, esta biblioteca no tiene todas las funciones completas, pero se proporcionan todas las funciones esenciales.
Para ver una lista completa de ejemplos, haga clic aquí.
Conectarse a un PLC es tan simple como
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 ) ;
}
}
Instrucciones detalladas
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()
después del archivo adjunto del registro 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 ) ;
}
¡Nota! esta no es su única opción para leer registros, consulte aquí
Además del enlace de propiedad automático, puede utilizar estos patrones:
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 ) ;