【问题标题】:PLC S7-1500 SQL-Connection - received data shifted by 1 byte --why?PLC S7-1500 SQL-Connection - 接收到的数据移动了 1 个字节——为什么?
【发布时间】:2022-02-03 23:07:56
【问题描述】:

我已经成功地将 S7 1500 PLC 与 SQL-Server 结合使用一段时间了。 我设置了这里提到的所有内容:S7SQL-Guide-Stackoverflow 今天我尝试在我的 SQL 查询中添加第二个参数。所以我做了这样的事情:

select Number1,Number2 from MYTABLE WHERE Apple = red and Sky = blue

S7 发送电报,SQL-Server 回复。到目前为止一切顺利。

我根据我的 wireshark 记录设置了 TokenColumnMetaData 的大小, 编译并将更新发送到我的 PLC。 现在是我不明白的部分:

我希望收到值“12345” 所以我再次使用wireshark来看看我应该期待什么:

所以我得到的是:39 30 00 00,即 12345,只是字节被颠倒了——到目前为止没问题,但是当我在 S7 端检查时,我看到了这个:

我的输入移动了 1 个字节。 我该如何解决这个问题? 不幸的是,我对西门子为此应用程序提供的代码没有更深入的了解。

编辑:

typeUseCaseSpecificTokenrow 的屏幕截图

【问题讨论】:

  • 在添加Number2 bigint 列后是否调整了typeUseCaseSpecificTokenRow 结构?似乎它仍然期待int(1 个长度字节+ 4 个数据字节)的行,而不是intbigint(2 个长度字节+ 12 个数据字节)的行。
  • 我试过了,但我的问题没有积极的结果。
  • 您能否Edit 您的问题包括“PLC 数据类型”中typeUseCaseSpecificTokenRow 结构的屏幕截图?根据您的 Wireshark 捕获,结果中应该只有一行。从d1 ROW 标记008D 开始是int 值,长度为04 和数据39 30 00 00 (1234),然后是bigint 值,长度为08 和数据47 94 03 00 00 00 00 00 (60049160)。不过,tokenRows 数组数据似乎并不同意这一点,因为它只显示了它认为是 int 的值。

标签: sql sql-server plc siemens tia-portal


【解决方案1】:

当数据类型包含奇数字节时,有时会发生奇怪的内存问题。

Siemens 从偶数内存地址开始每个元素。因此,如果Length 位于地址 0,Data 位于 2-5,则地址 1 可能会获取用于数据的第一个字节

Address Data Element
00 04 Length 0
01 39
02 30 Data 0, byte 0
03 00 Data 0, byte 1
04 00 Data 0, byte 2
05 08 Data 0, byte 3
06 47 Length 1
07 94
08 03 Data 1, byte 0
09 00 Data 1, byte 1
10 00 Data 1, byte 2
11 00 Data 1, byte 3
12 00 Length 2
13 00
14 FD Data 2, byte 0
15 10 Data 2, byte 1
16 00 Data 2, byte 2
17 C1 Data 2, byte 3

【讨论】:

  • 有解决办法吗?目前我以某种方式调整了所有内容,我可以访问我真正需要的字节(其他字节现在在 siemens 端无法访问)但这更像是一种解决方法而不是解决方案。
  • 一种选择是将所有数据发送到一个字节数组,然后编写一个 FB 以将该数据移动到您的用户数据类型的标签中。这确实意味着您将信息存储了两次。
猜你喜欢
  • 2020-10-05
  • 2016-06-13
  • 2019-06-18
  • 1970-01-01
  • 1970-01-01
  • 2015-12-13
  • 2011-10-12
  • 2021-12-28
  • 2019-12-14
相关资源
最近更新 更多