Apache PLC4X 是一个工业物联网通用协议适配器,PLC4X 是一组库,用于使用各种协议与工业可编程逻辑控制器 (PLC) 进行通信,但这些协议具有共享的 API。
工业的可编程逻辑控制器(PLC)大多采用大量不兼容的协议进行通信,因此和外界(IT/互联网)的交互变得很困难。PLC4X 项目致力于提供一组统一的 API,通过这些 API 实现能与大多数 PLC 进行通信的驱动程序(通过各种 PLC 的原生通信协议)。
官方地址:
https://plc4x.apache.org/users/getting-started/plc4go.html
package main
import (
"fmt"
"github.com/apache/plc4x/plc4go/pkg/plc4go"
"github.com/apache/plc4x/plc4go/pkg/plc4go/drivers"
"github.com/apache/plc4x/plc4go/pkg/plc4go/transports"
)
//目前 没看到有opcua驱动
func main() {
// Create a new instance of the PlcDriverManager
driverManager := plc4go.NewPlcDriverManager()
// Register the Transports
transports.RegisterTcpTransport(driverManager)
transports.RegisterUdpTransport(driverManager)
// Register the Drivers
drivers.RegisterKnxDriver(driverManager)
drivers.RegisterModbusDriver(driverManager)
// Get a connection to a remote PLC
connectionRequestChanel := driverManager.GetConnection("modbus://192.168.23.30?unit-identifier=1")
// Wait for the driver to connect (or not)
connectionResult := <-connectionRequestChanel
// Check if something went wrong
if connectionResult.Err != nil {
fmt.Printf("Error connecting to PLC: %s", connectionResult.Err.Error())
return
}
// If all was ok, get the connection instance
connection := connectionResult.Connection
// Make sure the connection is closed at the end
defer connection.Close()
}