MewtocolNet
v0.8.1
TCP/シリアル経由でパナソニック PLC と接続するための、使いやすい Mewtocol プロトコル ライブラリ。
️ このライブラリはパナソニックの公式製品ではなく、パナソニックはいかなる形でも金銭的サポートや制限を提供しません。
️ FP7 は現在サポートされていません
このライブラリは少数の PLC でのみテストされており、Panasonic Mewtocol プロトコルをサポートする他の種類の PLC は動作する可能性があります。ご自身の責任で使用してください。他の人もコミュニティからのフィードバックに従って使用する可能性があります
このライブラリはnetstandard2.0で書かれており、多くの .NET 環境と互換性があります。
サポートされている .NET CLR の完全なリストについては、このページを参照してください。
dotnet CLI を使用して実行します。
dotnet add package Mewtocol.NET
パナソニックは自社サイトでプロトコル定義を公開しています。一般的な機能を確認したい場合、または不足している機能を追加/報告したい場合は、このサイトを参照してください。
このライブラリは現時点では機能が完全ではありませんが、重要な機能はすべて提供されています
例の完全なリストを表示するには、ここをクリックしてください。
PLC への接続は次のように簡単です。
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 ) ;
}
}
詳細な手順
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()
をチェーンすることで自動ポーラーをアタッチします 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 ) ;
}
注記!これはレジスタを読み取る唯一のオプションではありません。ここを参照してください
自動プロパティ バインディングに加えて、次のパターンを使用できます。
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 ) ;