技术论坛

 【SCL编程案例】SCL编程-----数据记录

返回主题列表
作者 主题
WWCWWC
至圣

经验值:79270
发帖数:9118
精华帖:157
楼主    2025-06-05 08:10:17
主题:【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;               //数据记录的首寄存器作为数据记录个数的记录存储区。

程序附件:

数据记录SCL.zip


您收到0封站内信:
×
×
信息提示
很抱歉!您所访问的页面不存在,或网址发生了变化,请稍后再试。