Eine benutzerfreundliche Mewtocol-Protokollbibliothek zur Schnittstelle mit Panasonic-SPS über TCP/Seriell.
️ Diese Bibliothek ist kein offizielles Panasonic-Produkt und Panasonic bietet auch keine finanzielle Unterstützung oder Einschränkungen in irgendeiner Form.
️ FP7 wird derzeit nicht unterstützt
Diese Bibliothek wurde nur mit einigen SPS getestet, andere Typen, die das Panasonic Mewtocol-Protokoll unterstützen, funktionieren möglicherweise. Die Nutzung erfolgt auf eigenes Risiko. Andere folgen möglicherweise mit Community-Feedback
Diese Bibliothek wurde in netstandard2.0 geschrieben und sollte mit vielen .NET-Umgebungen kompatibel sein.
Eine vollständige Liste der unterstützten .NET-CLRS finden Sie auf dieser Seite
Verwenden Sie die Dotnet-CLI und führen Sie sie aus
dotnet add package Mewtocol.NET
Panasonic hat auf seiner Website eine Protokolldefinition veröffentlicht. Besuchen Sie diese Website, wenn Sie die allgemeine Funktionalität sehen oder fehlende Funktionen hinzufügen/melden möchten.
Der Funktionsumfang dieser Bibliothek ist derzeit noch nicht vollständig, es werden jedoch alle wesentlichen Funktionen bereitgestellt
Um eine vollständige Liste der Beispiele anzuzeigen, klicken Sie hier.
Der Anschluss an eine SPS ist so einfach wie
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 ) ;
}
}
Detaillierte Anleitung
RegisterCollection
erbt 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()
nach dem Registeranhang verketten 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 ) ;
}
Notiz! Dies ist nicht Ihre einzige Möglichkeit, Register zu lesen, siehe hier
Zusätzlich zur automatischen Eigenschaftsbindung können Sie diese Muster verwenden:
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 ) ;