日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > C# >内容正文

C#

opc读取ab的plc数据_C#读写 AB PLC 直接通过节点来读写数据 读写 AllenBradley PLC

發布時間:2025/3/15 C# 23 豆豆
生活随笔 收集整理的這篇文章主要介紹了 opc读取ab的plc数据_C#读写 AB PLC 直接通过节点来读写数据 读写 AllenBradley PLC 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

本文將使用一個Github開源的組件庫技術來讀寫AB PLC,使用的是基于以太網的實現,不需要額外的組件,讀取操作只要放到后臺線程就不會卡死線程,本組件支持超級方便的高性能讀寫操作

本類庫絕對是ab最強的通訊庫

github地址:https://github.com/dathlin/HslCommunication

??? ??

???????????????????? 如果喜歡可以star或是fork,還可以打賞支持。打賞請認準源代碼項目。

從NUGET安裝

Install-Package HslCommunication

準備

本文將展示怎樣使用代碼來訪問PLC數據,希望給有需要的人解決一些實際問題。主要對AB PLC的節點數據進行讀寫,您在應用工業生產使用之前,應該應該詳細的測試,以免造成不必要的損失

此處使用到了2個命名空間:

using HslCommunication.Profinet.AllenBradley;

using HslCommunication;

隨便聊聊

當我們一個上位機需要讀取100臺西門子PLC設備(此處只是舉個例子,凡是都是使用Modbus tcp的都是一樣的)的時候,你采用服務器主動去請求100臺設備的機制對性能來說是個極大的考驗,如果開100個線程去輪詢100臺設備,那么性能損失將是非常大的,更不用說再增加設備,如果搭建Modbus tcp服務器,就可以完美的解決性能問題,因為連接的壓力將會平均分攤給每一臺PLC,服務器端只要新增一個時間戳就可以知道客戶端有沒有連接上。

我們在100臺PLC里都增加發送Modbus tcp方法,將數據發送到服務器的ip和端口上去,服務器根據站號來區分設備。這樣就可以搭建一個高性能總站。?本組件支持快速搭建一個高性能的Modbus tcp總站。

關于兩種模式

在PLC端,包括三菱,西門子,歐姆龍,AB以及Modbus Tcp客戶端的訪問器上,都支持兩種模式,短連接模式和長連接模式,現在就來解釋下什么原理。

短連接:每次讀寫都是一個單獨的請求,請求完畢也就關閉了,如果服務器的端口僅僅支持單連接,那么關閉后這個端口可以被其他連接復用,但是在頻繁的網絡請求下,容易發生異常,會有其他的請求不成功,尤其是多線程的情況下。

長連接:創建一個公用的連接通道,所有的讀寫請求都利用這個通道來完成,這樣的話,讀寫性能更快速,即時多線程調用也不會影響,內部有同步機制。如果服務器的端口僅僅支持單連接,那么這個端口就被占用了,比如三菱的端口機制,西門子的Modbus tcp端口機制也是這樣的。以下代碼默認使用長連接,性能更高,還支持多線程同步。

在短連接的模式下,每次請求都是單獨的訪問,所以沒有重連的困擾,在長連接的模式下,如果本次請求失敗了,在下次請求的時候,會自動重新連接服務器,直到請求成功為止。另外,盡量所有的讀寫都對結果的成功進行判斷。

關于日志記錄

不管是三菱的數據訪問類,還是西門子的,還是Modbus tcp訪問類,都有一個LogNet屬性用來記錄日志,該屬性是一個接口類,ILogNet,凡事繼承該接口的都可以用來記錄日志,該日志會在訪問失敗時,尤其是因為網絡的原因導致訪問失敗時會進行日志記錄(如果你為這個?LogNet屬性配置了真實的日志記錄器的話):如果你想使用該記錄日志的功能,請參照如下的博客進行實例化:

訪問測試項目

下面的一個項目是這個組件的訪問測試項目,您可以進行初步的訪問的測試,免去了您寫測試程序的麻煩,三菱的界面和西門子的界面幾乎是一致的。可以同時參考。該項目位于本篇文章開始處的Gitbub源代碼里面的

演示項目,和本項目的信息無關,示例為采集西門子PLC數據

下面演示了具體如何去訪問PLC的數據,我們在訪問完成后,通常需要進行處理,以下的示例項目就演示了后臺從PLC讀取數據后,前臺顯示并推送給所有在線客戶端的功能,客戶端并進行圖形化顯示,具有一定的參考意義,并且推送給網頁前端,項目地址為:

它應該和PLC直接連接并接入局域網,然后把數據推送給客戶端顯示。注意:一個復雜高級的程序就應該把處理邏輯程序和界面程序分開,比如這里的服務器程序實現數據采集,推送,存儲。讓客戶端程序去實現數據的整理,分析,顯示,這樣即使客戶端程序因為BUG奔潰,服務器端仍然可以正常的工作。

初始化訪問PLC對象

如果想使用本組件的數據讀取功能,必須先初始化數據訪問對象,根據實際情況進行數據的填入。 下面僅僅是測試中的數據

private AllenBradleyNet allenBradleyNet = new AllenBradleyNet( "192.168.0.110" );

連接PLC信息

實例化之后應該啟動PLC的連接操作。

OperateResult connect = allenBradleyNet.ConnectServer( );

if (connect.IsSuccess)

{

MessageBox.Show( "連接成功!" );

}

else

{

MessageBox.Show( "連接失敗!" + connect.ToMessageShowString( ) );

}

斷開PLC連接

allenBradleyNet.ConnectClose( );

讀取PLC信息

需要參照設備的節點信息來查看:

需要注意的是,我們在讀取一個節點名稱之前,需要先查看該節點在PLC的數據類型,比如上面圖片里的,B2是 REAL 類型,那么我們就需要使用float讀取,當你的類型選擇錯誤時,有可能會讀取不到正確的信息。

float value = allenBradleyNet.ReadFloat( "B2" ).Content

類型選擇的對應關系如下: bool 類型對應 bool ? ?byte類型 對應 ?byte ? DINT類型代表int等等。

批量讀取PLC信息

將讀取的節點變成一個數組信息傳入進去

public OperateResult Read( string[] address )

結果提取稍微麻煩一點,多個節點的數據拼接結果。例如下面:

OperateResult read = allenBradleyNet.Read( new string[] { "B1", "B2" } );

if (read.IsSuccess)

{

int B1 = allenBradleyNet.ByteTransform.TransInt32( read.Content, 0 );

float B2 = allenBradleyNet.ByteTransform.TransSingle( read.Content, 4 );

}

寫入PLC信息

寫入操作的類型也是要和PLC進行對應的,當類型不正確的時候,是不能寫入操作的。

OperateResult write = allenBradleyNet.Write("B2", 123.456f);

if(write.IsSuccess)

{

// 成功

}

else

{

// 失敗

}

自定義寫入方法:

///

/// 使用指定的類型寫入指定的節點數據

///

/// 節點地址數據

/// 類型代碼,詳細參見上的常用字段

/// 實際的數據值

/// 是否寫入成功

public OperateResult WriteTag( string address, ushort typeCode, byte[] value )

如果你清楚類型代碼及數據內容可以實現更復雜的數據寫入功能。

針對數組的數據讀取:

比如圖片中的 Array 數組,是一個short的數組數據,長度為6,如果想要讀取這6個數據

OperateResult readResult = allenBradleyNet.ReadInt16( "Array", 6 );

當然也支持讀取指定索引的數據

OperateResult readResult = allenBradleyNet.ReadInt16( "Array[1]" );

寫入也是支持的

本方法是組件 5.5.2及之后開始支持,其中,后面的6可以寫成0-6的任意數字。你寫多少,就讀多少長度的數組。讀取的類型也要和實際的匹配,才能完美的讀取。

針對數組的寫入操作:

OperateResult write = allenBradleyNet.Write( "Array", new short[] { 101, 102, 103, 104, 105, 106 } );

結果如下:

更多的操作和細節可以參照DEMO項目和源代碼項目

總結

以上是生活随笔為你收集整理的opc读取ab的plc数据_C#读写 AB PLC 直接通过节点来读写数据 读写 AllenBradley PLC的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 精品人人妻人人澡人人爽牛牛 | 欧美性猛交bbbbb精品 | 欧美顶级少妇做爰hd | 国产精品久久久久久久久久久久久久久 | 国产在线视频一区二区 | 国产精品成人电影在线观看 | 韩国美女被c | 中文字幕亚洲综合 | 九九久久国产 | 免费观看的毛片 | 97黄色片| 天天色天 | 国产精自产拍久久久久久蜜 | 高h奶汁双性受1v1 | 国产丝袜第一页 | 羞羞影院体验区 | 国产白浆在线观看 | 成人在线网| 在线视频亚洲色图 | av爱爱爱 | 性日本xxx | 中国少妇毛片 | 亚洲av综合一区二区 | 日韩视频在线一区二区 | 成人免费视频网站在线观看 | 久久免费看 | 国产麻豆精品久久一二三 | 欧美做受高潮 | 国产人妖视频 | 亚洲a毛片 | www.com色| 天天干夜夜 | 成人精品在线 | 99热这里只有精品1 亚洲人交配视频 | 久久精品aⅴ无码中文字字幕重口 | gai视频在线观看资源 | 色狠狠av老熟女 | 超碰在线免费观看97 | 精品人妻一区二区三区香蕉 | 丁香婷婷一区二区三区 | 无遮挡黄色| www.亚洲色图.com| 国产女人在线观看 | 夜夜高潮夜夜爽国产伦精品 | 精品伦精品一区二区三区视频 | 日韩精品视频观看 | 国产88av| 熟女高潮一区二区三区视频 | 美女脱裤子打屁股 | 久久久久久久久久久久久久久 | 日韩视频在线观看 | 灌篮高手全国大赛电影 | 中文字幕一区电影 | 黄色片播放器 | 亚洲天堂免费视频 | 在线视频欧美亚洲 | 精品一区二区三区免费看 | 国产二级一片内射视频播放 | 激情文学8888| 久久这里| 久久久久婷 | 日本体内she精高潮 男女视频在线免费观看 | 夜夜天天拍拍 | 华丽的外出在线 | av免费视屏 | 日韩 欧美 国产 综合 | 国产97色在线 | 亲吻刺激视频 | 亚洲成人影音 | 精品一区二区欧美 | 国产美女作爱全过程免费视频 | 国产精品乱码一区 | 国产97色在线 | 日韩 | 亚洲欧美高清视频 | 亚洲女人天堂网 | 亚洲97| 一区二区韩国 | 在线观看v片 | 人人澡人人射 | 9l视频自拍九色9l视频成人 | 午夜视频网站 | 国产一级淫片a | 国产欧美大片 | 黄色a级片网站 | jizz俄罗斯 | 欧美俄罗斯乱妇 | 欧洲亚洲视频 | 国产乱淫av麻豆国产 | 在线不卡av | 色老头综合 | 日日摸天天爽天天爽视频 | 国产aⅴ一区二区三区 | 久久国产精品99久久人人澡 | 色狠狠干 | 亚洲一区二区三区视频在线 | 国产成人欧美 | 手机在线精品视频 | 青青视频网站 | 亚洲av无码乱码国产精品久久 |