c#用s7netplus读s7-200smart数据

Bulusi.li 2021-09-28 09:19:30

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区啊?求大神们指点迷境!

...全文
3638 9 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
donjin9 2022-12-08
  • 打赏
  • 举报
回复

貌似s7-200 V区对应的就是DB1,地址或者字节序有问题吧。

一线Jon 2021-09-29
  • 打赏
  • 举报
回复 1

你读的没错,转换一下大小端看看

Bulusi.li 2021-09-29
  • 举报
回复
@一线Jon Array.Reverse(ReadArray) 这样子没用
xuzuning 2021-09-28
  • 打赏
  • 举报
回复
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存储区


Bulusi.li 2021-09-28
  • 举报
回复
@xuzuning DataType就Counter,Timer,Input,Output,Memory,DataBlock。没有v区啊,我该怎么读
- 你觉得呢 2021-09-28
  • 打赏
  • 举报
回复

是否转换数据类型不对?int,byte,float都试试看

Bulusi.li 2021-09-28
  • 举报
回复
@- 你觉得呢 就是16位整数
Bulusi.li 2021-09-28
  • 举报
回复
@- 你觉得呢 取出来的数据是个byte[],我取两个转为int16
- 你觉得呢 2021-09-28
  • 举报
回复
@Bulusi.li https://www.cnblogs.com/dathlin/p/8685855.html 这个可以了解一下

111,090

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • AIGC Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧