发这个帖子也是因为有客户需求想用PLC支持C语言来解决一些复杂运算的程序或者提升程序运行效率和速度的问题,所以就跟大家交流下对PLC支持ST语言或C语言哪个比较好,下面是PLC支持C语言的应用方案,分享出来给大家仅供学习交流:
1、插入后打开C代码块接口编辑画面
可以使用来FC的编辑窗口类似,只是变量类型,数据类型不同,修改后自动生成C代码模板。
确定之后使用模板生成:
基本上数据类型如下:
所有提供指针均使用 void* 型,让用户在C代码中进行强制转换,
返回值为空,返回结果,可通过指针传递。
提供编译编译按键,用户点击后,将所有的C代码块生成一个或多个.C文件(注意隐藏,可能涉及代码保密),文件的头部增加每种PLC特定的头文件 #include”plc.h”, 此头文件中包括一些数据类型定义,大小端转换,PLC固件提供给C代码模块的函数指针数组等等。
编译调用每款PLC提供的链接文件plc.lds,makefile文件模板
Plc.lds生成的bin文件的链接地址,指定了生成的代码段(.text),数据段.data,未初始化数据段(.bss)。如下图:
输出编译过程和结果,编译失败输出报错,编译成功
生成bin文件,以及.map文件。
编程软件需要从.map文件里面提取 .text起始和大小 , .data段起始大小, .bss段起始大小。 各C 代码函数的入口地址。
2.C代码的调用规则
用户在STL里调用C语言,直接使用如同普通的FC或FB块使用Call调用即可。
3.C代码库的制作规则
上位机提供制作C代码库的,可以制作C代码库。库的使用与普通的STL库一样。我们可以通过前期提供一些库代码样例,向用户演示如何使用C语言功能。
后续一些内部库,也可以通过C库,而不用写入PLC内部。
C代码库的文件存储结构上位机自行确定。
4.C代码块(pou)的存储。
C代码块与FC块结构相关,只是POU类型不一样(类型为05?), 输入输出参数存储也与FC相同。 C代码存储在 Bin 文件的存储结构中,不占用原来的程序块的大小。
5.Bin 文件的存储结构
函数描述:
上位机发送删除程序块时, 本段将从PLC中删除。
下载时如果下载的部份程序块存在C代码段,先要下载本段,才可以下载程序块。
程序上载时,先上载本块,再上载原先的程序块。
6.C代码调用底层函数。
每个PLC提供一个libplc_lib.a 静态库, 实现与plc底层交互函数,需要组态软件链接进去。