openPLC_Editor C语言编程 在mp157 arm板上调用io等使用记录

1.编程界面比较简单,具备PLC开发编程的四种编程方式。梯形图语言LD ,指令表语言IL,结构化文本语言ST,功能模块图语言FBD。

 2.官方使用手册。学习资料实在是太少,目前都是自己比较费劲的研究。

        3.2 Creating Your First Project on OpenPLC Editor – Autonomy

 3.openplc 在其他平台上,比如esp32,Raspberry Pi,引脚固定,所以有规定好的io映射地址。但是在LInux 上引脚不固定,所以只能自定义调用或者映射。

        但是我没搞明白 地址跟io 该怎么映射,有会的朋友可以推荐下技术文档共同学习下。

        目前只会C语言 文件读写 驱动的方式调用io。

4.IDE支持C语言编程,需要用 { } 限制

 如上图,新建一个工程,选择结构化文本 “程序” ,“程序”相当于main函数可直接写代码运行而不需要添加main函数。

5.变量定义

        区域1,新建变量的地方,注意 数据类型 在iec_types.h中定义的,这里面的INT 实际是short

 变量的 “位置” 是可以定义 modbus tcp的地址,比如set变量 %QW1 是06功能读写地址 1 ,用网络调试助手发送 “00 00 00 00 00 06 01 06 00 01 00 07” 就是设置 set = 7。

 adc变量 %IW1 就是 04功能码读 ,用网络调试助手发送“00 00 00 00 00 06 01 04 00 01 00 01”,就可以读adc的值。

        具体modbus定义查看手册 2.5 Modbus Addressing – Autonomy

        区域2 { } 内属于C语言环境,可以定义C语言的变量,数据类型,还是跟C语言编程方式一样。{ }外属于 结构化文本ST 的环境,只能用ST的编程写法。如区域3的 if  then  end_if;

        区域3,ST的编程环境写法。ST语法查看 https://wenku.baidu.com/view/b3171ac7f111f18582d05a9b?aggId=b3171ac7f111f18582d05a9b&fr=catalogMain_&_wkts_=1711095409579        区域4, 具体C语言逻辑代码,还是在 { } 内。

        1》两个环境内的变量如何相互调用

        ST的变量在{ }内调用的是大写的变量,比如 adc  括号内使用{ ADC或者data__->ADC },因为在工程编译后的文件里不管是变量名还是函数名都会编译成大写的,具体可以去工程文件夹里查看那些 .c 文件。

        2》 两个环境内变量如何相互赋值

        两个函数 SetFbVar( M1, m2) 和 m2 = GetFbVar(M1),

        SetFbVar( M1, m2): 把c变量m2赋值给ST变量M1。

        m2 = GetFbVar(M1):   把ST的变量M1赋值给c变量m2。

        两个环境的数据类型定义不同,所以不能直接赋值,不然就会报各种数据类型不匹配的错误。  

        3》 带有modbus 地址的变量 如何赋值

                比如上图的 adc 变量是 %IW1 读数据,用于读取外设的adc采样值。这种变量是不能在

{ } C语言中直接赋值,会报错。再定义一个 adc0 本地变量,在{ } 内把采样值SetFbVar(ADC0,adc_get),再{ }括号外 adc := adc0 ;

6. 函数定义

        新建一个 “功能” ,选择 结构化文本ST,函数名要用大写,比如上图。因为编译后的函数名会变成大写,小写的函数名是不识别的,调用大写函数名。

        0》 C语言头文件引用

               在IDE中添加, OpenPLC_Editor-master/matiec/lib/C 文件夹下 iec_std_lib.h 中添加引用头文件

        编译器已经添加的 stdio.h 等基本头文件,printf()可以直接使用,但是文件操作fcntl.h这样的需要自己添加,如上图。 

        在runtime中添加,OpenPLC_v3-master/webserver/core/lib 文件夹下 iec_std_lib.h 中添加引用头文件。

        在IDE上添加到头文件也需要同步添加到runtime中,runtime上传程序时会重新编译代码,不然就会报错。

        1》 函数的输入输出变量

         定义了一个printf_str 的函数,注意 “返回类型” INT,是一个默认的返回值。还定义了一个输入in 和一个输出 set 。也就是调用这个函数传入一个输入值,会返回两个输出值一个set一个默认。

        默认的返回变量就是函数名,如上图的 PRINTF_SRT = 121; 输出SET=111.

在system 程序中调用

         out = PRINTF_SRT(1,0,500,&yun);  前两个(1,0)是编译后的两个默认参数,可以去编译后的文件POUS.c查看,按理说是不需要填入,但是会报错参数个数不匹配。500是输入变量in,&yun是接收返回值set的值(注意返回数据类型要一致,int 对应的是DINT,short 对应的是INT)。out接收默认返回值PRINTF_SRT。

        2》 C语言编程 点灯

        总体还是用C语言编程方式用文件读写驱动控制io。

        新建一个 “功能” ,LED_SET,一个输入开关变量。

        在system程序中调用   

         通过modbus变量set,可以使用网络助手发送“00 00 00 00 00 06 01 06 00 01 00 01” 开灯,发送“00 00 00 00 00 06 01 06 00 01 00 02” 关灯

        3》 ADC 读数据。

        调用

        { float adc_get; }

        {  ADC_READ(1,0,&adc_get); } 

        4》 其他驱动写法一样,还是C语言读写驱动。

7. 更改程序循环周期

 默认是20ms

8.点击编译,生成 “.st” 的程序

9. 目前就会这些,感觉就是怪怪的,有些东西跟别人或者例程写法不一样,还有些功能比如c扩展也用不起来,在编译器上编译能过,但是放到runtime上就编译不过。

        有什么更好的资源可以推荐共同学习下。

10.代码示例见绑定资源。

https://download.csdn.net/download/wy212670/89049708?spm=1001.2014.3001.5503

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/578251.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

智能人像重绘解决方案如何部署

企业对于视觉呈现的需求日益增强,特别是在人像处理方面,精准、自然、高效的解决方案成为了市场的迫切需求。美摄科技,凭借自研AI技术大模型,推出全新人像重绘解决方案,致力于为企业提供一站式人像美化服务,…

绘制特征曲线-ROC(Machine Learning 研习十七)

接收者操作特征曲线(ROC)是二元分类器的另一个常用工具。它与精确度/召回率曲线非常相似,但 ROC 曲线不是绘制精确度与召回率的关系曲线,而是绘制真阳性率(召回率的另一个名称)与假阳性率(FPR&a…

代码随想录——移除元素(Leetcode27)

题目链接 暴力&#xff1a;&#xff08;没有改变元素相对位置&#xff09; class Solution {public int removeElement(int[] nums, int val) {int len nums.length;for(int i 0; i < len; i){if(nums[i] val){for(int j i 1; j < len; j){nums[j-1] nums[j];}i…

深入并广泛了解Redis常见的缓存使用问题

Redis 作为一门主流技术&#xff0c;缓存应用场景非常多&#xff0c;很多大中小厂的项目中都会使用redis作为缓存层使用。 但是Redis作为缓存&#xff0c;也会面临各种使用问题&#xff0c;比如数据一致性&#xff0c;缓存穿透&#xff0c;缓存击穿&#xff0c;缓存雪崩&#…

2024软件设计师备考讲义——(7)

数据库技术 一、数据库基础 1.数据库系统 DB、DBS、DBA、DBMS 2.三级模式两级映像 内模式 物理存储 概念模式 基本表 外模式 用户使用应用程序&#xff0c;视图级别 外模式-概念模式的映像 表和视图之间的映射若表中数据变化&#xff0c;只要修改映射&#xff0c;不用改程序…

Flink学习(一)-flink 本地部署

1&#xff0c;安装 jdk 官网推荐 jdk11 版本。我用 17也可以跑起来 2&#xff0c;下载 flink-1.19 的版本并解压 下载 release 1.19.0 并解压。 tar -xzf flink-1.19.0-bin-scala_2.12.tgz cd flink-1.19.0 3&#xff0c;启动 ./bin/start-cluster.sh 4&#xff0c;访问…

吴恩达深度学习笔记:浅层神经网络(Shallow neural networks)3.9-3.11

目录 第一门课&#xff1a;神经网络和深度学习 (Neural Networks and Deep Learning)第三周&#xff1a;浅层神经网络(Shallow neural networks)3.9 神 经 网 络 的 梯 度 下 降 &#xff08; Gradient descent for neural networks&#xff09; 第一门课&#xff1a;神经网络和…

HN热帖|替换Redis的一场赛跑

3 月 21 日&#xff0c; Redis Ltd. 宣布了一项重大决定&#xff1a;Redis “内存数据存储”项目从 Redis 7.4 版本开始将以非自由的、源代码可用的许可证发布。这一消息并不受欢迎&#xff0c;但也并非完全意外。这次的变化的不同寻常之处是市面上已经有了多个 Redis 替代品可…

2024最新软件测试20个基础面试题及答案

什么是软件测试&#xff1f; 答案&#xff1a;软件测试是指在预定的环境中运行程序&#xff0c;为了发现软件存在的错误、缺陷以及其他不符合要求的行为的过程。 软件测试的目的是什么&#xff1f; 答案&#xff1a;软件测试的主要目的是保证软件的质量&#xff0c;并尽可能大…

在哪买国外服务器便宜?

在哪买国外服务器便宜&#xff1f;在寻找便宜且可靠的国外服务器商家时&#xff0c;我们需要考虑多个因素&#xff0c;包括价格、性能、可靠性、技术支持和扩展性等。下面是一些备受推崇的便宜国外服务器商家。 Amazon Web Services (AWS)。作为全球最大的云服务提供商之一&am…

【Qt】常用控件(标签类)

目录 一、QLabel二、LCDNumber三、ProgressBar四、Calender Widget 一、QLabel QLabel用来显示文本和图片 属性说明textQLabel中的文本textFormat文本格式 Qt::PlainText 纯文本 Qt::RichText 富文本  Qt::markdown 格式 Qt::AutoText根据文本内容自动决定文本pixmapQLabel…

【threejs】较大物体或shape的贴图较小问题处理方法

问题 有的场景内相对体型差距过大的物体&#xff08;如山地 海洋等&#xff09;由于尺寸问题&#xff0c;加载贴图过于小&#xff0c;同时shader也无法完全展示&#xff0c;如图 我们可以获取物体的uv&#xff0c;进行缩放使得贴图可以完全展开 如果uv是乱的 可以用xyz坐标最…