1、指令分为单扫描周期指令和多扫描周期指令。对于多扫描周期指令,如果EN或者REQ只使能一个扫描周期,该指令不能成功执行;例如大多数的通信指令;
2、FB块的输入输出形参存储于背景数据块中,在调用该FB时实参可选;而FC块的输入输出是临时内存,必须*实参才能运行;
3、FB块的输入输出虽不是静态变量,但亦有保持功能,具体视程序而定;
4、注意变量被多次赋值时的先后顺序!因为变量的值总会被较后执行动作更新,前面的值将被覆盖;例如下图:
程序初衷为当接受响应完成时ERR置位,或响应**时ERR置位。上述程序是可以完成正常功能的;但若二者互换,如下图
程序初衷为当接受响应完成时ERR置位,或响应**时ERR置位。上述程序是可以完成正常功能的;但若二者互换,如下图
接收**时时,ERR不会置位,因为rev_done为0,ERR被复位!5、STEP 7中的梯形图操作数、能流的监控特征色(蓝绿)、以及监控表中的布尔变量的刷新频率有限,可能不能反映真实的实时运行状况,可借助一个累加器来监视程序的运行状态;例如下图:
接收**时时,ERR不会置位,因为rev_done为0,ERR被复位!5、STEP 7中的梯形图操作数、能流的监控特征色(蓝绿)、以及监控表中的布尔变量的刷新频率有限,可能不能反映真实的实时运行状况,可借助一个累加器来监视程序的运行状态;例如下图:
接收**时时,ERR不会置位,因为rev_done为0,ERR被复位!
5、STEP 7中的梯形图操作数、能流的监控特征色(蓝绿)、以及监控表中的布尔变量的刷新频率有限,可能不能反映真实的实时运行状况,可借助一个累加器来监视程序的运行状态;例如下图:
6、单个扫描周期中,一个布尔变量的上升/下降沿只能读取一次;因为读取一次之后,其Pre变量已被立即刷新,后续的读取不能成功读到该变量的状态变化;7、数组访问越界将导致CPU错误,ERR灯闪烁;8、单扫描周期指令的循环操作是在单扫描周期完成的;9、多使用宏定义,可使程序易读、方便修改;10、关于能流:(1)能流流经某个具备EN和ENO的指令,并不一定代表该指令功能执行完成,只代表该扫描周期扫描完成;(2)算数运算、bool变量操作等单扫描周期指令的ENO输出代表该指令执行完成。11、FB/FC的EN端将为能流提供扫描通道,EN端断路,能流无扫描通路,内部变量将不再刷新,即该函数不再执行;当FB/FC的EN端总是使能,Enable输入断开,块内部仍有能流通路,相应变量会被扫描以致刷新;请注意二者区别;例见下图:
6、单个扫描周期中,一个布尔变量的上升/下降沿只能读取一次;因为读取一次之后,其Pre变量已被立即刷新,后续的读取不能成功读到该变量的状态变化;7、数组访问越界将导致CPU错误,ERR灯闪烁;8、单扫描周期指令的循环操作是在单扫描周期完成的;9、多使用宏定义,可使程序易读、方便修改;10、关于能流:(1)能流流经某个具备EN和ENO的指令,并不一定代表该指令功能执行完成,只代表该扫描周期扫描完成;(2)算数运算、bool变量操作等单扫描周期指令的ENO输出代表该指令执行完成。11、FB/FC的EN端将为能流提供扫描通道,EN端断路,能流无扫描通路,内部变量将不再刷新,即该函数不再执行;当FB/FC的EN端总是使能,Enable输入断开,块内部仍有能流通路,相应变量会被扫描以致刷新;请注意二者区别;例见下图:
6、单个扫描周期中,一个布尔变量的上升/下降沿只能读取一次;因为读取一次之后,其Pre变量已被立即刷新,后续的读取不能成功读到该变量的状态变化;
7、数组访问越界将导致CPU错误,ERR灯闪烁;
8、单扫描周期指令的循环操作是在单扫描周期完成的;
9、多使用宏定义,可使程序易读、方便修改;
10、关于能流:(1)能流流经某个具备EN和ENO的指令,并不一定代表该指令功能执行完成,只代表该扫描周期扫描完成;(2)算数运算、bool变量操作等单扫描周期指令的ENO输出代表该指令执行完成。
11、FB/FC的EN端将为能流提供扫描通道,EN端断路,能流无扫描通路,内部变量将不再刷新,即该函数不再执行;当FB/FC的EN端总是使能,Enable输入断开,块内部仍有能流通路,相应变量会被扫描以致刷新
1.通过OB1的启动参数读出运行时间在非优化的OB1启动信息中带有OB1的运行时间,如图1所示。
图1.读出非优化的OB1中运行时间将启动信息参数传递到全局变量中就可以读出CPU的上次扫描、较小、较大扫描时间,编程非常方便。2.调用RD_SINFO函数读出运行时间如果使用优化的OB1,启动信息简化而没有这些运行信息,如图2所示,则必须调用函数读出。
图1.读出非优化的OB1中运行时间将启动信息参数传递到全局变量中就可以读出CPU的上次扫描、较小、较大扫描时间,编程非常方便。2.调用RD_SINFO函数读出运行时间如果使用优化的OB1,启动信息简化而没有这些运行信息,如图2所示,则必须调用函数读出。
图1.读出非优化的OB1中运行时间
将启动信息参数传递到全局变量中就可以读出CPU的上次扫描、较小、较大扫描时间,编程非常方便。
2.调用RD_SINFO函数读出运行时间
如果使用优化的OB1,启动信息简化而没有这些运行信息,如图2所示,则必须调用函数读出。
图2优化OB1的启动信息例如在OB1中调用RD_SINFO函数读出运行时间,程序如图3所示。参数TOP_SI为当前OB1的启动信息,数据类型为SI_classic,需要手动键入,ZI1为上次扫描时间,ZI2_3包含较小、较大扫描时间,低字为较小扫描时间,高字为较大扫描时间,示例中分别传送到MW10和MW12中。START_UP_SI为暖启动OB的启动信息,示例中没有进行引用。
图2优化OB1的启动信息例如在OB1中调用RD_SINFO函数读出运行时间,程序如图3所示。参数TOP_SI为当前OB1的启动信息,数据类型为SI_classic,需要手动键入,ZI1为上次扫描时间,ZI2_3包含较小、较大扫描时间,低字为较小扫描时间,高字为较大扫描时间,示例中分别传送到MW10和MW12中。START_UP_SI为暖启动OB的启动信息,示例中没有进行引用。
图2优化OB1的启动信息
例如在OB1中调用RD_SINFO函数读出运行时间,程序如图3所示。参数TOP_SI为当前OB1的启动信息,数据类型为SI_classic,需要手动键入,ZI1为上次扫描时间,ZI2_3包含较小、较大扫描时间,低字为较小扫描时间,高字为较大扫描时间,示例中分别传送到MW10和MW12中。START_UP_SI为暖启动OB的启动信息,示例中没有进行引用。
图3调用RD_SINFO函数3.调用RT_INFO函数读出运行时间通过函数RT_INFO也可以读出CPU的运行时间,示例程序如图4所示。
图3调用RD_SINFO函数3.调用RT_INFO函数读出运行时间通过函数RT_INFO也可以读出CPU的运行时间,示例程序如图4所示。
图3调用RD_SINFO函数
3.调用RT_INFO函数读出运行时间
通过函数RT_INFO也可以读出CPU的运行时间,示例程序如图4所示。
图4调用RT_INFO函数通过模式1、2、3可以读出CPU的上次扫描、较小、较大扫描时间,在这三种模式下,参数INFO的数据类型为LTIME,可以直接读出。也可以通过其他模式读出运行时间的百分比。4.调用RUNTIME指令读出运行时间通过指令RUNTIME可以从参数RET_Val直接读出CPU的运行时间,单位为秒,MEM为中间保存程序运行的存储器,两个参数类型都是LREAL,除此之外还可以读出一段程序的运行时间。如图5所示。
图4调用RT_INFO函数通过模式1、2、3可以读出CPU的上次扫描、较小、较大扫描时间,在这三种模式下,参数INFO的数据类型为LTIME,可以直接读出。也可以通过其他模式读出运行时间的百分比。4.调用RUNTIME指令读出运行时间通过指令RUNTIME可以从参数RET_Val直接读出CPU的运行时间,单位为秒,MEM为中间保存程序运行的存储器,两个参数类型都是LREAL,除此之外还可以读出一段程序的运行时间。如图5所示。
图4调用RT_INFO函数
通过模式1、2、3可以读出CPU的上次扫描、较小、较大扫描时间,在这三种模式下,参数INFO的数据类型为LTIME,可以直接读出。也可以通过其他模式读出运行时间的百分比。
4.调用RUNTIME指令读出运行时间
通过指令RUNTIME可以从参数RET_Val直接读出CPU的运行时间,单位为秒,MEM为中间保存程序运行的存储器,两个参数类型都是LREAL,除此之外还可以读出一段程序的运行时间。如图5所示。
1、激活“手动输入”后可以在此对话框中修改PID参数,须重新下载PID组态。因为工艺对象背景数据块的数据结构未发生变化,需要CPU从STOP到RUN后才生效。
2、或者通过其他途径修改参数,可直接在PID的背景数据块里修改相应参数,参数实时生效,且不需要从新下载或STOP-RUN。PID的增益积分微分这几个参数具有保持性,不用担心断电会丢失,操作如下:
用户:好的,PID参数这部分已了解。请问,PID输出限值可以修改吗。工程师:可以通过组态界面或者上面提到的背景数据块来修改,注意数值范围:
用户:好的,PID参数这部分已了解。请问,PID输出限值可以修改吗。工程师:可以通过组态界面或者上面提到的背景数据块来修改,注意数值范围:
用户:好的,PID参数这部分已了解。请问,PID输出限值可以修改吗。
工程师:可以通过组态界面或者上面提到的背景数据块来修改,注意数值范围:
用户:组态界面修改还是需要下载后从新启动plc,背景数据块修改实时生效吗?工程师:实时修改背景数据块参数可以即时生效。不过,输出限值这类参数很少有应用要实时更改的,通常需要修改的也就比例积分微分这些参数。用户:我这个系统很特别,夏天时输出较大值至60%,冬天时输出较大值至**。这通过触摸屏的按钮切换。工程师:哦,工业应用的需求确实各种各样。既然是通过触摸屏来改参数,那么还需要注意这几个参数不具有保持性,如果仅通过背景数据块修改让它生效了,但若PLC停机再从起的话,数据又恢复到之前组态的数据了。因为只有通过组态界面修改并下载的,才是直接修改数据块的初始值,而您说的这种触摸屏修改参数的方法仅是修改当前值,又没法断电保持。
用户:组态界面修改还是需要下载后从新启动plc,背景数据块修改实时生效吗?工程师:实时修改背景数据块参数可以即时生效。不过,输出限值这类参数很少有应用要实时更改的,通常需要修改的也就比例积分微分这些参数。用户:我这个系统很特别,夏天时输出较大值至60%,冬天时输出较大值至**。这通过触摸屏的按钮切换。工程师:哦,工业应用的需求确实各种各样。既然是通过触摸屏来改参数,那么还需要注意这几个参数不具有保持性,如果仅通过背景数据块修改让它生效了,但若PLC停机再从起的话,数据又恢复到之前组态的数据了。因为只有通过组态界面修改并下载的,才是直接修改数据块的初始值,而您说的这种触摸屏修改参数的方法仅是修改当前值,又没法断电保持。
用户:组态界面修改还是需要下载后从新启动
plc
,背景数据块修改实时生效吗?
工程师:实时修改背景数据块参数可以即时生效。不过,输出限值这类参数很少有应用要实时更改的,通常需要修改的也就比例积分微分这些参数。
用户:我这个系统很特别,夏天时输出较大值至60%,冬天时输出较大值至**。这通过
触摸屏
的按钮切换。
工程师:哦,工业应用的需求确实各种各样。既然是通过触摸屏来改参数,那么还需要注意这几个参数不具有保持性,如果仅通过背景数据块修改让它生效了,但若PLC停机再从起的话,数据又恢复到之前组态的数据了。因为只有通过组态界面修改并下载的,才是直接修改数据块的初始值,而您说的这种触摸屏修改参数的方法仅是修改当前值,又没法断电保持。
用户:那怎么办?工程师:让我们想个折中的方法,如果让触摸屏上通信的参数对应着具有保持性的地址,如MD0。再在OB100中,将MD0传送给OutputUpperLimit,如果通过触摸屏修改参数后,CPU从Stop--Run,就能实时生效了,且MD0具有保持性,也不会丢失了。
用户:那怎么办?工程师:让我们想个折中的方法,如果让触摸屏上通信的参数对应着具有保持性的地址,如MD0。再在OB100中,将MD0传送给OutputUpperLimit,如果通过触摸屏修改参数后,CPU从Stop--Run,就能实时生效了,且MD0具有保持性,也不会丢失了。
用户:那怎么办?
工程师:让我们想个折中的方法,如果让触摸屏上通信的参数对应着具有保持性的地址,如MD0。再在OB100中,将MD0传送给OutputUpperLimit,如果通过触摸屏修改参数后,CPU从Stop--Run,就能实时生效了,且MD0具有保持性,也不会丢失了。
用户:嗯,可行。但还是的Stop--Run,要是设备不允许停机怎么办。工程师:还是上述的方法继续折中哦,把这部分传送编程放到主程序中实时传送就可以了。不过这毕竟不是需要经常修改的参数,我建议您在触摸屏上放置一个确认按钮,修改参数后,点击确认再修改。那么在OB1的程序中,就直接用这个确认按钮的上升沿触发这条传送指令就行了。用户:嗯,我会在触摸屏上设置密码的,也不是什么人都能改参数的。如果,要让PID的正反作用呢?工程师:考虑权限控制是安全的。通常,PID的正反作用,只能在组态界面修改,如下图:
用户:嗯,可行。但还是的Stop--Run,要是设备不允许停机怎么办。工程师:还是上述的方法继续折中哦,把这部分传送编程放到主程序中实时传送就可以了。不过这毕竟不是需要经常修改的参数,我建议您在触摸屏上放置一个确认按钮,修改参数后,点击确认再修改。那么在OB1的程序中,就直接用这个确认按钮的上升沿触发这条传送指令就行了。用户:嗯,我会在触摸屏上设置密码的,也不是什么人都能改参数的。如果,要让PID的正反作用呢?工程师:考虑权限控制是安全的。通常,PID的正反作用,只能在组态界面修改,如下图:
用户:嗯,可行。但还是的Stop--Run,要是设备不允许停机怎么办。
工程师:还是上述的方法继续折中哦,把这部分传送编程放到主程序中实时传送就可以了。不过这毕竟不是需要经常修改的参数,我建议您在触摸屏上放置一个确认按钮,修改参数后,点击确认再修改。那么在OB1的程序中,就直接用这个确认按钮的上升沿触发这条传送指令就行了。
用户:嗯,我会在触摸屏上设置密码的,也不是什么人都能改参数的。如果,要让PID的正反作用呢?
工程师:考虑权限控制是安全的。通常,PID的正反作用,只能在组态界面修改,如下图:
1、在背景数据块中对应的控制位(InvertControl --Bool),但不建议直接对该变量进行控制。我这边有做过实验,不建议这么使用。2、正确的方法,是做两个PID Compact,有正作用的有反作用的,通过触摸屏上的选择项按钮,来确定使用哪个PID控制器。3、可以通过修改增益参数的正负来转变PID的正反作用。
1、在背景数据块中对应的控制位(InvertControl --Bool),但不建议直接对该变量进行控制。我这边有做过实验,不建议这么使用。2、正确的方法,是做两个PID Compact,有正作用的有反作用的,通过触摸屏上的选择项按钮,来确定使用哪个PID控制器。3、可以通过修改增益参数的正负来转变PID的正反作用。
1、在背景数据块中对应的控制位(InvertControl --Bool),但不建议直接对该变量进行控制。我这边有做过实验,不建议这么使用。
2、正确的方法,是做两个PID Compact,有正作用的有反作用的,通过触摸屏上的选择项按钮,来确定使用哪个PID控制器。
3、可以通过修改增益参数的正负来转变PID的正反作用。