C#读写西门子PLC中英文字符串数据的学习笔记

最近由于需要对西门子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

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

总字符数

当前字符数

字符1

字符2

字符3

……..

字符10

10

16#0A

1

16#01

‘A’16#41

 

 

……..

 

字节0

字节1

字节2

字节3

字节4

……..

字节11

 

所以,对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

 

以下是基于HSL库做的一个字符串类型数据读写测试小工具,其中Wstring读写可进行中英文字符串的读写

https://download.csdn.net/download/swmyaopeng/11143873

猜你喜欢

转载自blog.csdn.net/swmyaopeng/article/details/89530850
今日推荐