| 作者 | 主题 |
|---|---|
|
WWCWWC 至圣
经验值:79270 发帖数:9118 精华帖:157 |
楼主
主题:【SCL编程案例】SCL编程-----数据记录
SCL编程-----数据记录 随着编程语言SCL的逐步普及和推广,越来越多的编程者会熟悉SCL编程方式,应用掌握SCL编程语言方式,其强大的运算能力,被得到用户的认可。 虚拟的工作场景: 创建一个数据记录功能项目,将数据记录通过一个外部的数据记录开关,将需要记录的数据逐个记录到数据块各存储地址中,假设数据记录的长度为10个数据长度,实际上用户需要多大的数据记录空间,也仅仅只是在SCL编程中,规范一下数据记录的长度而已,为方便说明这里暂定10个DINT数据,图示:利用数组创建Array[0…9] of DINT,在DB2中创建,并取消优化访问,方便观看数据记录在存储区的地址转移记录过程。 创建数据记录接口,FB1图示: 编辑SCL数据记录程序,图示: 数据记录程序理解起来也非常简单,程序解释: 当数据记录开关 = 1,进行数据记录的操作,满足了IF条件判断,则程序自此处开始运行,一直到END_IF为止的所有程序段内容。首先,数据记录顺序排列J = 0 + 1,结果J = 1,而源数据侧有一个100的数据待记录,将准备从“源数据入口”进入数据记录的表格中,那么,源数据入口100的数据,被记录到数据[#j]中,数据记录的程序有OB1调用FB1,填写实参后,相当于DB2.DBD40的数据,被写入到DB2.DBD4中,结果DB2.DBD4 = 100,程序继续运行到FALSE写入数据记录开关值,关闭数据记录开关是为了接通开关只记录一次,然后将记录的数据传送到数据记录的表格,以便下一次的数据记录存放存储区,作为中间传递。这样完成一次完整的接通数据记录,开关开到关只能记录一次,直到数据记录开关的接通累加次数为9时,清除这个累加的数据,以便下一个10次的数据记录做准备。用户如果需要记录100个数据,只需要将DB2扩充相应的数据记录区域外,在此处改为,程序: IF #j = 99 THEN //如果数据记录到达第100个,则 #j := 0; 就能够满足数据记录的表格长度需要。 第一次的数据记录,图示: M0.0作为验证程序的内部变量,添加到FB1的外部接口中,实现程序的模拟仿真。 当M0.0 = 1,第一次接通后,DB2,DBD0 = 1(第一个数据记录),DB2.DBD4 = 100;将源数据修改为200后,再次接通M0.0 = 1,程序运行结果图示: 程序运行的结果是,DB2.DBD4 = 100存放第一次数据,DB2.DBD8 = 200存放第二次数据,同时,数据记录次数寄存器DB2.DBD0 = 2显示已经记录的数据为第2次的数据记录,以此类推,直到DB2.DBD36被存放到源自DB2.DBD40的数据为止,结束一个完整的数据记录。 SCL程序源码: IF #i = NOT #数据记录开关 THEN //如果数据记录开关 = 1,则进行数据记录。 #j := #j + 1; //数据顺序排列。 #数据[#j] := #源数据入口; //写入数据。 #数据记录开关:= FALSE; //关闭数据记录开关,等待下一次开关闭合。 #存入表格[#j] := #数据[#j]; //记录的数据触发到表格。 IF #j = 9 THEN //如果数据记录到达第10个,则 #j := 0; //将数据记录个数清0,作为下一次记录做准备。 END_IF; END_IF; #存入表格[0] := #j; //数据记录的首寄存器作为数据记录个数的记录存储区。 程序附件: |