【问题标题】:Read variables in Twincat 3 continously with the C# API使用 C# API 连续读取 Twincat 3 中的变量
【发布时间】:2020-05-25 14:32:23
【问题描述】:

我想通过 C# 的 ADS 客户端连续读取很多变量(快于 10 Hz)。但是,在文档中,示例只读取了一次变量。

我找到了具有此functionality 的 Twincat-OCX 模块,但它用于 Twincat 2。

Twincat3 在使用 c# 时推荐的方式是什么?

【问题讨论】:

    标签: c# twincat twincat-ads twincat-ads-.net


    【解决方案1】:

    有不同的方法可以做到这一点。最适合我的方法是将通知句柄设置为 PLC 中的切换位(端口 851 TC3),可能是这样的:

    // tic for ADS notification, imod used for cycle adjustment
    
    diCounter := diCounter + 1;
    
    IF (diCounter MOD imod = 0)
    THEN
        bTic := NOT bTic;
    END_IF
    

    通知句柄是用于将数据导入 C# 的一个很好的实时 tic。 如果 TwinCAT 在独立内核上运行,这可以在 10 毫秒周期内正常工作。在 Beckhoff 控制器上,这种与用户模式应用程序的通信稳定到 1 毫秒。至少这是我在确定性实时硬件方面的经验。

    现在通知在 C# 中循环到达,通过此信号,可以使用 ADS sum 命令在一个请求中获取多个变量。这也是强烈建议的,以保持较低的通信开销。 TC3 ADS SUM 命令 .NET 示例:

    https://infosys.beckhoff.de/english.php?content=../content/1033/tc3_adssamples_net/185258507.html&id=8424732030635156090

    【讨论】:

    • 另一种每 x 毫秒接收通知的方法是使用AdsTransMode.Cyclic。然后 PLC 将每隔给定的毫秒发送一次值,即使该值没有改变并且不需要切换位。
    • @Quirzo 与 SumCommand 相比,此方法更节省资源吗?
    • 你的意思是 SumCommand 是一个求和读取命令还是什么意思?如果循环时间非常短,它将使用路由器的一些资源。但另一方面,通知将仅从 PLC 发送,因此无需进行占用资源的轮询。使用 sum 命令时也可以使用循环设置一次添加多个通知。
    • @Quirzo sorrym 是的,我的意思是 SumRead。但是将 SumRead 与循环设置结合使用听起来很棒。谢谢!
    • 对此的一个调整是将您想要读取的所有信息放入一个结构中,这样您就可以在一个命令中读取所有信息(或在更改时收到通知)。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-03-17
    • 1970-01-01
    相关资源
    最近更新 更多