存储PLCNext社区LinkedIn上的PLCNEXT.Instagram上的PLCNEXT.  youtube上的plcnext. github plcnext社区存储PLCNext社区

0
Votes
撤消
  1. StefanSvanbäck.
  2. PLCNEXT技术和PLCNEXT控件
  3. 2019年6月44日星期二

你好!

我有一个我想要在其他任务中运行的程序,我试图将其作为用户事件任务。在帮助描述中,它说我必须使用功能块Event_Task,我找不到编程块中的。

有人知道在哪里找到它吗?

提前致谢

/斯特凡

Accepted Answer
Frank PLCnext Team 接受答案 等待审核
0
Votes
撤消

嗨Stefan,

please find below a short code snippet which demonstrate how you can trigger( SET() method) the user event task in a RT C++ application.

#include "Arp/Plc/Commons/Esm/RtEventManagerProxy.hpp"

Arp::String eventName = "EventName";
ARP :: PLC :: Commons :: ESM :: RteventManagerProxy& rtEventManagerProxy = ARP :: PLC :: Commons :: ESM :: RteventManagerProxy::GetInstance();
this->rtEventPtr = rtEventManagerProxy.GetEvent(eventName);

if (this->rtEventPtr != nullptr)
{
    this->rtEventPtr->Set();
}

我们将在GitHub C ++示例集中准备一个例子。

小心!

Phoenix联系电子总部 - PLCNEXT运行时产品管理和支持
Frank PLCnext Team 接受答案 等待审核
0
Votes
撤消

嗨ssteffe,

我刚检查了这个,你对了FB在PLCNext Eng中的当前安装中描述了FB,但缺少。

可能有一个特殊的书,我会用我的大学检查这个。

但是,即使FB无法准备就绪,也可以通过C ++ API调用一个事件,这也可能是您的替代品吗?

告诉你!

坦率

Phoenix联系电子总部 - PLCNEXT运行时产品管理和支持
Frank PLCnext Team 接受答案 等待审核
0
Votes
撤消

嗨ssteffe,

我不幸的是给你的坏消息。我们仍然是IEC 61131的用户事件FBS for Plcnext在我们的积压中,但由于我们必须转移它们的其他功能。

直到FB不可用,仍然可能在C ++中执行此操作......

坦率

 

Phoenix联系电子总部 - PLCNEXT运行时产品管理和支持
Stefan Svanbäck 接受答案 等待审核
0
Votes
撤消

嗨弗兰克!

 

感谢您的回复,我将在C ++中测试它。

 

/斯特凡

Stefan Svanbäck 接受答案 等待审核
0
Votes
撤消

嗨弗兰克!

 

谢谢你的片段。

它可以很好地工作,并将帮助我开始非时间关键任务。

 

最好的问候斯特凡

tthayer 接受答案 等待审核
0
Votes
撤消

下午好!

 

我很感谢这个帖子,因为我也在努力奋斗。什么时候有可用的更新?我看到并承认上面的解决方法,但我不确定在美国,这将被认为是一个可接受的解决方法

 

Frank PLCnext Team 接受答案 等待审核
0
Votes
撤消

嗨tthayer,

我不会称之为解决方法,因为C ++服务(我们称之为远程服务呼叫 - RSC)是访问和控制PLCNext运行时的基础。

即使我们没有目前专用的61131 Lib计划,也可以调用C#FunctionBlock内的每个RSC服务。所以你可以随时箱自己的图书馆。

基础上的这也是我们创建了TCP,Axio和Interbus FunctionBlocks的方式。

如果需要,我们可以提供设计模式......

坦率

 

Phoenix联系电子总部 - PLCNEXT运行时产品管理和支持
djuric 接受答案 等待审核
0
Votes
撤消

大家好,

我正在努力获取使用AXC F 2152和I / O模块AXL F DI8 / 1 DO8 / 1 XC 1H的编码器信号,我需要硬件中断,以便我可以捕获从编码器获得的所有信号。我正在计划使用PLCNext Engineer 2019.6软件为我的项目。我的信号的脉冲宽度为2.5ms,我已经阅读了社区板上,我应该足够的I / O模块应该在PLCNext工程师中使用用户事件任务捕获所有信号。

我在文档中看到了激活事件,我可以使用event_task函数块激活事件,但由于PLCnext工程师2019.6缺少我寻找其他选项。在这个主题上,我找到了可能的解决方案,但由于我不是很熟练,因为我想询问是否有另一种激活用户事件任务的方法(或者其他方式获取编码器信号),或者这是唯一的方法(for现在)?

问候

百百

Frank PLCnext Team 接受答案 等待审核
0
Votes
撤消

嗨Djuric,

我不确定即使事件任务FBS是否可用,这将是合适的。如果编码器正在连续传输新的位置,则可以更好地发送固定和总线同步扫描时间。

这也是这里的解决方案:

  • 创建一个快速任务(AXC F 2152 min。1ms)比信号本身快。
  • Synchronize the task with the Axioline bus cycle (Axioline F node --> Settings --> Trigger IO Update
  • 在此任务上实例化一个小程序,只计算信号

请记住只需计算快速任务的值,将评估和剩下的速度移动到较慢的任务中,否则您将创建不必要的负载。

如果您没有达到所需的性能,请牢记我们还考虑到专用计数器模块(如例如,AXL F CNT2 INC2 1F - 2688093)

我希望这有帮助。

小心

坦率

Phoenix联系电子总部 - PLCNEXT运行时产品管理和支持
djuric 接受答案 等待审核
0
Votes
撤消

嗨弗兰克,

谢谢您的回答。您提供的解决方案确实是我的第一选择,因为它似乎可以捕捉到1ms的循环任务。但是,通过该方法,我仍然来自编码器的脉冲中可能是三分之一的脉冲,所以然后我想出了通过硬件中断获得它们的这个想法。但是你的答案让我经历了这首第一种方法,我想知道我的应用程序的AXL F DI8 / 1 DO8 / 1 XC 1H过滤时间设置为3ms,因此我将其更改为 <0.1 ms and it worked, I can get all my signals now. Thank you once again for helping me solve my problem!

问候,

百百

Michael Czorniej 接受答案 等待审核
0
Votes
撤消

嗨Stefan,

please find below a short code snippet which demonstrate how you can trigger( SET() method) the user event task in a RT C++ application.

#include "Arp/Plc/Commons/Esm/RtEventManagerProxy.hpp"

Arp::String eventName = "EventName";
ARP :: PLC :: Commons :: ESM :: RteventManagerProxy& rtEventManagerProxy = ARP :: PLC :: Commons :: ESM :: RteventManagerProxy::GetInstance();
this->rtEventPtr = rtEventManagerProxy.GetEvent(eventName);

if (this->rtEventPtr != nullptr)
{
    this->rtEventPtr->Set();
}

我们将在GitHub C ++示例集中准备一个例子。

小心!

大家好,

谢谢你的代码片段。我对用户事件有一些问题。

  1. 如何访问/声明RTEVENTPTR?我试图简单地“使用”指针在代码中假设它在已经为我的代码中神奇地声明了它,但编译器无法找到一个。
  2. 是否有可能在仅触发它们之前接收C ++代码中的事件?
  3. 您什么时候计划为PLCNext实现event_task函数块?
  4. 编辑:您是否已经为GitHub repo创建了示例代码?如果是这样,我在哪里可以找到它?

期待您的回音!

亲切的问候,
Michael Czorniej.

Stefan Svanbäck 接受答案 等待审核
1
Votes
撤消

迈克尔,

 

我想我可以帮助你有1个问题。

您必须包含#include“ARP / PLC / Commons / ESM / RTEVENTMANAGERPROXY.HPP”

然后您可以创建RTEVENTPTR

ARP :: String eventName =“Event1”; //来自Plcneng的事件的名称 
ARP :: PLC :: Commons :: ESM :: RteventManagerProxy& rtEventManagerProxy = ARP :: PLC :: Commons :: ESM :: RteventManagerProxy::GetInstance();
RTEVENT :: PTR RTEVENTPTR;

我希望这将有所帮助。

/斯特凡

Michael Czorniej 接受答案 等待审核
0
Votes
撤消

嗨Stefan, 

谢谢您的帮助。它确实确实工作了! :)

  • 页 :
  • 1


这篇文章没有答复。
但是,您不允许回复此帖。