指针和数组以及自定义数据类型在PLC编程中的应用 点击:10659 | 回复:9



watermelon123

    
  • 精华:0帖
  • 求助:9帖
  • 帖子:43帖 | 355回
  • 年度积分:2436
  • 历史总积分:14555
  • 注册:2011年9月09日
发表于:2012-12-04 22:44:03
楼主
 

 

     在现在工控行业的发展中,越来越多的设备控制都不局限于简单的继电器或者I/O控制,都趋向于集成功能化和高性能化的发展,更加智能。因此,对于数据处理以及复杂数学运算的要求越来越高。所以,目前市面上新出的PLC或者控制器都趋向于能做复杂数学运算大存储量的方向发展,编程语言也趋向于支持多样化,简单化,向着高级语言方向发展。目前在国际IEC61131中支持的编程语言:语句表(IL,梯形图(LD),功能块(FBD),顺序功能图(SFC),结构文本(ST),还有一种极少支持的连续功能图(CFC)目前不属于该标准之内。

     指针和数组都是在处理大的数据库会用到,比如强大的配方(上万种的),强大是数据交流,比如PLC之间或者与上位机之间的数据交换采集显示等。而得益于ST的编程方式使得我们以前得用梯形图编写上百行或者千行的程序我们现在仅此几行或者几十行就搞定了。

     指针是一个特殊的变量,它里面存储的数值被解释成为内存里的一个地址。要搞清一个指针需要搞清指针的四方面的内容:指针的类型,指针所指向的类型,指针的值或者叫指针所指向的内存区,还有指针本身所占据的内存区。

数组是在程序设计中,为了处理方便, 把具有相同类型的若干变量按有序的形式组织起来的一种形式。这些按序排列的同类数据元素的集合称为数组。有分一维、二维、多维数组。

自定义数据类型就是用户自定义数据类型名称以及所属归类的数据,可以是单个单类型,也可以是多个多类型。

从上面的定义看指针和自定义数组都可以定义相应的数组在程序的去应用。

     下面就基于施耐德SoMachine编程平台采用ST的编程方式的相关应用。

 

 

例子1指针数组在焊接机的应用:

首先自定义2个指针变量:

pt:POINTER TO UINT;

pt1:POINTER TO UINT;

在定义一个1500个数据的数组用来交换数据

ParaArray: ARRAY【1000..2500】 OF UINT;

因为要和上位机进行数据交换所以必须映射到内部存储区。

然后就是相关的读取和存储数据编程。

如下图:

 

例子2大型数据配方在PLC编程的应用(自定义数据数组应用)

首先建立一个自定义数据库声明文件(dut

 
包含数据类型、名字。

// 总共的数据量(15*32点)

         user_date:ARRAY【1..480】 OF my_dates;

下面就是对于数据的读写操作

 

 该自定义数据数组总共处理15个配方每个配方四个(多的有八个)变量每个变量有32组参数选择。

例子3数组与数组之间处理

自己定义不同的数组但是数据量和类型一样可以选择映射到内部变量或者就纯粹的自定义。

VAR_GLOBAL RETAIN

     ECO AT %MX1000.5: BOOL;

         GXO AT  %MD1:ARRAY【1..102】 OF  REAL ;

AXY :ARRAY【1..102】 OF  REAL;   (*PO*)

Table :ARRAY【1..102】 OF  REAL; 

         PO: UINT;

END_VAR

接下来就运用灵活的C语言对他们进行处理

 

 由此可见这样的编程模式和数据处理方法是不是让我们耳目一新(对于PLC来说),如果再遇到这种强大的数据处理是不是感觉得心应手了呢。

    C语言对于目前来看越来越被人接受,因此PLC行业其发展也逐步向其靠齐,因此搞工控的朋友们C语言还是挺重要的。到时候就知道多一门语言是那么的重要哦。

(水平有限,可能相关定义未解释清楚,各位看官可以百度一下,谢谢!)

 

 

 

 

 

 

 

 

 




abysmal

  • 精华:1帖
  • 求助:0帖
  • 帖子:13帖 | 2178回
  • 年度积分:6
  • 历史总积分:11194
  • 注册:2001年10月26日
发表于:2012-12-05 07:13:11
1楼

没人会质疑C语言的重要性,但是把C语言用于PLC编程则是一种无奈,一种PLC本身语言能力不足或者是编译器 / 解释器低效的无奈。

PLC本身就是一个Single Board Computer,天然支持基于C语言的嵌入式编程。而PLC固件的目的,就是提供一个更加便利和安全的编程界面,避免C语言底层操作带来的风险。

再说,楼主所举的例子,哪里是C语言了?分明是PLC的ST语言。

yuanle

  • 精华:0帖
  • 求助:0帖
  • 帖子:9帖 | 10208回
  • 年度积分:2747
  • 历史总积分:48332
  • 注册:2005年4月22日
发表于:2012-12-05 08:59:00
2楼
IEC61131-3标准并不支持指针~~~~~

miy_gongkong

  • 精华:0帖
  • 求助:2帖
  • 帖子:23帖 | 3065回
  • 年度积分:0
  • 历史总积分:12421
  • 注册:2008年9月18日
发表于:2012-12-05 09:28:07
3楼
引用 yuanle 的回复内容:IEC61131-3标准并不支持指针~~~~~


支持指针类型的,不知道你用的是仕么平台??

watermelon123

  • 精华:0帖
  • 求助:9帖
  • 帖子:43帖 | 355回
  • 年度积分:2436
  • 历史总积分:14555
  • 注册:2011年9月09日
发表于:2012-12-05 10:36:23
4楼
回复内容:
对:abysmal关于没人会质疑C语言的重要性,但是把C语言用于PLC编程则是一种无奈,一种PLC本身语言能力不足或者是编译器 / 解释器低效的无奈。PLC本身就是一个Single Board Computer,天然支持基于C语言的嵌入式编程。而PLC固件的目的,就是提供一个更加便利和安全的编程界面,避免C语言底层操作带来的风险。再说,楼主所举的例子,哪里是C语言了?分明是PLC的ST语言。内容的回复:

st语言是基于c语言的开发语言,所用到的就是C语言的基本语法,并未涉及深层的C语言。难道你不觉得这样的编程方式会带来更多的方便。

qinghang

  • 精华:0帖
  • 求助:3帖
  • 帖子:20帖 | 1090回
  • 年度积分:5
  • 历史总积分:3153
  • 注册:2010年8月04日
发表于:2016-04-22 21:58:49
5楼

个人感觉,未来自动化发展还是会用C等基础语言去做,毕竟他的优势很明显,尤其在大型项目上就很突出。

watermelon123

  • 精华:0帖
  • 求助:9帖
  • 帖子:43帖 | 355回
  • 年度积分:2436
  • 历史总积分:14555
  • 注册:2011年9月09日
发表于:2016-04-27 15:24:31
6楼

回复内容:

对:abysmal 没人会质疑C语言的重要性,但是把C语言用于PLC编程则是一种无奈,一种PLC本身语言能力不足或者是编译器 / 解释器低效的无奈。PLC本身就是一个Single Board Computer,天然支持基于C语言的嵌入式编程。而PLC固件的目的,就是提供一个更加便利和安全的编程界面,避免C语言底层操作带来的风险。再说,楼主所举的例子,哪里是C语言了?分明是PLC的ST语言。     内容的回复:

朋友不知您是否有区分出st语言和c语言

gongweiyu

  • 精华:0帖
  • 求助:0帖
  • 帖子:0帖 | 66回
  • 年度积分:0
  • 历史总积分:0
  • 注册:2011年9月05日
发表于:2016-04-27 19:00:58
7楼

st语言是基于c语言的开发语言,所用到的就是C语言的基本语法,并未涉及深层的C语言。难道你不觉得这样的编程方式会带来更多的方便。

luanshiqiye

  • 精华:0帖
  • 求助:0帖
  • 帖子:1帖 | 599回
  • 年度积分:0
  • 历史总积分:73
  • 注册:2013年2月26日
发表于:2016-04-27 21:07:41
8楼


回复内容:

对: abysmal 没人会质疑C语言的重要性,但是把C语言用于PLC编程则... 内容的回复!

是ST语言   类似于PASCAL语言

diaonima

  • 精华:0帖
  • 求助:0帖
  • 帖子:7帖 | 617回
  • 年度积分:0
  • 历史总积分:866
  • 注册:2008年5月30日
发表于:2016-05-01 11:24:12
9楼

这是类C语言啊!掌握了语规则!


热门招聘
相关主题

官方公众号

智造工程师