登录
首页 PLC论坛 施耐德电气PLC
回帖 发帖
正文

主题:编程时用ST语言好?还是直接C语言好?

点击:15385 回复:40

个人观点,PLC之所以叫PLC,是因为在计算机还只有少数人熟悉编程的时候,发明了梯形图,用类似继电器接触器接线图的方式来实现控制程序的编程,简单易用,便于调试,让电气工程师可以完成以前软件程序员完成的工作。PLC做逻辑控制是强项,后来发展到加入模拟量处理、过程控制算法等功能。现在控制领域虽然PLC和DCS在逐步融合,但两者还是各有特点和强项的。我用过多年的梯形图,后来出了ST,FBD等,用FBD就多了,LD只用于逻辑控制。ST很多时候只是一种补充,可能是因为习惯了梯形图和FBD的思路,而且ST也是基于循环执行的,要是在st中写复杂的循环,会让扫描周期变长,影响其他程序。对于复杂的计算,多年来就用过一次,大部分PLC支持自定义功能块,可以用C语言写程序,封装好,来处理一些复杂计算。所以说,要用PLC,还是FBD或梯形图更接近控制的思路,也容易调试和修改,如果大量用到C语言,那就用软控制器好了,直接写控制程序,把结果给IO就行了,最灵活强大。但是想想,等你写完程序交给客户,客户怎么维护和修改?别人怎么快速接手?当然,想保护只是产权除外。
19-11-05 09:22
自己掌握的才是最好的,但环境很重要
你玩C很溜,能够支持C的PLC客户不用,还是一个完
19-11-05 09:38

引用 zhanghaiw 在 2019/11/5 8:50:48 发言【内容省略】

信捷的C目前是实现不了的。
当然你如果扯到高级语言C的话,那么ST也可以扯到高级语言Pascal,那没完没了了。
Good Luck~
19-11-05 14:23
这问题,其实都算不上选择题。。因为大部分情况下都没得选。。
19-11-05 16:39
确实如此。谢谢楼主朋友分享。到底哪种语言更具优势,优势在哪里。很值得探讨的。
19-11-05 17:37
说到信捷,他是通过全局变量调用的,这样在C语言中不是很灵活,而且C语言里也没有头部描述的变量定义。一般使用指针的方式来调用会比较灵活,同时定义指针支持下面的数据类型还是能够有优势的
BOOL;     //布尔量
INT8U;    //8位无符号整数
INT8S;    //8位有符号整数
INT16U    //16位无符号整数
INT16S    //16位有符号整数
INT32U    //32位无符号整数
INT32S    //32位有符号整数
如果是定义指针对于浮点型数据类型:
FP32;     //单精度浮点
FP64;    //双精度浮点
就要考虑浮点数复杂运算能力了,如果芯片内部支持浮点数运算,一般可以解决这个问题,要是部分浮点数运算不能在芯片内部运算完成,这样就要通过转换为实数进行外部运算啦。
最后修改:2019/11/5 21:10:51
19-11-05 21:09
越简单能实现功能的语言就是最好的,毕竟考虑到维保和工作交接。。写高级语言你确定维修工能看懂。。。
19-11-05 23:10
以前用信捷的时候没用这么高级,指针那时候似乎不支持,或者没注意。
顺便,你这么高级的用法,有案例没有,可以发出来分享一下。
都用到指针了,不是一般技术员能够随便掌握的。
19-11-06 07:54
写程序实现控制功能只是第一步,控制程序要易于维护修改,易于调试,能够被相关人员理解,都是很重要的。想像一下前后工序的人都看着你,需要你尽快解决问题,梯形图上亮线到哪里,一眼就能找到原因,C语言的指针转到哪里了,就算你天纵聪明,以后客户的维护人员能看懂吗?客户工艺变化,需要做些小调整,半夜喊你去,你还能分分钟解决问题吗?你一个小小的错误,可能现场价值千万的设备就毁了。。。用最简单最直观的方法解决问题,永远是最好的。就像波音的新飞机,我相信程序设计没有问题,但他们没有把控制逻辑和飞行员交代清楚,飞行员在紧急情况下意识不到程序会有什么样的动作,当然不能合理操作解决问题,就算10秒后明白了,也晚了。。。
瞎扯几句,供大家消遣。
19-11-06 09:31
发这个帖子也是因为有客户需求想用PLC支持C语言来解决一些复杂运算的程序或者提升程序运行效率和速度的问题,所以就跟大家交流下对PLC支持ST语言或C语言哪个比较好,下面是PLC支持C语言的应用方案,分享出来给大家仅供学习交流:
1、插入后打开C代码块接口编辑画面
附件 1.jpg
可以使用来FC的编辑窗口类似,只是变量类型,数据类型不同,修改后自动生成C代码模板。
附件 2.jpg
确定之后使用模板生成:
附件 3.jpg
基本上数据类型如下:
附件 4.jpg
所有提供指针均使用 void* 型,让用户在C代码中进行强制转换,
返回值为空,返回结果,可通过指针传递。
提供编译编译按键,用户点击后,将所有的C代码块生成一个或多个.C文件(注意隐藏,可能涉及代码保密),文件的头部增加每种PLC特定的头文件  #include”plc.h”, 此头文件中包括一些数据类型定义,大小端转换,PLC固件提供给C代码模块的函数指针数组等等。
编译调用每款PLC提供的链接文件plc.lds,makefile文件模板
Plc.lds生成的bin文件的链接地址,指定了生成的代码段(.text),数据段.data,未初始化数据段(.bss)。如下图:
附件 5.jpg
输出编译过程和结果,编译失败输出报错,编译成功
生成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 文件的存储结构
附件 6.jpg
函数描述:
附件 7.jpg
上位机发送删除程序块时, 本段将从PLC中删除。
下载时如果下载的部份程序块存在C代码段,先要下载本段,才可以下载程序块。
程序上载时,先上载本块,再上载原先的程序块。
6.C代码调用底层函数。
每个PLC提供一个libplc_lib.a 静态库, 实现与plc底层交互函数,需要组态软件链接进去。
19-11-06 09:32

上一页 下一页

工控新闻

更多新闻资讯