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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

UE5 SQLite笔记

开发环境: 系统:Windows 10 64 bit 引擎:Unreal Engine 5.1.1 IDE:JetBrains Rider 2023.2.1 语言:C 工具:DB Browser for SQLite SQLite数据类型: //INTEGER TEXT BLOB REAL NUMERIC/*integer…

家庭网络防御系统搭建-配置流量镜像到NDR系统

由于需要将家庭网络中的全部流量送到NDR分析系统进行分析,因此需要一个具备流量镜像功能的交换机或者路由器。在前面文章所提及的家庭网络架构中,需要一台交换机即可拷贝东西向流量以及南北向流量。当然如果家庭中的路由器或者其他设备具备交换机镜像功能…

EXCEL通过VBA字典快速分类求和

EXCEL通过VBA字典快速分类求和 汇总截图 Option ExplicitOption Explicit Sub answer3() Dim wb As Workbook Dim sht As Worksheet Set wb ThisWorkbook Set sht wb.Worksheets(2) Dim ss1 As Integer Dim ss2 As Integer Dim i As Integer Dim j As Integer j 1Dim aa()…

Moonbeam 开发工具集合:打造 Web3 开发游乐场

原文:https://moonbeam.network/blog/moonbeam-developer-tooling-ecosystem/ 作者:Moonbeam 团队 编译:OneBlock Moonbeam 一直以来都在支持以太坊和 Dotsama 生态系统中的构建者和开发者。它特别为 Solidity 开发者提供了熟悉的工具&…

vue2处理跨域问题

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

react Audio 倒计时5秒,每秒播放一次音频

文章目录 1. react 倒计时 每秒播放一次音频简单demo代码2. 问题及处理方式2.1 Audio 引入出现的报错2.2 解决方法 1. react 倒计时 每秒播放一次音频简单demo代码 import React, { useState,useRef } from react; import redBagMp3 from /branch/assets/mp3/redBag.mp3 const…

Swift:“逻辑运算子“与“比较运算符“

1. 逻辑非 ! 逻辑非运算符 ! 是用于对布尔值取反的。当操作数为 true 时&#xff0c;! 将返回 false&#xff0c;而当操作数为 false 时&#xff0c;! 将返回 true。 let isTrue true let isFalse !isTrue // isFalse 现在是 false 2. 逻辑与 && 逻辑与运算符 &a…

spring-boot之接口文档Swagger配置使用

Swagger 前后端分离 Vue SpringBoot 后端时代:前端只用管理静态页面; html> 后端。模板引擎JSP >后端是主力 前后端分离式时代: ●后端:后端控制层&#xff0c;服务层,数据访问层[后端团队] ●前端:前端控制层&#xff0c;视图层[前端团队] 。伪造后端数据&#xff0c;…

Oracle Cloud公布 | 每小时 126 亿次 SQL 数据库查询

广而告之&#xff1a;2024 年数据技术嘉年华大会将于 4 月12-13 日在北京召开&#xff0c;春暖花开之际&#xff0c;数据库行业蓬勃发展之时&#xff0c;广邀天下豪杰&#xff0c;相聚北京&#xff0c;共论数据库技术发展的创新与未来。 注册&#xff1a;https://www.modb.pro/…

链表合集(easy难度)

合并两个有序链表 双指针法 由于list1和list2都是递增的&#xff0c;可以想到用双指针法。假如当前list1这个指针指向的节点被收入完成&#xff0c;那就list1&#xff1b;如果是list2被收入&#xff0c;那就list2。 具体是list1和节点被收入还是list2的节点被收入&#xff…

Java NIO详解

一、概念 NIO, 即new io&#xff0c;也叫非阻塞io 二、NIO三个核心组件&#xff1a; Buffer数据缓冲区Channel通道Selector选择器 1、Buffer缓冲区 缓冲区本质上是一个可以存放数据的内存块&#xff08;类似数组&#xff09;&#xff0c;可以在这里进行数据写入和读取。此…

webpack项目打包console git分支、打包时间等信息 exec

相关链接 MDN toLocaleString child_process Node.js strftime 格式 代码 buildinfo.js const { execSync, exec } require("child_process"); // exec: 在 Windows 执行 bat 和 cmd 脚本// execSync 同步 // exec 异步// exec 使用方法 // exec(git show -s,…

notepad++里安装32位和64位的16进制编辑器Hex-Editor

这个16进制编辑器确实是个好东西&#xff0c;平时工作种会经常用到&#xff0c; 这是hex-editor的官网。这个里边只能下载32位的(64位的看最下边)&#xff0c;选一个合适的版本&#xff0c;我当时选的是最新的版本 https://sourceforge.net/projects/npp-plugins/files/Hex%20E…

[机器学习]练习KNN算法-曼哈顿距离

曼哈顿距离(Manhattan distance) 曼哈顿距离是指在几何空间中两点之间的距离&#xff0c;其计算方法是通过将两点在各个坐标轴上的差值的绝对值相加得到。在二维空间中&#xff0c;曼哈顿距离可以表示为两点在横纵坐标上的差值的绝对值之和&#xff1b;在三维空间中&#xff0…

物联网实战--入门篇之(三)嵌入式STM32

目录 一、Keil简介 二、工程结构 三、文件目录 四、STM32简介 五、编码风格 六、总结 一、Keil简介 Keil是一款常用的单片机开发工具&#xff0c;主要包含了编译、仿真、调试和开发界面(IDE)&#xff0c;后被ARM公司收购&#xff0c;与其MDK-ARM合并为MDK-ARM Keil软件包…

如何用 C++ 部署深度学习模型?

深度学习模型在诸多领域如图像识别、自然语言处理、语音识别等展现出强大的应用潜力。然而&#xff0c;模型训练与实际部署是两个不同的环节&#xff0c;许多开发者在使用Python进行模型训练后&#xff0c;出于性能、集成便利性或特定平台要求等因素&#xff0c;会选择使用C进行…

[机器学习]练习-KNN算法

1&#xff0e;&#x1d458;近邻法是基本且简单的分类与回归方法。&#x1d458;近邻法的基本做法是&#xff1a;对给定的训练实例点和输入实例点&#xff0c;首先确定输入实例点的&#x1d458;个最近邻训练实例点&#xff0c;然后利用这&#x1d458;个训练实例点的类的多数来…

基于单片机声音分贝采集和显示控制系统设计

**单片机设计介绍&#xff0c;基于单片机声音分贝采集和显示控制系统设计 文章目录 一 概要二、功能设计设计思路 三、 软件设计原理图 五、 程序六、 文章目录 一 概要 基于单片机声音分贝采集和显示控制系统设计&#xff0c;主要目标是实现声音分贝的实时采集、处理以及显示…

Java复习第十三天学习笔记(HTML),附有道云笔记链接

【有道云笔记】十三 3.29 HTML https://note.youdao.com/s/Ru3zoNqM 一、基本标签 HTML:超文本标记语言 定义页面结构 CSS&#xff1a;层叠样式表 页面显示的样式、排版 BootStrap JS: JavaScript 界面交互(动态交互、逻辑) JQuery <!DOCTYPE html> <html> &l…

[羊城杯 2020]EasySer

[羊城杯 2020]EasySer 进入页面&#xff0c;发现是ubuntuapache2&#xff0c;但是好像没啥用 尝试访问/robots.txt&#xff0c;得到 访问/star1.php/&#xff0c;查看源码&#xff0c;得到提示 一看就知道是ssrf&#xff0c;使用http://127.0.0.1/ser.php&#xff0c;得到…