1. 程式人生 > >關於HslCommunication組件的雙模式客戶端的說明,此說明適用於所有的派生類客戶端,包括三菱,西門子,歐姆龍,modbustcp,機器人,simplifyNet客戶端等等

關於HslCommunication組件的雙模式客戶端的說明,此說明適用於所有的派生類客戶端,包括三菱,西門子,歐姆龍,modbustcp,機器人,simplifyNet客戶端等等

idt .cn 適合 數據交互 必須 AR tar 安裝 不用

前言


本文主要是答疑文章,針對廣大網友非常頻繁的提問而總結的問題

nuget地址:https://www.nuget.org/packages/HslCommunication/ 技術分享圖片 技術分享圖片

github地址:https://github.com/dathlin/HslCommunication 技術分享圖片 技術分享圖片 如果喜歡可以star或是fork,還可以打賞支持。

在Visual Studio 中的NuGet管理器中可以下載安裝,也可以直接在NuGet控制臺輸入下面的指令安裝:

Install-Package HslCommunication

NuGet安裝教程 http://www.cnblogs.com/dathlin/p/7705014.html

技術支持QQ群:592132877 (組件的版本更新細節也將第一時間在群裏發布)組件API地址:http://www.cnblogs.com/dathlin/p/7703805.html

最簡單的使用-短連接


在使用讀寫數據功能之前,自然是要實例化對象的,然後指定IP地址和端口號的,比如西門子,不需要指定端口好像也能訪問,因為內部初始化默認值102了。還有歐姆龍的連接還要指定一些其他的參數信息,所有的客戶端訪問類只要實例化並指定了相關的參數後,可以理解進行讀寫數據了,下面隨便舉幾個例子:

三菱的

MelsecMcNet melsec_net = new MelsecMcNet( "192.168.0.188",6000 );

// 然後就可以直接調用了
short value = melsec_net.ReadInt16("D1000").Content;

西門子的

SiemensS7Net siemensTcpNet  = new SiemensS7Net( SiemensPLCS.S1200, "192.168.0.100" );

// 然後就是直接調用了
short value = siemensTcpNet.ReadInt16("M100").Content;

歐姆龍的

OmronFinsNet omronFinsNet =  new OmronFinsNet( "192.168.0.100",6000 );

// 然後就是直接調用了
short value = omronFinsNet.ReadInt16("D100").Content;

Modbus Tcp的

ModbusTcpNet busTcpClient = new ModbusTcpNet( "192.168.0.100", 502, 0x01);

// 然後就可以直接調用了
short value = busTcpClient.ReadInt16("100").Content;

SimplifyNet的,沒有指定令牌的情況下

NetSimplifyClient simplifyClient = new NetSimplifyClient( "192.168.0.100",6000 );

// 然後就可以直接調用了
string read = simplifyClient.ReadFromServer( 1, "test")

等等,其他的數據訪問派生類都是支持這種模式的。這種是短連接的機制,主要的使用邏輯如下:

技術分享圖片

也就是說,每次數據請求的時候都要重新連接服務器,然後才開始真正的數據請求,然後再關閉連接。很顯然,網絡的連接和關閉都是消耗資源的,但是這麽做有個好處,沒有重新連接的困擾,每次都是新的服務器請求,只要讀取失敗了,就可以認為是網絡已經掉線了,其他的也沒有什麽可以說的了,接下來看看比較復雜的長連接。

高效數據交互-長連接


為了解決上述的短連接的弊端。當然,如果你對訪問頻率沒有要求,基本就是每秒一次,網絡又不是很穩定的情況下,還是挺適合短連接的,如果對讀寫的速度要求很高,網絡又比較好的情況下,無疑是不適合短連接的。怎麽使用長連接呢,我們還是舉一些例子

三菱的

MelsecMcNet melsec_net = new MelsecMcNet( "192.168.0.188",6000 );

melsec_net.ConnectServer(); // 然後之後調用起來會非常的快 short value = melsec_net.ReadInt16("D1000").Content;

西門子的

SiemensS7Net siemensTcpNet  = new SiemensS7Net( SiemensPLCS.S1200, "192.168.0.100" );

siemensTcpNet.ConnectServer(); // 然後之後調用起來會非常的快 short value = siemensTcpNet.ReadInt16("M100").Content;

歐姆龍的

OmronFinsNet omronFinsNet =  new OmronFinsNet( "192.168.0.100",6000 );

omronFinsNet.ConnectServer(); // 然後之後調用起來會非常的快 short value = omronFinsNet.ReadInt16("D100").Content;

Modbus Tcp的

ModbusTcpNet busTcpClient = new ModbusTcpNet( "192.168.0.100", 502, 0x01);

busTcpClient.ConnectServer(); // 然後之後調用起來會非常的快 short value = busTcpClient.ReadInt16("100").Content;

SimplifyNet的,沒有指定令牌的情況下

NetSimplifyClient simplifyClient = new NetSimplifyClient( "192.168.0.100",6000 );

simplifyClient.ConnectServer(); // 然後之後調用起來會非常的快 string read = simplifyClient.ReadFromServer( 1, "test")

等等,如果想要知道是否連接成功的話就參照下面的代碼

OperateResult connect = client.ConnectServer();
if(connect.IsSuccess)
{
   MessageBox.Show("連接成功");
}
else
{
   MessageBox.Show("連接失敗");
}

然後講講這個程序的背後的思路,比短連接復雜一些

技術分享圖片

對調用者來說,其實都是循環的調用就可以了,正常情況下和短連接的調用方法都是一致的,問題就是出現在了我本來好好的數據請求中,突然網絡不行了,然後我下一次讀取失敗了,這時候,不用著急,繼續循環讀取就可以了,內部有邏輯,如果上次讀取的時候發生了網絡故障,通常因為斷線,對方強制關閉,導致的。那麽在下次讀取的時候,會自動先去連接服務器,如果成功了,那麽這次的數據交互自然也就成功了,如果連接失敗了,那麽在下下次讀取的時候又會重連,直到成功為止。

延遲啟動長連接


上面的長連接的模式,還有個小小的瑕疵,我在切換長連接時必須要連接服務器,但是我的軟件可能並不是立馬進行讀取的,可能過很久之後才開始讀取數據,所以本組件也支持手動設置長連接,直到第一次讀取數據的時候才開始連接服務器,後面的操作就是和上面的一致了。整個邏輯就是這個樣子的

技術分享圖片

原理就是調用一個方法,設置為長連接模式,等待真正進行數據交互的時候,才真的連接到服務器進行讀取。

異形模式


由於PLC永遠不會主動連接的能力,所以異形模式只適用於Modbus客戶端,因為Modbus裏有支持主動連接的服務器,具體參照

http://www.cnblogs.com/dathlin/p/8934266.html

關於HslCommunication組件的雙模式客戶端的說明,此說明適用於所有的派生類客戶端,包括三菱,西門子,歐姆龍,modbustcp,機器人,simplifyNet客戶端等等