MewtocolNet
v0.8.1
TCP/Serial을 통해 Panasonic PLC와 인터페이스하기 위한 사용하기 쉬운 Mewtocol 프로토콜 라이브러리입니다.
️ 이 라이브러리는 공식 panasonic 제품이 아니며 panasonic은 어떤 형태로든 재정적 지원이나 제한을 제공하지 않습니다.
️ FP7은 현재 지원되지 않습니다.
이 라이브러리는 소수의 PLC로만 테스트되었으며 Panasonic Mewtocol 프로토콜을 지원하는 다른 유형도 작동할 수 있습니다. 사용에 따른 책임은 사용자 본인에게 있습니다. 다른 사용자가 커뮤니티 피드백을 따를 수도 있습니다.
이 라이브러리는 netstandard2.0 으로 작성되었으며 다양한 .NET 환경과 호환됩니다.
지원되는 .NET clr의 전체 목록은 이 페이지를 참조하세요.
dotnet CLI를 사용하여 실행
dotnet add package Mewtocol.NET
Panasonic은 해당 사이트에 프로토콜 정의를 게시했습니다. 일반적인 기능을 보거나 누락된 기능을 추가/신고하려면 이 사이트를 참조하세요.
이 라이브러리는 현재 기능이 완전하지 않지만 모든 필수 기능이 제공됩니다.
전체 예시 목록을 보려면 여기를 클릭하세요.
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 ) ;