如何查看plc中sfc中的一个block从哪一个block进入的

如何查看plc中sfc中的一个block从哪一个block进入的,第1张

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属性等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zz/9609227.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-30
下一篇 2023-04-30

发表评论

登录后才能评论

评论列表(0条)

保存