Golang使用Apache PLC4X連接modbus的示例代碼
什么是Modbus
Modbus是一種串行通信協(xié)議,是Modicon公司于1979年為使用可編程邏輯控制器(PLC)通信而發(fā)表。Modbus是工業(yè)領(lǐng)域通信協(xié)議的業(yè)界標(biāo)準(zhǔn),是工業(yè)電子設(shè)備之間常用的連接方式Modbus就是一個(gè)總線(xiàn)通信協(xié)議,像IIC SPI這種,但是他不依賴(lài)于硬件總線(xiàn)
- Modbus之所以使用廣泛,是有他的優(yōu)點(diǎn)的
- Modbus協(xié)議標(biāo)準(zhǔn)開(kāi)放、公開(kāi)發(fā)表且無(wú)版權(quán)要求
- Modbus協(xié)議支持多種電氣接口,包括RS232、RS485、TCP/IP等,還可以在各種介質(zhì)上傳輸,如雙絞線(xiàn)、光纖、紅外、無(wú)線(xiàn)等
- Modbus協(xié)議消息幀格式簡(jiǎn)單、緊湊、通俗易懂。用戶(hù)理解和使用簡(jiǎn)單,廠商容易開(kāi)發(fā)和集成,方便形成工業(yè)控制網(wǎng)絡(luò)
Golang使用Apache PLC4X連接modbus
Apache PLC4X 是一個(gè)工業(yè)物聯(lián)網(wǎng)通用協(xié)議適配器,PLC4X 是一組庫(kù),用于使用各種協(xié)議與工業(yè)可編程邏輯控制器 (PLC) 進(jìn)行通信,但這些協(xié)議具有共享的 API。
工業(yè)的可編程邏輯控制器(PLC)大多采用大量不兼容的協(xié)議進(jìn)行通信,因此和外界(IT/互聯(lián)網(wǎng))的交互變得很困難。PLC4X 項(xiàng)目致力于提供一組統(tǒng)一的 API,通過(guò)這些 API 實(shí)現(xiàn)能與大多數(shù) PLC 進(jìn)行通信的驅(qū)動(dòng)程序(通過(guò)各種 PLC 的原生通信協(xié)議)。
官方地址:https://plc4x.apache.org/users/getting-started/plc4go.html
golang代碼連接modbus
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" ) //目前 沒(méi)看到有opcua驅(qū)動(dòng) 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() }
到此這篇關(guān)于Golang使用Apache PLC4X連接modbus的示例代碼的文章就介紹到這了,更多相關(guān)Golang連接modbus內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Go?基本數(shù)據(jù)類(lèi)型與字符串相互轉(zhuǎn)換方法小結(jié)
這篇文章主要介紹了Go基本數(shù)據(jù)類(lèi)型與字符串相互轉(zhuǎn)換,將string類(lèi)型轉(zhuǎn)換成基本類(lèi)型時(shí),必須確保string類(lèi)型是有效的,文中補(bǔ)充介紹了Go基本數(shù)據(jù)類(lèi)型和其字符串表示之間轉(zhuǎn)換,結(jié)合實(shí)例代碼給大家講解的非常詳細(xì),需要的朋友可以參考下2024-01-01go單體日志采集zincsearch方案實(shí)現(xiàn)
這篇文章主要為大家介紹了go單體日志采集zincsearch方案實(shí)現(xiàn)示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-07-07go語(yǔ)言實(shí)現(xiàn)mqtt協(xié)議的實(shí)踐
MQTT是一個(gè)基于客戶(hù)端-服務(wù)器的消息發(fā)布/訂閱傳輸協(xié)議。本文主要介紹了go語(yǔ)言實(shí)現(xiàn)mqtt協(xié)議的實(shí)踐,文中通過(guò)示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-09-09Go信號(hào)處理如何優(yōu)雅地關(guān)閉你的應(yīng)用
Go?中的優(yōu)雅關(guān)閉機(jī)制使得在應(yīng)用程序接收到終止信號(hào)時(shí),能夠進(jìn)行平滑的資源清理,通過(guò)使用?context?來(lái)管理?goroutine?的生命周期,結(jié)合?signal?包捕獲系統(tǒng)信號(hào),你可以在?Go?應(yīng)用中實(shí)現(xiàn)一個(gè)健壯且優(yōu)雅的關(guān)閉過(guò)程,對(duì)Go關(guān)閉應(yīng)用相關(guān)操作感興趣的朋友一起看看吧2025-01-01