当前位置: 首页 > news >正文

Easyx图形库应用(mcu+lua vs plc+st)

【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing @163.com】

        经常做工控的朋友都知道,之前plc编程主要是通过梯形图来完成的。不过随着plc能做的事情越来越多,plc开始也支持高级语言编程,比如谈的最多的就是st结构化编程。学过c语言的同学,学起st来,一般都相对而言都比较容易。其实细想一下,plc+st这种结构,它的本质就是mcu+lua,里面除了mcu之外,其实多了一层虚拟机。正是有了这层虚拟机的存在,让编程更轻松。

1、变量的io映射

        如果是纯语言编程,数据类型无非就是char、short、int、float、double、string这些。但是plc上面带了很多的端口资源,所以很多时候需要把变量和对应的io资源绑定在一起。比如绑定的是输入,还是输出,绑定的是232还是485,如果是多个485,我们绑定的是哪一个等等。大家如果用codesys编译过st,就不会太陌生。

PROGRAM PLC_PRG
VARxStart AT %IX0.0:BOOL;iNumber AT %MW10:INT;
END_VAR

2、st运行的基本逻辑

        在st运行之前,其实系统就准备好了硬件资源。等到运行用户的脚本之后,再将这些结果赋值给具体的端口,所以st的运行流程是这样的,

init_device();while(1)
{// user code// assign result to device io port
}

        只要plc在运行,那么整个user code就是不停在调用的。中间没有停歇的过程。

3、lua的替代

        既然我们知道了plc、st的基本原理,那么上面st的运行过程其实就可以替换成两部分。一部分是c语言代码,一部分是lua代码。c语言部分做的事情就是做好lua的底层实现。而lua重点负责业务的实现即可。c语言的代码就是这样的,

init_device();create_lua();
register_c_lib();launch_lua_file("./demo.lua");
release_lua();

        和st不同的是,这里没有while(1)死循环的结构,因为我们是打算把这部分内容转移到demo.lua来完成。而demo.lua的结构是这样的,

while true do-- read value from device-- add our own procedure-- write result to device
end

        当然,如果是希望做成和st一样的形式,那么反复调用luaL_dofile也是可以的,只是lua里面的变量要设置成local局部变量比较好。

4、所有的资源都可以映射到lua语言上

        不同的mcu资源差异大,比如gpio、uart、usb、can、eth等等。当然,不管是什么样的资源都可以通过注册函数的形式映射到lua语言上面。这样使用起来就很容易。用户完全不用处理底层的逻辑,只要关心业务代码就可以。

        当然有的同学可能会说mcu端口不够,其实这都不是问题。只要mcu旁边接一个fpga,大部分资源的问题就都解决了。

5、类easyx的应用也可以做成lua

        一部分mcu也是可以做成驱屏设备。如果是这种情况,那么对屏幕的简单处理,比如直线、矩阵、圆形、填充、图片这些功能就可以做成lua的形式,方便上层应用。

6、lua脚本的好处

        使用脚本的好处,主要就是可以屏蔽底层细节,完全把重心放到业务上面来。不用管中断、不用管汇编和c、也不用管寄存器配置,对于工控这样的场景来说是非常合适的。假设是c+lua开发,因为底层都被c实现了,lua一个init函数,就解决了所有配置问题。剩下来,就是自己的业务逻辑了。

7、mcu+rtos

    如果是带算法又要有实时性,就可以mcu+rtos开发。这个时候用plc也不好使。但是这种开发方式对开发人员要求较高,所以用人选人是一个问题。最重要的其实还是成本的压力,特别是用人成本。

http://www.dtcms.com/a/515555.html

相关文章:

  • 【计算机网络笔记】第一章 计算机网络导论
  • AI搜索驱动的品牌传播变革:品牌如何在“被搜索”转向“被理解”的浪潮中重构增长力
  • 秦皇岛网站建设哪家好医疗软件公司排名
  • 将 Flask 应用迁移到 AWS Lambda:服务监控电话告警系统实战
  • PyTorch入门
  • Redis的Hash数据结构底层实现
  • AWS Lambda 预置并发配置实战分析
  • Biu懂AI:使用LangChain将Astra MCP接入LLM
  • 做租号玩网站赚钱吗wordpress tag标签
  • 安全补丁还是自造DDoS?微软更新导致关键企业功能瘫痪
  • TorchRL 安装记录(亲测有效)
  • 网站建设教程资源wordpress有插件怎么用
  • 网站建设的项目描述银川微信网站
  • Java网络编程套接字
  • npm 常用标签与使用技巧新手教程
  • 继承和组合
  • Maven高级知识
  • Spring Boot 3 + Thymeleaf 基础教程
  • 自动化部署脚本
  • 上海专业网站建设方案wordpress 送女友
  • 人与狗做的电影网站网页搭建服务
  • 前端 数据的转换
  • React useCallback介绍(用来缓存函数的引用,避免每次渲染都重新创建函数)主要用于性能优化
  • VUE工程化开发模式
  • 海口澄迈县建设局网站杭州萧山网络
  • 前端低代码开发工具的崛起与实践经验分享,从效率到可控性的平衡
  • 二、redis集群部署(3主3从)
  • Vue 生命周期详解
  • vue3调用ant-design-vue组件库的a-table组件
  • 手机网站开发软件南昌网站外包