问题标签 [codesys]
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.
pointers - TwinCAT 和 CoDeSys 中的指针和在线更改
在 TwinCAT 2.10 和 CoDeSys 2.3 中,指针对于在线更改运行中的 PLC 程序是否安全,第一个是基于第一个的?如果内存块作为在线程序更改的一部分被重新分配并且有指向该内存块的指针会发生什么?
plc - 以批处理模式运行 CodeSys V2.3
恐怕我在 3S 论坛上进步不大。所以你们现在要被纠缠了!
我正在使用 3S Codesys v2.3
我正在尝试创建一个引导项目并在我的构建服务器上下载源代码,我想避免将任何硬件插入其中。我正在使用以下命令行来运行 Codesys:
构建.bat:
"C:\Program Files\3S Software\CoDeSys V2.3\Codesys.exe" OptimusPlcFirmware.pro /cmd Build.cmd /batch
构建.cmd:
echo on
online sim off
project rebuild
online bootproject
online sim
online login
online sourcecodedownload
online logout
online sim off
当我这样做时,我得到窗口“遇到问题需要关闭,并附带发送错误报告/不发送按钮”
引导项目已成功创建,并且源代码似乎都正确。谁能解释发生了什么?
谢谢
马特
c# - 在 C# 中定义外部“C”函数
我有一个用 C# 编写的 ActiveX 控件,并在 ActiveX 兼容程序 (CoDeSys) 中运行时工作。我遇到的问题是,为了让 CoDeSys 与 ActiveX 控件交互,CoDeSys 需要 dll 来导出函数原型:
我已经查看了如何像在 C++ 中一样导出它,但没有成功,如下例所示:
C# 确实有一个extern关键字,但它不允许您提供函数定义(至少我还没有找到方法)。尝试此操作后:
出现以下错误:
有没有人尝试在 C# dll 中导出函数?
有什么解决方法吗?(我想到了[DllImport("AlarmsCSharp.dll")]并在 C++ dll 中调用 C#,但我想看看是否有人以前有解决方案)
也许我想多了,不需要导出这个函数,因为 ActiveX 控件已经能够与 C# 代码交互。
编辑:我感觉我从 C++ 函数原型到 C# 接口声明的翻译。如果在 C++/C# 编程方面有更多经验的人可以验证我所做的翻译是否正确,那可能会有所帮助。
codesys - CoDeSys: BOOL 变为 "*** INVALID: 16#02 ***" 外部案例(两个变量之间的链接)
当我跟踪我的程序(使用断点和单步联机)时,我看到,当到达该行时,VAR SOpen 变为“ * INVALID: 16#02 * ” Step:=Step+1;
。
更仔细地观察跟踪,我看到,在第一次调用“0:”时,Step 从 0 变为 1。这两个 VAR 是两个初始化的,似乎是链接在一起的。额外的增加将 Step 设置为 2(在第一次运行中!)并将 SOpen 设置为无效。
codesys - 如何将 LD 梯形图转换为 ST 文字语言?
我正在使用 CoDeSys 软件进行开发。现在,我刚刚完成了 LD(梯形图)中的代码。我想将 LD 更改(转换)为 ST(结构化文本)。
那可能吗?
c# - 解析 CoDeSys .pro 文件
我正在尝试解析 .pro 文件,但文件中出现奇怪的字符。
以前有人试过吗?谢谢!
oop - 如何在 CoDeSys 中放置自定义功能块的实例?
我正在学习 CoDeSys(使用 V3.5 SP2),但我遇到了一个相当初级的问题,我似乎找不到任何资源。
我已经定义了一个简单的功能块(通过添加对象 -> POU -> 功能块并使用 FBD 语言)。FB 不是抽象的,也不是扩展另一个 FB 或实现接口。(它的实现只包含一些非常基本的布尔逻辑 FB。)
问题是我不能把这个FB放在我的程序中。FB 确实出现在 POUs 子菜单下右侧的工具箱中,但是当我尝试将其拖到我的程序中时,没有Start here
出现句柄。我可以正确放置任何内置 FB,但不能放置任何自定义 FB。
我能做些什么?我怀疑我误解了程序的结构方式或 FB 的定义方式,但我无法确定。任何帮助将不胜感激。
floating-point - PLC 结构化文本,将十进制转换为实数(浮点数)。没有得到我期望的价值。(IEEE-754)
我有一个通过 Profibus DP 与 PLC 通信的硬件,它向我发送 4 个十六进制字节的数据,即“44 79 FF FF”,并且在 PLC 程序中,我为此输入数据声明了一个 BYTE 数组。问题是在 PLC 中,我在 BYTE 数组中收到的数据是“66 121 255 255”,这是十六进制的十进制值,但我的目标是将该值转换为 REAL,当我这样做时,我不是得到我期望的价值。
我创建了一个 DWORD( 4bytesData
),我将所有 BYTES 插入其中。所以在我将 4 个字节插入4bytesData
字节之前是:in1 = 68
, in2 = 121
, in3 = 255
&in4 = 255
其中 in1、in2、in3 和 in4 是字节 0-3。
我得到的价值是;4bytesData
= 1148846079 & realValue
= 1.148846e+009
我期望从中获得的价值realValue
是= 9.9999993896484375E2
如果我使用这个网站( IEEE754 Analyzer/Converter)并转换十六进制值(4479FFFF),我得到我想要的值,如果我插入十进制值(1148846079),我得到的值与我在可编程逻辑控制器。
我希望你能理解我的问题,非常感谢提前。
gsm - 如何在 Codesys 中为 GSM 调制解调器调用“AT 命令”?不是标准的 send_sms 等
我有一个 GSM 调制解调器和一个 PLC。PLC 看到调制解调器(我使用 *.lib 和功能块“openPort”),但我不明白如何向调制解调器发送“AT 命令”,例如“ate0”。
plc - TwinCAT 3,将方法用于内部 FB 功能还是仅用于接口?
我是 Beckhoff 技术的老用户,尤其是 TwinCAT。目前,由于 TwinCAT 3(面向对象)带来的新功能,我们的 PLC 架构正在经历转型
目前,我们正在开发新的 PLC 架构,并且我们对如何前进有几个担忧。目前引起我们注意的一个很好的例子是新方法以及与动作的整体差异。
从我自己的角度来看,创建方法不仅是为了定义和实现接口,也是为了简化 FunctionBlock 及其内部状态机。例如,如果我有一个内部有自己的状态机的 FB_Conveyor,我可以选择为传送带创建内部方法 (M_INIT),它将检查传送带以检查传送带处于 INIT 状态时是否有任何产品,检查方法输出值。Method 将包含其赢得的状态机,并且在其输出返回 TRUE 值之前不会准备好。
第一个问题出现在这里,因为我们的一些实时程序员认为方法并没有为此完成,在这种情况下,我们应该实现从 FB_CONVEYOR 调用的 FB_INIT 并且它包含自己的变量,因此两者都有 REF 到 FB_MOTOR .
主要论点是 METHODS 是一种用于创建接口和控制 FB 的工具,例如,我自己的 FB_CONVEYOR 可以从具有方法 M_TakeIn 的 I_Conveyor 扩展,但不用于实现内部功能作为初始化它。
一个论点是方法使用自己的堆栈变量,因此方法的所有数据都是临时的,并且仅在执行期间有效。这意味着,如果实现它的方法太大,我们将无法确保实时的正确延迟。然后根据我自己的经验,TC 总是会占用尽可能多的处理器资源来确保正确的循环时间,所以使用内部堆栈变量实际上并不是一个架构错误,但它是可以和可取的,因为实际上 TC 确保实时操作但不需要被实现为一个总实时(基于 C 的实时)过程。
讨论一直在进行,对于是否应该将方法用作内部操作或者我们是否应该真正遵循 TC2 Motion FB 的架构(其中不同的功能块控制不同功能和每个共享一个对某些轴的引用(FB_MOVE、FB_HOME 等)
在任何文档中都没有找到任何真正的答案,在定义接口的情况下几乎总是提到方法,但在编程内部 FB 功能的情况下却从未提及。
那么,是否可以将方法用于内部功能,这将有助于将来在接口中转换孔 FB 时,根据情况需要重新实现方法 init。
对于也具有方法和接口的新版本 CodeSyS,这个问题几乎相同。