SFC顺序功能图(Sequeential Function Chart),简称“SFC”,是一种新颖的、按照工艺流程图进行编程的图形编程语言。这是一种IEC标准推荐的首选编程语言,近年来在PLC编程中已经得到了普及和推广, SFC编程的优点:
1、在程序中可以很直观地看到设备的动作顺序。比较容易读懂程序,因为程序按照设备的动作顺序进行编写,规律性较强。
2、在设备故障时能够很容易的查找出故障所处在的位置。
3、不需要复杂的互锁电路,更容易设计和维护系统。
SFC的结构: 步+转换条件+有向连接+机器工序的各个运行动作=SFC。
SFC程序的运行从初始步开始,每次转换条件成立时执行下一步、在遇到END步时结束向下运行。
DATAS SEGMENT
block1 db 'helloworld'
block2 db 'celloworla'
count db 10;存放比较次数
diferrentnum db
DATAS ENDS
STACKS SEGMENT
mst db 100 dup()
top equ length mst
STACKS ENDS
CODES SEGMENT
ASSUME CS:CODES,DS:DATAS,SS:STACKS
START:
MOV AX,DATAS
MOV DS,AX
mov ax,stacks
mov ss,ax
mov sp,top
lea si,block1
lea di,block2
mov dl,0;dl用作计数器,存储block1和block2中不同的字符的数目
mov cl,count
ag:mov al,[si]
mov bl,[di]
cmp al,bl
jz step1
inc dl
step1:inc si
inc di
dec cl
jnz ag
add dl,30h ;显示dl中的内容
mov ah,2
int 21h
mov ah,1;起屏幕停留的作用
int 21h
MOV AH,4CH;返回
INT 21H
CODES ENDS
END START
运行结果为:2,我是用masm for windows 编译器运行过的。
1Block的声明和线程安全\x0d\Block属性的声明,首先需要用copy修饰符,因为只有copy后的Block才会在堆中,栈中的Block的生命周期是和栈绑定的,可以参考之前的文章(iOS:非ARC下返回Block)。\x0d\另一个需要注意的问题是关于线程安全,在声明Block属性时需要确认“在调用Block时另一个线程有没有可能去修改Block?”这个问题,如果确定不会有这种情况发生的话,那么Block属性声明可以用nonatomic。如果不肯定的话(通常情况是这样的),那么你首先需要声明Block属性为atomic,也就是先保证变量的原子性(Objective-C并没有强制规定指针读写的原子性,C#有)。\x0d\比如这样一个Block类型:\x0d\typedefvoid(^MyBlockType)(int);\x0d\\x0d\属性声明:\x0d\@property(copy)MyBlockTypemyBlock;\x0d\\x0d\这里ARC和非ARC声明都是一样的,当然注意在非ARC下要releaseBlock。\x0d\\x0d\但是,有了atomic来保证基本的原子性还是没有达到线程安全的,接着在调用时需要把Block先赋值给本地变量,以防止Block突然改变。因为如果不这样的话,即便是先判断了Block属性不为空,在调用之前,一旦另一个线程把Block属性设空了,程序就会crash,如下代码:\x0d\if(selfmyBlock)\x0d\{\x0d\//此时,走到这里,selfmyBlock可能被另一个线程改为空,造成crash\x0d\//注意:atomic只会确保myBlock的原子性,这种 *** 作本身还是非线程安全的\x0d\selfmyBlock(123);\x0d\}\x0d\\x0d\所以正确的代码是(ARC):\x0d\MyBlockTypeblock=selfmyBlock;\x0d\//block现在是本地不可变的\x0d\if(block)\x0d\{\x0d\block(123);\x0d\}\x0d\\x0d\在非ARC下则需要手动retain一下,否则如果属性被置空,本地变量就成了野指针了,如下代码:\x0d\//非ARC\x0d\MyBlockTypeblock=[selfmyBlockretain];\x0d\if(block)\x0d\{\x0d\block(123);\x0d\}\x0d\[blockrelease];
以上就是关于如何查看plc中sfc中的一个block从哪一个block进入的全部的内容,包括:如何查看plc中sfc中的一个block从哪一个block进入的、编写8086汇编语言程序,统计BLOCK1和BLOCK2两个单元数据中,对应位中不同的有多少位、ios中为什么block要用copy属性等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)