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; //数据记录的首寄存器作为数据记录个数的记录存储区。
程序附件:
数据记录SCL.zip