使用S7netplus存取西門子PLC字符串數據


本文簡單介紹了使用S7netplus存取String、S7String的方法,PLC的創建、連接等不做介紹。

運行環境:VS2015 Winform(.Net Framework 4.5.2),使用NuGet安裝S7netplus(0.9.0)。

1、String用法
(1) 寫入

plc.Write(dataType, dbNumber, address, val);

調用

WriteBytes(dataType, db, startByteAdr, Serialization.SerializeValue(value))

void WriteBytes(DataType dataType, int db, int startByteAdr, byte[] value);

因此,直接寫入字符串val會導致字節數組長度(即字符串長度)丟失,需要先寫入字符串長度:

plc.Write(dataType, dbNumber, address, val.Length);
plc.Write(dataType, dbNumber, address + 1, val);

(2) 讀取

讀取字符串需要傳入字符串長度,即

plc.Read(dataType, dbNumber, address, VarType.String, varCount);

由上面可知,需要先將字符串長度讀取出來,再讀取字符串,即

var count = (byte) plc.Read(dataType, dbNumber, address, VarType.Byte, 1);
val = (string) plc.Read(dataType, dbNumber, address + 1, VarType.String, count);

2、S7String用法

(1) 寫入
由於默認寫入是String類型,因此需要構建S7String對應的字節數組,然后將數組寫入。

var temp = Encoding.ASCII.GetBytes(val);
var bytes = S7.Net.Types.S7String.ToByteArray(val, temp.Length);
plc.WriteBytes(dataType, dbNumber, address, bytes);

(2) 讀取

某種程度上來說,S7String是對String類型的封裝,因此讀取S7String的時候需要先讀取長度,然后讀取S7String。

var reservedLength = (byte) plc.Read(dataType, dbNumber, address, VarType.Byte, 1);
val = (string) plc.Read(dataType, dbNumber, address, VarType.S7String, reservedLength);

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM