Простая в использовании библиотека протоколов Mewtocol для взаимодействия с ПЛК Panasonic через TCP/Serial.
️ Эта библиотека не является официальным продуктом Panasonic и не предоставляет финансовой поддержки или ограничений в какой-либо форме.
️ FP7 в настоящее время не поддерживается.
Эта библиотека была протестирована только с несколькими ПЛК, другие типы, поддерживающие протокол Panasonic Mewtocol, могут работать. Используйте на свой страх и риск, другие могут последовать вашему примеру с отзывами сообщества.
Эта библиотека написана на netstandard2.0 и должна быть совместима со многими средами .NET.
Полный список поддерживаемых .NET clr см. на этой странице.
Используйте CLI dotnet и запустите
dotnet add package Mewtocol.NET
Panasonic опубликовала определение протокола на своем сайте. Посетите этот сайт, если вы хотите ознакомиться с общими функциями или добавить/сообщить об отсутствующих функциях.
В настоящее время эта библиотека не является полной, но все основные функции предоставляются.
Чтобы просмотреть полный список примеров, нажмите здесь.
Подключиться к ПЛК так же просто, как
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 ) ;