一文知道UP/MAKRO程序的调用

up/makro程序调用
该指令可用于调用子程序并将子程序调用链接到条件(布尔操作数)。如果需要,可以链接多个操作数(最多11个)。
子程序的调用次数没有限制。
1 子程序号 0 ... 999
2 操作符_(
3 操作员。如果选择了操作数ein(on)和aus(off),则输入框不可用。_,!
4 布尔操作数(条件)ein(开),aus(关),e,a,m,f,t,s
5 操作数的编号。如果选择了操作数ein(on)和aus(off),则输入框不可用。
值的范围。取决于操作数
6 操作符_(
up101 = f78 + f79 激活条件up101
;%{se}%mkukatpvw %cvw_sps %vup %p 2:up101 = f78 + f79,3:up
;endfoldsel_res=select(#up,101,$flag[78] or $flag[79])
repeat up101 n= 999 stop= !f298 条件满足停止循环调用up101
sel_res=select (#cyc_up,101,true,#num,999,#not_f,298,false)
;endfold
;endfold
deffct int select
(sub :in,no :in,call_cnd :in,ari_op :in,ari_num :in,bool_op :in,bool_num :in,makro_adv :in)
sub : 选择调用的类型up/makro
no : 程序号
call_cnd : 激活条件
adv_result = 0
if not call_cnd then ---如果不激活就跳步到最后
goto pexit -----跳步到退出
endif
switch sub
case #up 使用调用up
callbyselect=true
switch no ;调用up程序号
case 101 ---程序号
up101( ) 调用up程序号
case 102
up102( )
case 103
up103( )
case 112
up112( )
case 201
up201( )
case 206
up206( )
default
$loop_msg[]=
offset = 0
---程序号不能被调用---
swrite($loop_msg[],state,offset,up%d ist nicht vorhanden,no)
halt ---程序号不能被调用---使得程序停止
$loop_msg[]=
endswitch
callbyselect=false
case #makro
switch no ;开始调用makro程序号 --
case 0 要激活的程序号
adv_result= makro0 (makro_adv) 激活makro0程序
case 1
adv_result= makro1 (makro_adv) 激活makro1程序
case 2
adv_result= makro2 (makro_adv)
case 3
adv_result= makro3 (makro_adv)
case 4
adv_result= makro4 (makro_adv)
case 5
adv_result= makro5 (makro_adv)
case 6
adv_result= makro6 (makro_adv)
case 7
adv_result= makro7 (makro_adv)
case 8
adv_result= makro8 (makro_adv)
case 9
adv_result= makro9 (makro_adv)
case 10
adv_result= makro10 (makro_adv)
case 11
adv_result= makro11 (makro_adv)
case 12
adv_result= makro12 (makro_adv)
case 13
adv_result= makro13 (makro_adv)
case 14
adv_result= makro14 (makro_adv)
case 15
adv_result= makro15 (makro_adv)
case 20
adv_result= makro20 (makro_adv)
case 50
adv_result= makro50 (makro_adv)
case 57
adv_result= makro57 (makro_adv)
case 80
adv_result= makro80 (makro_adv)
case 81
adv_result= makro81 (makro_adv)
case 82
adv_result= makro82 (makro_adv)
case 83
adv_result= makro83 (makro_adv)
case 89
adv_result= makro89 (makro_adv)
default
$loop_msg[]=
-------没有建立的makro号被调用
offset = 0
swrite($loop_msg[],state,offset,makro%d ist nicht vorhanden,no)
用来模拟显示: 没有建立的makro号被调用
halt -----如果没有号需要停止
$loop_msg[]=
endswitch 结束了makro选择
case #cyc_up -----循环执行up程序
nr=0
while not (check_bool(bool_op,bool_num) or check_ari(nr,ari_op,ari_num)) check_bool/ check_ari启动功能条件开启
nr=nr+1 从0开始计数大于给定值将不执行循环程序
callbyselect=true
switch no ; up程序号调用
case 101
up101( )
case 102
up102( )
case 103
up103( )
case 112
up112( )
case 201
up201( )
case 206
up206( )
default
$loop_msg[]=
up程序号没有被激活的程序号
offset = 0
swrite($loop_msg[],state,offset,up%d ist nicht vorhanden,no)
halt 程序号没有使用程序停止
$loop_msg[]=
endswitch
callbyselect=false
endwhile
case #cyc_makro -----循环执行makro程序
nr=0
while not (check_bool(bool_op,bool_num) or check_ari(nr,ari_op,ari_num)) 大于给定值将不执行循环程序
nr=nr+1 从0开始计数大于给定值将不执行循环程序
switch no -----调用的程序号
case 0
adv_result= makro0 (makro_adv) 调用执行makro程序
case 1
adv_result= makro1 (makro_adv)
case 2
adv_result= makro2 (makro_adv)
case 3
adv_result= makro3 (makro_adv)
case 4
adv_result= makro4 (makro_adv)
case 5
adv_result= makro5 (makro_adv)
case 6
adv_result= makro6 (makro_adv)
case 7
adv_result= makro7 (makro_adv)
case 8
adv_result= makro8 (makro_adv)
case 9
adv_result= makro9 (makro_adv)
case 10
adv_result= makro10 (makro_adv)
case 11
adv_result= makro11 (makro_adv)
case 12
adv_result= makro12 (makro_adv)
case 13
adv_result= makro13 (makro_adv)
case 14
adv_result= makro14 (makro_adv)
case 15
adv_result= makro15 (makro_adv)
case 20
adv_result= makro20 (makro_adv)
case 50
adv_result= makro50 (makro_adv)
case 57
adv_result= makro57 (makro_adv)
case 80
adv_result= makro80 (makro_adv)
case 81
adv_result= makro81 (makro_adv)
case 82
adv_result= makro82 (makro_adv)
case 83
adv_result= makro83 (makro_adv)
case 89
adv_result= makro89 (makro_adv)
default
$loop_msg[]=
makro程序号没有被激活的程序号
offset = 0
swrite($loop_msg[],state,offset,makro%d ist nicht vorhanden,no)
halt -----程序号没有使用程序停止
$loop_msg[]=
endswitch ---结束选择程序
endwhile ---结束条件
default --- 没有up,makro,cyc_makro,cyc_up
endswitch ---结束选择程序
pexit: -------跳步退出
return adv_result
endfct
---检查位用于循环调用---
deffct bool check_bool(boolop :in,boolop_num :in)
int boolop_num 位号,数字
decl bool_typ boolop 各种类型
bool stop_bool
switch boolop
case #ein
stop_bool=true ---激活
case #aus
stop_bool=false ---关闭
case #e
stop_bool=$in[boolop_num] ---用输入激活
case #not_e
stop_bool= not $in[boolop_num] ---输入取反激活
case #a
stop_bool=$out[boolop_num] ---用输出激活
case #not_a
stop_bool= not $out[boolop_num] ---用输出的非激活
case #m
stop_bool=$cycflag[boolop_num] ---用m量激活
case #not_m
stop_bool= not $cycflag[boolop_num] ---用m量的非激活
case #f
stop_bool=$flag[boolop_num] 用f量激活
case #not_f
stop_bool= not $flag[boolop_num] 用f量的非激活
case #t
stop_bool=$timer_flag[boolop_num] 用时间量激活
case #not_t
stop_bool= not $timer_flag[boolop_num] 用时间量的非激活
case #s
stop_bool=s[boolop_num] s量一般不用
case #not_s
stop_bool= not s[boolop_num]
endswitch
return (stop_bool) 条件满足反馈
endfct
-----用于输入数---
deffct bool check_ari(act_nr :in, ariop :in ,ariop_num :in)
int act_nr, ariop_num, max_nr
decl ari_typ ariop
switch ariop
case #num 直接给入数
max_nr=ariop_num
case #count 计数器
max_nr=$count_i[ariop_num]
case #bin 二进制
max_nr=$b_out[ariop_num]
case #binin 二进制输入
max_nr=ariop_num
case #ana 模拟量输出
max_nr=$anout[ariop_num]*1000
case #anain 模拟量输入
max_nr=$anin[ariop_num]*1000
case #timer 时间控制
max_nr=$timer[ariop_num]*0.01
case #procpar p值控制
max_nr=procpar[ariop_num]
endswitch
return (act_nr>=max_nr) 计数大于给定值.
endfct
;endfold
;endfold


兼容能源之星—同步整流IC U7710SG
半年不到,波音航班再次失事,737 Max 8真的是一款空中杀手吗?
人工智能如何协助控制疫情
Arduino颜色选择器的制作
学习RTOS该如何选择?µC/OS不是收费软件吗?
一文知道UP/MAKRO程序的调用
低端市场价格大战在即 知名手机厂商的避风港
信步科技SV-33A66嵌入式主板介绍
韩国立法机构正在呼吁政府对加密货币进行金融监管
在桥梁上安装传感器,互联网远程监控桥梁状况
IGBT搭乘新能源快车打开增长空间天花板
荣耀9怎么样?荣耀9评测:华为荣耀9与华为P10五大细节大比拼,亲兄弟的对决你选谁?
谈谈电机行业三个值得关注的问题
能源监测物联网管理系统助节能,促增效
中国移动将持续提升云网一体化的能力5G将加速这一进程
客户替代风华色环电感时所面临的顾虑
基于FPGA的IPV6数字包的分离与封装的实现
数据显示苹果iOS14升级率高达72%
黑莓Playbook OS 2.0将于本月21号发布
英伟达为中国市场量身打造RTX 4090 D显卡,规避美国出口限制