ไลบรารีโปรโตคอล Mewtocol ที่ใช้งานง่ายเพื่อเชื่อมต่อกับ Panasonic PLC ผ่าน TCP/Serial
ไลบรารีนี้ไม่ใช่ผลิตภัณฑ์อย่างเป็นทางการของ panasonic และ panasonic ไม่ได้ให้การสนับสนุนทางการเงินหรือข้อจำกัดในรูปแบบใดๆ
ขณะนี้ยังไม่รองรับ FP7
ไลบรารีนี้ได้รับการทดสอบกับ PLC เพียงไม่กี่ตัวเท่านั้น ประเภทอื่นๆ ที่รองรับโปรโตคอล Panasonic Mewtocol อาจใช้งานได้ ใช้โดยยอมรับความเสี่ยงเอง ผู้อื่นอาจปฏิบัติตามความคิดเห็นของชุมชน
ไลบรารีนี้เขียนด้วย netstandard2.0 และควรเข้ากันได้กับสภาพแวดล้อม .NET จำนวนมาก
สำหรับรายการ .NET clrs ที่รองรับทั้งหมด โปรดดูที่หน้านี้
ใช้ 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 ) ;