问题标签 [twincat-ads]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c# - 如何从 TwinCat 读取包含结构数组的结构到 C#
使用 TwinCAT 3 ADS.Net 从 PLC 读取,我试图读取包含结构数组的结构,但 ReadAny 命令因“无法编组类型”异常而崩溃。
不过,直接读取结构数组可以正常工作。
ReadAny 方法的头部注释说:“如果要读取的对象的 Type 是数组类型,则必须在参数 args 中指定每个维度的元素数。”
但是对于包含结构数组的结构,args 应该是什么?(没有 'args' 它也会失败。)
我目前使用 .NET 4.7、VS 2013。
有选择吗?
twincat-ads - 我可以查询变量和类型的列表吗
我可以使用 twincat-ads 向 Beckhoff PLC 查询 ADS 上公开的变量(及其类型)吗?
ads - 无自动化接口的 TwinCAT 3.0 广播搜索
有没有办法使用通用的 TwinCAT.Ads.* 命名空间执行广播搜索?为此使用自动化系统似乎非常过分,更不用说初始化 EnvDTE、生成解决方案并最终能够进行搜索需要将近一分钟的时间。
即使只是找到一种方法来获取当前配置的路由列表也可能已经足够了。
系统托盘中的 TwinCat 3 服务似乎能够在没有这些额外包袱的情况下做到这一点,所以我希望有一些公共接口。它将具有不需要引用 Visual Studio SDK 的额外好处。
twincat - 如何以编程方式在 Twincat 中添加 ADS 路由
如何以编程方式添加广告路由?
我只能通过 TcAmsRemoteMgr.exe 添加路由。我只能找到的代码是https://github.com/nikvoronin/AdsRemote。
但是,它似乎不起作用。
c# - 自动重新创建 PollValuesPLC 连接丢失或 PLC 程序上传后
我正在尝试编写 C# 应用程序,当应用程序与 PLC 失去连接或将下载新版本的 PLC 程序时,ADS 客户端将自动重新连接/更新读取/写入值和订阅。
我正在使用来自 NuGet 的TwinCAT.Ads.Reactive v4.4.0库。
我的程序流程是:
连接ADS服务器(连接成功)=>
- 使用ValueSymbolExtensions.WhenValueChanged创建反应式通知
创建反应循环写入值ValueSymbolExtensions.WriteValues
- 3[a] 创建响应式循环轮询值AnyTypeExtensions.PollValues.T
- 3[b] 我也尝试过 ValueSymbolExtensions.PollValues,这在 Beckhoff 网站上尚未记录
到目前为止,我发现即使我拔下以太网电缆或将新程序下载到 PLC,1. 和 2. 也能正常工作 -> WriteValues() 和 WhenValueChanged() 在内部自我更新
代码:
我每隔一秒读取一次PollValues()自定义数据结构。在正常运行期间,这工作正常,但是在我更改 PLC 程序并将更改下载到 PLC 或连接丢失(拔下以太网电缆)后,此订阅在内部失败,并且不会像上面的那样恢复。
ConnectionStateChanged
此外,仅当我在广告客户端上调用 Connect()/Disconnect() 时才会触发连接状态更改事件,而不是在连接问题时触发。知道如何找出连接问题吗?
matlab - TwinCAT3 - 使用 Matlab 从 ADS 数据流读取时时间戳的错误值
我正在尝试从 TwinCAT3 项目中读取 ADS 数据流。
每当 CycleCount(来自 SPS)更改其值时,我编写的函数应该读取数据流 - 因此 CycleCount 是回调函数的触发器,并且每毫秒检查一次更改。
要读取的数据流由一个结构组成,该结构包含两个值“nCycleCount”(DWORD-4Bytes)和“TStamp”(ULINT-8Bytes)。因此,整个流包含 12 个字节的数据。
TwinCAT 中的一个周期被配置为 0.5ms,因此变量 CycleCount 应该每秒改变 2 次(如果 PLC 任务的周期时间是一个周期记号)。由于我的程序每毫秒检查变量 CycleCount 是否更改,因此应每毫秒调用回调函数并将时间戳写入缓冲区(“myBuffer”)。但我注意到,在 2 秒的运行时间中,我只收到 1000 个值(而不是预期的 2000 个),我找不到原因?
TwinCAT3 中的 PLC 任务似乎显示了正确的值,但是当使用 MatLab 读取它们时,时间戳值是不正确的,而不是如前所述的每毫秒:
这些是 Matlab 的一些输出,其中 CycleCounter 被写入第 1 列,时间戳被写入第 2 列:
我在 TwinCAT 中使用以下代码来定义结构和主程序:
结构:
MAIN_CC(用于 PlcTask):
Matlab 代码读取通知流:
希望你能帮助我解决我的问题 - 在此先感谢!
.net - 将 NET-Object 传递给 Matab 中的并行函数(parfeval)
我正在尝试将 NET-Object 传递给在 Matlab 的并行池上运行的函数。
虽然我认为“parallel.pool.Constant”是这样做的方法 - 因为它适用于其他对象(如数据库连接) - 但在这种情况下它不起作用。
由于我没有收到错误消息,因此我无法找出它为什么不起作用。
显示功能也不显示任何内容。
示例代码:
它适用于我的示例(OPC UA 客户端):
c# - Read variables in Twincat 3 continously with the C# API
I want to read a lot of variables continuously (faster than 10 Hz) via the ADS client of C#. However, in the documentation the examples only read the variables one time.
I found the Twincat-OCX module that has this functionality, but it is used for Twincat 2.
What is the recommended way for Twincat3 while using c#?