C#读取西门子string类型方法

 1 var siemensTcpNet = new SiemensS7Net(SiemensPLCS.S1500, "127.0.0.1")
 2             {
 3                 ConnectTimeOut = 5000,
 4                 Port = 102
 5             };
 6 OperateResult connect = siemensTcpNet.ConnectServer();
 7             if (connect.IsSuccess)
 8             {
 9               byte[] data = siemensTcpNet.Read("DB105.12", 11).Content;
10                string result=GetPlcDataString(data);
11                MessageBox.Show("读到的结果是:"+result);
12             }
13 
14 private string GetPlcDataString(byte[] dataByte)
15         {
16             string result = string.Empty;
17             byte[] buffer = new byte[1024];
18             for (int i = 2; i < dataByte.Length; i++)
19             {
20                 buffer[i - 2] = dataByte[i];
21             }
22             result = Encoding.ASCII.GetString(buffer);
23             return result;
24         }

对西门子PLC进行字符串类型数据的读写,才专门了解了一下西门子PLC字符串类型的数据的使用及存储形式。在PLC中:

一、String数据类型包含总字符数和当前字符数。 String 类型提供了多达 256个字节,用于在字符串中存储最大总字符数(1 个字节)、当前字符数(1个字节)以及最多 254 个字节。 String 数据类型中的每个字节都可以是从 16#00 到16#FF 的任意值。

由此在PLC中定义一个String类型变量(以地址DB1.00为例)

注:PLC中对变量取消DB块优化选项可看到对应的地址偏移量

1.定义了string类型变量a,默认最大长度254,赋初始值为“A”

总字符数

当前字符数

字符1

字符2

字符3

……..

字符254

254

16#FE

1

16#01

‘A’16#41

   

……..

 

字节0

字节1

字节2

字节3

字节4

……..

字节255

 

所以,对PLC中字符串变量进行读写操作时,前两个字节(关于长度)就显得尤为重要,实际上写入字符串类型的数据就是通过向相应地址写入字节数组。

比如入向a[10]中写入“”ABC“”就是向DB0.00开始写入

0x0A,0x04,0x41,0x42,0x43(其中41,42,43对应的是ABC的ASCII码)

这样a[10]中,监视值显示为‘ABC’

总字符数

当前字符数

字符1

字符2

字符3

……..

字符10

10

16#0A

3

16#03

‘A’16#41

‘B’16#42

‘C’16#43

……..

 

字节0

字节1

字节2

字节3

字节4

……..

字节11

 

读的时候,就从字节2开始将3个字节长度再转码就得到实际的字符串值了

以上是对字符串string类型的读写操作。

二、在PLC中还有一种 宽字符串类型:WString 数据类型支持单字(双字节)值的较长字符串。
第一个字包含最大总字符数;下一个字包含总字符数,接下来的字符串可包含多达 65534个字。 WString 数据类型中的每个字都可以是从 16#0000 到16#FFFF 的任意值。

 

 与String类型形式相似,不过要注意这里是一个字符占一个字的存储空间(即两个字节)这里的A对应的就是16#0041

那么中文字符也是一个字符占一个字存储,比如“你”的Unicode编码16#4F60对应的写进去,注意前两个字(即4个字节是长度信息)也要对应正确,PLC中的监视值才会显示中文字符‘你’。

a[10],数据类型选择Wstring

总字符数

当前字符数

字符1

字符2

字符3

……..

字符10

10

16#000A

3

16#0003

‘你’16#4F60

‘好’16#597D

‘吗’16#5417

……..

 

字0

字1

字2

字3

字4

……..

字11

 

posted @ 2022-09-16 22:26  yun5  阅读(2616)  评论(0)    收藏  举报
Title