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

news2025/3/11 12:44:14

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.coloradmin.cn/o/1555123.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

vmWare虚拟机下载安装详细教程,手把手一步一步教学

一.下载 先去官网下载vm 官网地址:https://www.vmware.com/ 官网下载速度太慢了 国内应用商店或者别的下载地址:vmware下载_vmware下载免费中文版客户端[虚拟机]-下载之家 然后再去下载一个镜像 地址是:Index of /centos/7/isos/x86_64/ 我个人下载的是这个 ,看各位的需求…

Reasoning on Graphs: Faithful and Interpretable Large Language Model Reasonin

摘要 大型语言模型(llm)在复杂任务中表现出令人印象深刻的推理能力。然而,他们在推理过程中缺乏最新的知识和经验幻觉,这可能导致不正确的推理过程,降低他们的表现和可信度。知识图谱(Knowledge graphs, KGs)以结构化的形式捕获了大量的事实…

linux centos7.9 weblogic14c java1.8.401 安装部署流程

一、获取安装包: Java1.8.401:Java Downloads | Oracle weblogic 14c:https://download.oracle.com/otn/nt/middleware/14c/14110/fmw_14.1.1.0.0_wls_lite_Disk1_1of1.zip 选generic版本 二、将安装包传到Linux服务器上 方法不限&#xf…

Antd Vue3 使用 Anchor 锚点组件记录

项目场景 客户要求做一个表单页面&#xff0c;表单数据分为三步&#xff0c;每一步骤是一个单独的 Vue 组件&#xff0c;表单上方需要使用锚点组件实现锚点定位到每一步的功能。 代码总览 <template><div class"guided-form-content-wrapper"><!-- …

阿里云实时计算Flink的产品化思考与实践【下】

摘要&#xff1a;本文整理自阿里云高级产品专家黄鹏程和阿里云技术专家陈婧敏在 FFA 2023 平台建设专场中的分享。内容主要为以下五部分&#xff1a; 阿里云实时计算 Flink 产品化思考 产品化实践 SQL 产品化思考及实践 展望 接上篇&#xff1a;阿里云实时计算Flink的产品…

主流好用的 Markdown 编辑器介绍

在当今程序员的日常工作中&#xff0c;Markdown 已经成为了一种常用的文本标记语言&#xff0c;它简洁、易读、易写&#xff0c;被广泛应用于写作、文档编写、博客撰写等场景。为了更高效地编辑和管理 Markdown 格式的文档&#xff0c;选择一款功能强大、易用的 Markdown 编辑器…

Flask Python:请求上下文和应用上下文

请求上下文和应用上下文详解 一、背景二、什么是上下文2.1、请求上下文2.2、应用上下文2.3、两种上下文的底层逻辑 三、写在最后 一、背景 在如何实现异步发送邮件的时候&#xff0c;遇到过这样一个报错 RuntimeError: Working outside of request context.This typically me…

FreeRtos作业1

1.总结keil5下载代码和编译代码需要注意的事项 代码写完之后的操作流程 2.总结STM32Cubemx的使用方法和需要注意的事项 选择芯片型号 生成代码 3.总结STM32Cubemx配置GPIO的方法 4、使用定时器2让黄灯闪烁 /* USER CODE END Header */ /* Includes --------------------------…

爬虫逆向实战(38)-某空气质量平台(反调试,AES,DES,MD5)

一、数据接口分析 主页地址&#xff1a;某空气质量平台 1、抓包 (1) 反调试 该网站对鼠标右击以及F12进行了监听并拦截 虽然该网站无法打开Chrome控制台&#xff0c;导致我们无法抓包&#xff0c;但是道高一尺魔高一丈。既然我们无法在打开该网站的时候打开Chrome控制台&…

蓝队面经(一)

蓝队面经(一) 文章目录 蓝队面经(一)入侵排查思路windows入侵排查思路Linux入侵排查思路 Linux 如何查看登录日志Windows 和 Linux 的日志文件放在哪里&#xff1f;WindowsLinux Linux 常用排查命令有哪些&#xff1f;Linux 的 Selinux 是什么&#xff1f;如何设置 Selinux&…

Python基础入门 --- 9.异常、模块

文章目录 第九章&#xff1a;9.异常9.1 异常的捕获9.1.1 捕获指定异常9.1.2 捕获多个异常9.1.3 捕获全部异常9.1.4 异常else9.1.5 异常的finally 9.2 异常的传递性9.3 Python模块9.3.1 模块的导入import模块名from 模块名 import 功能名from 模块名 import *as定义别名 9.3.2 自…

C++多线程:创建多个线程与数据共享安全问题(四)

1、创建多个线程 多线程的调度由操作系统负责&#xff0c;线程执行的先后没有严格的顺序完全看操作系统和CPU的心情。 #include <iostream> #include <vector> #include <thread>void thread_print(int num) {std::cout << "线程编号 " &…

2023年EI会议论文已见刊/检索进展汇总

2023年录用的会议论文已在SPIE、ACM、IEEE等出版社正式上线见刊&#xff0c;并已陆续完成EI Compendex数据库收录&#xff0c;详情如下&#xff1a; EIECT 2023——IEEE出版&#xff0c;并完成EI收录 会议信息&#xff1a; 第三届电子信息工程与计算机技术国际学术会议&…

使用hexo框架快速在github上搭建静态博客

今天来说一下使用hexo框架搭建静态博客&#xff0c;玩玩还不错。 我的操作系统 文章目录 一、部署到本地二、新建博客三、更换主题四、部署到github五、其他 一、部署到本地 首先下载好nodejs和git工具&#xff0c;建议直接去清华镜像源下载 node.js git 这中间环境变量的配置…

vue2处理跨域问题

vue中访问springboot中的RestController中的服务 &#xff08;vue.config.js不生效-CSDN博客&#xff09; 1、创建项目 使用vue init webpack my_frontend 创建vue项目 在HelloWorld.vue文件中添加内容&#xff1a; HelloWorld.vue 文件内容&#xff1a; <template>&…

搜索与图论——bellman—ford算法、spfa算法求最短路

bellman-ford算法 时间复杂度O(nm) 在一般情况下&#xff0c;spfa算法都优于bf算法&#xff0c;但遇到最短路的边数有限制的题时&#xff0c;只能用bf算法 bf算法和dijkstra很像 #include<iostream> #include<queue> #include<cstring> #include<algori…

Tomcat一闪而过

步骤&#xff1a; 1.将startup.bat拖入命令行执行得&#xff1a;jre_home地址不正确&#xff0c;参考 2.环境变量中删除jre 3.再次执行&#xff0c;得&#xff1a;catalina_home未正确配置&#xff0c;配置参考 最后&#xff1a;发现jdk和tomcat版本不兼容&#xff0c;换成tom…

数字图像处理——直方图的均衡化

1.方法简介&#xff1a; 直方图均衡化通常用来增加许多图像的全局对比度&#xff0c;尤其是当图像的有用数据的对比度相当接近的时候。通过这种方法&#xff0c;亮度可以更好地在直方图上分布。这样就可以用于增强局部的对比度而不影响整体的对比度&#xff0c;直方图均衡化通…

【氮化镓】GaN器件中关态应力诱导的损伤定位

概括总结&#xff1a; 这项研究通过低频1/f噪声测量方法&#xff0c;探究了在关态&#xff08;OFF-state&#xff09;应力作用下&#xff0c;AlGaN/GaN高电子迁移率晶体管&#xff08;HEMTs&#xff09;中由应力引起的损伤的定位。研究中结合了电致发光&#xff08;EL&#xf…

unbuntu mysql8.0新建用户及开启远程连接

MySQL更新到8.0以上版本后&#xff0c;在创建连接远程的用户的时候和之前5.x的版本有了很大的不同&#xff0c;不能使用原来同时创建用户和授权的命令。 以下是记录的MySQL8.0创建用户并授权的命令&#xff1a; 查看用户表&#xff1a; user mysql; select host,user,authen…