标签: codesys

PLC结构化文本,将小数转换为实数(浮点数)。没有得到我期望的价值。(IEEE-754)

我有一个通过 Profibus DP 与 PLC 通信的硬件,它向我发送 4 个字节的十六进制数据,即“44 79 FF FF”,并且在 PLC 程序中,我已为该输入数据声明了一个 BYTE 数组。问题是在PLC中,我在字节数组中收到的数据是“66 121 255 255”,这是十六进制的十进制值,但我的目标是将该值转换为实数,当我这样做时,我不是得到我期望的值。

我创建了一个 DWORD( 4bytesData),将所有字节插入其中。所以在我插入4个字节之前,4bytesData字节是:in1 = 68, in2 = 121, in3 = 255&in4 = 255

4bytesData := (SHL(SHL(SHL(BYTE_TO_DWORD(in1), 8) OR BYTE_TO_DWORD(in2), 8) OR     BYTE_TO_DWORD(in3), 8) OR in4);

realValue := DWORD_TO_REAL(4bytesData);
Run Code Online (Sandbox Code Playgroud)

其中 in1、in2、in3 和 in4 是字节 0-3。

我得到的价值是;4bytesData= 1148846079 & realValue= 1.148846e+009

我期望获得的值realValue是 = 9.9999993896484375E2

如果我使用此网站( IEEE754 分析器/转换器)并转换十六进制值(4479FFFF),我将得到我想要的值,如果我插入十进制值(1148846079),我将得到与我在PLC。

我希望您理解我的问题,非常感谢。

floating-point plc decimal ieee-754 codesys

5
推荐指数
1
解决办法
3万
查看次数

将枚举器定义为 DUT 有什么好处?

据我了解,定义的主要目标enumerators是将变量分配给一些数字及其相等的字符串。

我们可以将 var 定义a为our或enum中的任何地方,如下所示:initializing sectionProgramFunction Block

a:(start,stop,operate);
Run Code Online (Sandbox Code Playgroud)

很难,我不知道为什么我们看不到这一点,tabular view但有一个大问题:

将枚举器定义为 DUT 有什么好处?

plc codesys st twincat

4
推荐指数
1
解决办法
778
查看次数

在 Codesys 中定义数组

我正在使用 Codesys 创建一个数组。

下面的示例是我用来创建 5 个值的数组的示例

ARRAY [1..5] OF INT := [1,2,3,4,5];
Run Code Online (Sandbox Code Playgroud)

这对于 5 个值的数组来说没问题,但如果我需要一个包含 100 个值的数组呢?

有没有一种更快的方法来处理 100 个值的数组,而不是像下面的示例所示单独输入每个值。

ARRAY [1..100] OF INT :=[1,2,3,4,5,6,7 to 100]
Run Code Online (Sandbox Code Playgroud)

arrays codesys structured-text

3
推荐指数
1
解决办法
2万
查看次数

如何在 Codesys v3 中创建指向函数的指针

你能给我一个例子来说明如何在我的库中声明函数指针吗?如何将函数指针传递给外部库?

c codesys iec61131-3

3
推荐指数
1
解决办法
5891
查看次数

CODESYS 中众多功能块的实例化 (IEC61131)

我使用 CODESYS 制作了一个功能块来执行电能计量。该功能块的输入是电流和电压,输出是能量。现在,我们需要有 1000 个该功能块的实例来运行我们拥有的 1000 米的代码。编写(可能还有复制和粘贴)这些实例似乎并不是最有趣的工作。想知道是否有人有更聪明的方法来进行如此众多的实例化。

例如,以下是 2 个实例的代码(在 CODESYS 中)的样子:

meter_instance1(CURRENT:=I1, VOTAGE:=V2);
Energy1:= meter_instance1.ENERGY;

meter_instance2(CURRENT:=I2, VOTAGE:=V2);
Energy2:= meter_instance2.ENERGY;
Run Code Online (Sandbox Code Playgroud)

我们希望有 1000 个实例。任何想法都会受到高度赞赏。

plc real-time instantiation codesys iec61131-3

3
推荐指数
1
解决办法
1765
查看次数

TwinCAT和CoDeSys的指针和在线更改

在TwinCAT 2.10和第一个基于CoDeSys 2.3的CoDeSys 2.3中,指针是否可以安全地防止在线更改PLC程序?如果内存块作为在线程序更改的一部分重新分配并且指针指向该内存块会发生什么?

pointers plc codesys twincat

2
推荐指数
1
解决办法
2118
查看次数

在基于Linux的WAGO PFC200 PLC上与CoDeSys程序通信

我现在熟悉PLC,特别是WAGO 750-8206 PLC.它提供了一个Linux操作系统,可以运行CoDeSys程序.控制器上连接了一些I/O模块:750-530,750-430和750-600.我想知道的是:

是否有可能编写一个在PLC上运行的C++ linux应用程序并获取/设置数字输入和输出?

更好的是:我可以编写一个"与I/O对话"的CoDeSys程序并处理所有逻辑,同时可以通过C++ linux程序访问吗?这个想法是这样的:我希望CoDeSys程序能够检查两个数字输入.如果两者都很高,则应将变量设置为定义的值.linux应用程序应该能够读取该变量并进行进一步处理(例如将JSon数据发送到服务器或类似服务器).

此外,当linux应用程序收到触发命令的消息时,我需要能够将命令从linux应用程序发送到CoDeSys程序,以便切换数字输出(或在模拟输出上设置值等).

我对这个主题的任何想法和评论都非常感激,因为我对这个主题完全不熟悉.提前致谢!

c++ linux plc codesys

2
推荐指数
1
解决办法
7221
查看次数

使用 Beckhoff 设备进行变量映射

我是 PLC 编程新手,在连接 Beckhoff 设备时遇到问题。我使用了 EL1008 设备,它有 8 个输入。在 Beckhoff 网站上,我找到了下表。当将变量分配给输入时,我很困惑,哪个变量映射到%IX0.0 %IX0.1 %IX0.3

在此输入图像描述

plc codesys twincat

2
推荐指数
1
解决办法
6156
查看次数

如何在方法中定义枚举器?

enum当你在 a 中定义 an 时出现问题method

我试图这样做:

VAR
    enumA:(A,B,C);
END_VAR
Run Code Online (Sandbox Code Playgroud)

TwinCAT3 Shell 当我在(TcXaeShell)中使用它时,编译器会做出反应。 在此输入图像描述

任何帮助,将不胜感激。

plc codesys st twincat

2
推荐指数
1
解决办法
496
查看次数

Codesys CAA_File 和 SysFile 库的区别

Codesys CAA_File 库和 SysFile 库有什么区别?何时使用 CAA_File 而不是 SysFile?

codesys

1
推荐指数
1
解决办法
941
查看次数

为什么 Codesys 可以从非零值开始数组?

在我使用 IFM PLC 的一些项目中,我遇到了以下代码:

someArray:ARRAY  [6..8] OF BYTE;
Run Code Online (Sandbox Code Playgroud)

当我在断点处检查数组时,我发现它具有三个元素:

someArray[6] = 0
someArray[7] = 0
someArray[8] = 0
Run Code Online (Sandbox Code Playgroud)

我一生都无法理解为什么有人会这样做,或者为什么这是可能的。我从来没有见过这样的事情。我没有进一步的来源可以帮助我理解它的用途(缺少部分),但这就是它的声明和使用方式。我查看了文档,也找不到原因。

为什么这是可能的,在什么情况下你会想要这样的数组?

codesys

1
推荐指数
1
解决办法
203
查看次数