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

这篇具有很好参考价值的文章主要介绍了openPLC_Editor C语言编程 在mp157 arm板上调用io等使用记录。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

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

openplc c 编程,openPLC,openPLC,C语言,io调用示例,linux

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

        3.2 Creating Your First Project on OpenPLC Editor – Autonomy

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

        以下是使用C语言 文件读写 驱动的方式调用io。

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

openplc c 编程,openPLC,openPLC,C语言,io调用示例,linux

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

5.变量定义

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

openplc c 编程,openPLC,openPLC,C语言,io调用示例,linux

 变量的 “位置” 是可以定义 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。

        两个环境的数据类型定义不同,所以不能直接赋值,不然就会报各种数据类型不匹配的错误。  openplc c 编程,openPLC,openPLC,C语言,io调用示例,linux

        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 中添加引用头文件

openplc c 编程,openPLC,openPLC,C语言,io调用示例,linux

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

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

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

        1》 函数的输入输出变量

openplc c 编程,openPLC,openPLC,C语言,io调用示例,linux

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

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

在system 程序中调用

openplc c 编程,openPLC,openPLC,C语言,io调用示例,linux

         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,一个输入开关变量。

openplc c 编程,openPLC,openPLC,C语言,io调用示例,linux

        在system程序中调用   

openplc c 编程,openPLC,openPLC,C语言,io调用示例,linux

         通过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 读数据。

openplc c 编程,openPLC,openPLC,C语言,io调用示例,linux

        调用

        { float adc_get; }

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

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

7. 更改程序循环周期

openplc c 编程,openPLC,openPLC,C语言,io调用示例,linux

 默认是20ms

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

openplc c 编程,openPLC,openPLC,C语言,io调用示例,linux

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

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

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

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

 11. 后续更新 地址映射io,通过读写地址方式读写驱动。

        openplc Linux 地址映射io,读写驱动数据等使用记录-CSDN博客文章来源地址https://www.toymoban.com/news/detail-846900.html

到了这里,关于openPLC_Editor C语言编程 在mp157 arm板上调用io等使用记录的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 自然语言编程系列(二):自然语言处理(NLP)、编程语言处理(PPL)和GitHub Copilot X

           编程语言处理的核心是计算机如何理解和执行预定义的人工语言(编程语言),而自然语言处理则是研究如何使计算机理解并生成非正式、多样化的自然语言。GPT-4.0作为自然语言处理技术的最新迭代,其编程语言处理能力相较于前代模型有了显著提升。Copilot X 构建于

    2024年02月20日
    浏览(65)
  • 模拟计算器编程教程,中文编程开发语言工具编程实例

    模拟计算器编程教程,中文编程开发语言工具编程实例 中文编程系统化教程,不需英语基础。学习链接 ​​​​​​https://edu.csdn.net/course/detail/39036 课程安排:初级1 1  初级概述 2  熟悉构件取值赋值 3 折叠式菜单滑动面板编程 4 自定义图形窗口自定义标题栏编程 5 多行文本

    2024年02月08日
    浏览(64)
  • 【编程语言 · C语言 · 函数指针】

    由于指针可以指向任何存储器位置中的地址,因此它们也可以指向可执行代码的开头。 函数指针或函数指针指向内存中函数的可执行代码。函数指针可以存储在数组中,也可以作为参数传递给其他函数。 函数指针声明使用 * 就像使用任何指针一样: (*func_name)  周围的括号很

    2024年02月10日
    浏览(55)
  • 介绍一些编程语言—C语言

    C 语言是一门 面向过程 的计算机编程语言,与 C++、C#、Java 等面向对象编程语言有所不同。C语言的设计目标是提供一种能以简易的方式编译、处理低级存储器、仅产生少量的机器码以及不需要任何运行环境支持便能运行的编程语言。 C语言描述问题比汇编语言迅速、工作量小

    2024年02月13日
    浏览(49)
  • 介绍一些编程语言— Perl 语言

    Perl 是一种动态解释型的脚本语言。 最初的设计者为拉里・沃尔,它于 1987 1987 1987 年 12 12 12 月 18 18 18 日发表。Perl 借取了 C、sed、awk、shell scripting 以及很多其他编程语言的特性。其中最重要的特性是他内部集成了正则表达式的功能,以及巨大的第三方代码库 CPAN。 1987 1987

    2024年02月12日
    浏览(53)
  • 【编程语言 · C语言 · 字符串】

    C中的字符串是一个以NULL字符\\\'\\0\\\'结尾的字符数组。 字符串声明可以通过多种方式进行,每种方式都有其各自的考虑因素。 例如: 这将创建一个由str_len个字符组成的名为str_name的字符串,并将其初始化为值“ string”。 提供字符串文字以初始化字符串时,编译器会自动将NULL字符

    2024年02月09日
    浏览(43)
  • 【编程语言 · C语言 · while语句】

    循环 在前面我们了解到, 程序在运行时可以通过判断, 检验条件作出选择。此处,程序还必须能够重复, 也就是反复执行一段指令, 直到满足某个条件为止。 while 语句 while语句可以执行循环结构。 语法: 其一般形式如下: while 语句首先检验一个条件,也就是括号中的表达

    2024年02月08日
    浏览(46)
  • 【编程语言 · C语言 · for语句】

    C语言中,使用for语句也可以控制一个循环,并且在每一次循环时修改循环变量。在循环语句中,for语句的应用最为灵活,不仅可以用循环次数已经确定的情况,而且可以用于循环次数不确定而只给出循环结束条件的情况。 for 语法: 执行for语句时,程序首先计算第一个表达式

    2024年02月08日
    浏览(46)
  • GO语言网络编程(并发编程)Channel

    1.1.1 Channel 单纯地将函数并发执行是没有意义的。函数与函数间需要交换数据才能体现并发执行函数的意义。 虽然可以使用共享内存进行数据交换,但是共享内存在不同的goroutine中容易发生竞态问题。为了保证数据交换的正确性,必须使用互斥量对内存进行加锁,这种做法势

    2024年02月09日
    浏览(64)
  • GO语言网络编程(并发编程)select

    1.1.1 select多路复用 在某些场景下我们需要同时从多个通道接收数据。通道在接收数据时,如果没有数据可以接收将会发生阻塞。你也许会写出如下代码使用遍历的方式来实现: 这种方式虽然可以实现从多个通道接收值的需求,但是运行性能会差很多。为了应对这种场景,G

    2024年02月09日
    浏览(75)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包