我又来了一个新问题;这次关于PLC。
我首先说我是PLC的新手,直到几个月前我才见过其中一个。 我被要求编写一个程序,从Delphi读取PLC西门子S7-300的一些数据,以便将它们存档在SQL Server数据库中。我正在使用“libnodave”库。
该计划非常简单。我必须验证一下,当它打开时,我必须从PLC读取数据并将该位置位。我已经告诉过库我可以读写没有问题,但是我必须读取的数据存储在一组字节(大约60个字节)中,所以我要读取一些字节,跳过其他字节并读取其他字节。此外,我必须测试的位在这组字节的末尾。
所以我读了整组字节,我将数据红色放在一组变量中,然后测试该位,如果打开,我将数据存储到数据库中。 为了跳过我不必阅读的字节,我使用这种语句:
for i := 1 to 14 do
daveGetU8(dc);
for i := 1 to 6 do
daveGetU16(dc);
我的问题是这些:
我这样说是因为我在互联网上发现读取操作需要一些时间,因此最好能够使最小读数成为可能。
性爱
答案 0 :(得分:1)
与PLC通信涉及一些开销。
您发送请求,一段时间后您会收到回复。 通常,通信是通过带宽有限的串行线路进行的。
时间安排包括:
很难对你的问题给出明确的答案,因为我们不知道时机有多重要。
无论如何,轮询标志字节似乎只是合理的方式。
设置标志后,在一个命令中读取整个块,然后清除该标志。 以小部分读取数据以避免间隙,可能比一次读取整个块更耗时。
你可以自己做数学,因为你知道规格。
实施例: 可以说波特率是9600波特。这意味着每毫秒大约1个字节的传输时间。要读取的命令大约10个字节长,块响应大约70个字节(假设协议是二进制的)。 PLC延迟时间约为50 ms。这增加了130毫秒,而读取标志只增加了大约70毫秒。
只有您可以说70 ms的额外轮询时间是否可以接受。
编辑:在评论中声明通信是在100+ MBit / s线路上通过以太网进行的。在这种情况下,我建议在一个命令中读取所有数据并在PC中处理它。时间与这种带宽无关。