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.mzph.cn/news/779871.shtml

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

相关文章

QT6实现音频输出方法

一.QT6音频调用及与QT5的区别 1.音频输入 QAudioSource代替QAudioInput类 QAudioSource类提供了一个接口&#xff0c;用于从音频输入设备接收音频数据。 Header: #include <QAudioSource> qmake: QT multimedia 2.音频输出 QAudioSink代替QAudioOutput类 QAudioSi…

第九届蓝桥杯---航班时间python

1.总结&#xff1a; 时 秒数//3600 分 秒数%3600//60 秒 秒数%60 print(‘{:02d}:{:02d}:{:02d}’.format(res//3600, res%3600//60, res%60)) {:02d}表示输入的整数是两位不足前面补0&#xff0c;d表示整数 # 时间计算函数 def time_caculate(t):m1 t[0].split(":&q…

【数据挖掘】实验5:数据预处理(2)

验5&#xff1a;数据预处理&#xff08;2&#xff09; 一&#xff1a;实验目的与要求 1&#xff1a;熟悉和掌握数据预处理&#xff0c;学习数据清洗、数据集成、数据变换、数据规约、R语言中主要数据预处理函数。 二&#xff1a;实验知识点总结 1&#xff1a;数据集成是将多个…

Topaz Video AI for mac 视频增强软件

Topaz Video AI for Mac是一款专为Mac用户设计的视频增强软件&#xff0c;它利用先进的人工智能技术和机器学习算法&#xff0c;为用户提供卓越的视频编辑和增强体验。 软件下载&#xff1a;Topaz Video AI for mac v4.2.2激活版 这款软件能够快速提高视频的清晰度、色彩饱和度…

激发数据潜力:企业数据中台的策略性构建与优化_光点科技

在信息时代&#xff0c;数据是企业价值链中不可或缺的一环。构建一个策略性的企业数据中台不仅能够整合分散的数据资源&#xff0c;还能提高决策效率和业务敏捷性。本文聚焦于如何策略性地构建和优化数据中台&#xff0c;以便企业能够最大化地利用数据资源&#xff0c;推动企业…

Java IO与NIO的对决:一场变革性的I/O架构较量及其实战演绎

在Java编程中&#xff0c;IO&#xff08;Input/Output&#xff09;和NIO&#xff08;New Input/Output&#xff09;是两种处理输入输出操作的关键API。虽然它们的目的都是为了进行数据的读写操作&#xff0c;但在设计理念、性能表现以及使用场景上有着显著的区别。本文将通过实…

独立游戏《星尘异变》UE5 C++程序开发日志3——UEC++特供的数据类型

本篇日志将介绍FString&#xff0c;FText、FName的用法和相互转换&#xff0c;以及容器TMap&#xff0c;TArray的增删查改 一、字符串相关数据类型&#xff1a;FString、FText、FName FString是最接近std::string的类型&#xff0c;字符串本身可以看做一个存储char型的动态数…

【Django学习笔记(二)】CSS语言介绍

CSS语言介绍 前言正文1、CSS 快速了解2、CSS 应用方式2.1 在标签上应用2.2 在head标签中写style标签2.3 写到文件中 3、问题探讨&#xff1a;用Flask框架开发不方便4、选择器4.1 ID选择器4.2 类选择器4.3 标签选择器4.4 属性选择器4.5 后代选择器4.6 注意事项 5、样式5.1 高度和…

x86_64 ubuntu22.04编译MetaRTC

metaRTC5.0 API https://github.com/metartc/metaRTC/wiki/metaRTC5.0-API Sample https://github.com/metartc/metaRTC/wiki/metaRTC5.0-API-Sample MetaRTC7.0编译 https://github.com/metartc/metaRTC/wiki/Here-we-come,-write-a-C-version-of-webRTC-that-runs-everywhere…

【RISC-V】如何使用release的risc-v gnu toolchain

riscv64-elf-ubuntu-22.04-gcc-nightly-2024.03.01-nightly.tar.gz 首先去release页面中获取相应的压缩包 将压缩包解压到想解压的位置&#xff0c;这里我选择了 mv Downloads/riscv64-elf-ubuntu-22.04-gcc-nightly-2024.03.01-nightly.tar.gz riscv64-tool-chain/然后解压…

python 字典练习

# 字典练习1 import time def main():month_income{1月: 8000, 2月: 8200, 3月: 7900, 4月: 6900, 5月: 8900, 6月: 12000, 7月: 8900, 8月: 6000,9月: 8900, 10月: 9200, 11月: 6200, 12月: 7000}year_income0for k,v in month_income.items():print(月份→,k,工资→,v)time.s…

中国香港男歌手张国荣 明星网页成品 html人物明星网页设计制作 明星前端网页开发 网页期末设计制作作业成品

中国香港男歌手张国荣 7页面 人物明星主题 带设计说明 jquery图片轮播特效 滚动文字 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns"http://ww…

R语言数据分析基础(二)

R语言和Python的pandas库都用于数据处理和分析&#xff0c;但它们在语法和功能上有所不同。R语言主要用于统计计算和图形生成&#xff0c;而pandas则专注于数据处理和分析。 以下是一些R语言中实现pandas相似操作的方法&#xff1a; 数据框&#xff08;Data Frame&#xff09;…

【c++】类和对象(五)赋值运算符重载

&#x1f525;个人主页&#xff1a;Quitecoder &#x1f525;专栏&#xff1a;c笔记仓 朋友们大家好&#xff0c;本篇文章带大家认识赋值运算符重载&#xff0c;const成员&#xff0c;取地址及const取地址操作符重载等内容 目录 1.赋值运算符重载1.1运算符重载1.1.1特性&#…

刷题之动态规划

前言 大家好&#xff0c;我是jiantaoyab&#xff0c;开始刷动态规划的题目了&#xff0c;要特别注意初始化的时候给什么值。 动态规划5个步骤 状态表示 &#xff1a;dp数组中每一个下标对应值的含义是什么->dp[i]表示什么状态转移方程&#xff1a; dp[i] 等于什么1 和 2 是…

软考101-上午题-【信息安全】-网络安全

一、网络安全 1-1、安全协议 SSL(Secure Socket Layer&#xff0c;安全套接层)是 Netscape 于 1994年开发的传输层安全协议&#xff0c;用于实现 Web 安全通信。1996 年发布的 SSL3.0 协议草案已经成为一个事实上的Web 安全标准。 端口号是43。 SSL HTTP HTTPS TLS(Transpo…

uniapp中怎么引入echarts(最简单)

目录 引言 echarts.vue 文件代码 echarts-config 文件代码 在需要引入echarts图表的页面(.vue)中进行导入该文件(echarts.vue) 使用该组件(echarts) 引言 在uniapp中需要引入echarts时的时候,需要引入两个配置文件.分别是 echarts.vue 以及 echarts-config 放在你项目中…

XXE漏洞知识及ctfshow例题

XXE漏洞相关知识 XXE全称为XML Enternal Entity Injection 中文叫xml外部实体注入 什么是xml 简单了解XML&#xff1a; &#xff08;xml和html的区别可以简易的理解成&#xff1a;xml是用来储存数据和传输数据的而html是用来将数据展现出来&#xff09; XML 指可扩展标记语…

Leetcode 680. 验证回文串 II

给你一个字符串 s&#xff0c;最多 可以从中删除一个字符。 请你判断 s 是否能成为回文字符串&#xff1a;如果能&#xff0c;返回 true &#xff1b;否则&#xff0c;返回 false 。 示例 1&#xff1a; 输入&#xff1a;s “aba” 输出&#xff1a;true 示例 2&#xff1a…

vue3封装Element导航菜单

1. 导航外层布局 AsideView.vue <template><el-menu:default-active"defaultActive"class"my-menu":collapse"isCollapse":collapse-transition"false"open"handleOpen"close"handleClose"><menu…