111,090
社区成员




c#类库 s7netplus plc cpu s7-200smart
我读的是库存数量1-280,VW2000-VW2558,地址2位递增,整数。
代码这样写的
var bytes = plcS7.ReadBytes(DataType.DataBlock, 1, 2000, 588);
if (bytes.Count() != 0)
{
var intData = new List<Int16>();
for (var i = 0; i <= 556; i += 2)
{
var data = S7.Net.Types.Int.FromByteArray(bytes.Skip(i).Take(2).ToArray());
intData.Add(data);
}
plcData.Inventory = intData;
_logger.LogCritical("PLC采集库存量点位成功:" + plcData.Inventory.ToString());
}
问题读出来的数据根本不对,难道是因为我读的db区?没读vw区?但是s7netplus里面没有vw区啊?求大神们指点迷境!
貌似s7-200 V区对应的就是DB1,地址或者字节序有问题吧。
你读的没错,转换一下大小端看看
2021-09-28 转自 金玉满堂jjn... 私有
Ⅰ、常用数据类型:位(BOOL)、整数(INT/DINT)、浮点数(Real)
寻址格式
数据长度
(二进制位)
数据类型
取值范围
BOOL(位)
1位
布尔数
真(1);
假(0)
BYTE(字节)
8位
无符号整数
0~255
INT(整数)
16位
有符号整数
-32768~32767
WORD(字)
无符号整数
0~65535
DINT(双整数)
32位
有符号整数
-2147483648~2147483647
DWORD(双字)
无符号整数
0~4294967295
REAL(实数)
32位单精度浮点数
+1.175495E-38 ~+3.402823E+38(正数)
-1.175495E-38 ~-3.402823E+38(负数)
Ⅱ、S7-200 SMART 数据存储区介绍
与实际输入/输出信号相关的输入/输出映象区:
I:数字量输入存储区(DI)
Q:数字量输出存储区(DO)
AI:模拟量输入存储区
AQ:模拟量输出存储区
内部数据存储区:
V:变量存储区,可按位、字节、字或双字来存取V区数据
M:位存储区,可按位、字节、字或双字来存取M区数据
T:定时器存储区,用来时间累计
C:计数器存储区,用于累计其输入端脉冲电平由低到高的次数
HC:高速计数器,独立于CPU的扫描周期对高速计数器进行计数(不受扫描周期影响),高速计数器的当前值是只读值,仅可作为双字来寻址
AC:累加器,可以像存储器一样使用读写器件,可以按位、字节、字或双字访问累加器中的数据
SM:特殊存储器,提供了在CPU和用户程序之间传递信息的一种方法,可以使用这些位来选择和控制CPU的某些特殊功能,可以按位、字节、字或双字访问SM位
L:局部存储区,用于向子例程传递形式参数
S:顺序控制继电器,用于将机器或步骤组织到等效的程序段中,实现控制程序的逻辑分段,可按位、字节、字或双字访问S存储区