十二. IEC 61499开源项目4diac运行时(forte)Lua脚本功能扩展

文章介绍了4diac运行时对Lua脚本的支持,包括如何通过源码编译启用Lua,以及在IDE中创建Lua功能块。重点讨论了luabfb.cpp文件中的关键函数,如CLuaFB_index、CLuaFB_newindex和CLuaFB_call,这些函数实现了Lua与运行时的交互,如读写变量和触发事件。若需新增供Lua调用的运行时函数,需在运行时定义并添加到Lua引擎。
摘要由CSDN通过智能技术生成

4diac的运行时本身支持Lua脚本文件解析,官方编译好的可执行程序是不支持的。在前面的章节讲解过怎么通过源码编译支持Lua脚本的运行时,这里不再赘述。在4diac的IDE里面可以新建基础功能块,算法语言选择Lua,IDE会把功能块的xml模型文件转换成Lua脚本下发给运行时,前面章节也讲解过怎么创建基础功能块,这里不再赘述。下面会先介绍forte源码与Lua相关的代码文件,再介绍怎么在里面新增供Lua调用的运行时内部接口函数。在forte源码目录src/core下面有个lua文件夹,里面的代码就是运行时操作Lua脚本的地方,其中比较重要的文件是luabfb.cpp,这个文件里的代码实现的Lua脚本里面获取运行时里的值,触发运行时执行事件,lua脚本里面设置运行时的值等重要功能。

int CLuaFB_index(lua_State *paLuaState) {

  CLuaBFB* luaFB = CLuaEngine::luaGetObject<CLuaBFB>(paLuaState, 1);

  TForteUInt32 id = static_cast<TForteUInt32>(luaL_checkinteger(paLuaState, 2));

  CIEC_ANY* var = luaFB->getVariable(id);

  CLuaEngine::luaPushAny(paLuaState, var);

  return 1;

}

int CLuaFB_newindex(lua_State *paLuaState) {

  CLuaBFB* luaFB = CLuaEngine::luaGetObject<CLuaBFB>(paLuaState, 1);

  TForteUInt32 id = static_cast<TForteUInt32>(luaL_checkinteger(paLuaState, 2));

  CIEC_ANY* var = luaFB->getVariable(id);

  CLuaEngine::luaGetAny(paLuaState, var, 3);

  return 0;

}

int CLuaFB_call(lua_State *paLuaState) {

  CLuaBFB* luaFB = CLuaEngine::luaGetObject<CLuaBFB>(paLuaState, 1);

  TForteUInt32 id = static_cast<TForteUInt32>(luaL_checkinteger(paLuaState, 2));

  if((id & CLuaBFB::LUA_FB_AD_FLAG) != 0) {

    luaFB->sendAdapterEvent((id >> 16) & CLuaBFB::LUA_AD_VAR_MAX, id & CLuaBFB::LUA_FB_VAR_MAX);

  } else {

    luaFB->sendOutputEvent(id);

  }

  return 0;

}

如果需要在运行时里面新增函数提供给Lua脚本调用,可以按照如下步骤执行:

  1. 在运行时里定义函数;
  2. 把运行时里的函数添加给Lua引擎;
  3. 在Lua脚本里面就可以调用了;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

2193410903

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值