粉丝1.2万获赞2.6万

本期我们来进行状态机梯形图改成 scl 语言的一个讲解,对不对?来,我们先打开,首先我们打开我们的一个状态机的一个程序,来,我们右键 点击我们的一个属性,好,我们把这里改成手动把编号改成,比如说三千,好,这里我们把它的名称给复制一下,点击确定好,这里我们添加一个星块, 然后添加一个函数块,我们的名称就是刚刚我们复制的一个名称,加上一些后缀,对不对?好,语言是 s c l 语言,编号是自动来点击确定好,这时候我们把这个 界面给拆分一下来,我们首先来看第一个是什么?这些我们都已经轻车熟路了,对不对?来,我们就直接开始写,如果对不对?好,如果我们的这一个第一次扫描有信号,对不对?如果他有信号,那么我们就把这个程序状态给成零,对不对? 程序状态,然后给成零,好,那么我们就结束我们的一个判断 好来,那么我们第二行是什么?如果我们的一个程序状态等于零,对不对?程序状态等于零,那么 我们就把我们这一个部位改成一,对不对?好,改成一, ok, 我 们就什么截图判断好,这里都忘记打分号了,打分号这里也是打分号,好 来,同理,第二行是什么?我们也是同理的一幅如果什么,如果我们这一个启动对不对?如果我们启动有信号,并且我们程序状态等于四零一,对不对?程序状态 等于四零一,那么我们就把这个程序状态给成一百,对不对?好,那么我们程序状态就等于一百。好,结束我们的一个判断好。同理以下这些也是同样的一个操作来,如果我们的一个极品或者 我们报警中这个变量被触发了,我们就把我们的程序状态给成两百,对不对?程序状态给成两百 好,我们就结束我们的一个判断好。同理下面的也是一样的。这里是什么? 这里是。如果我这个铺位有信号,那么我们就把我们的程序状态改成三百,对不对? 把程序状态给成三百,并且是吗?并且我们把复位给置一,对不对?好,复位给成一好,那么我们就结束我们的一个判断好。同理以下这一行也是一样的,都是 我们直接一个一组走天下。如果我们的一个程序判断如果好,这里也是一样来,如果我们的一个程序状态等于三百, 并且并且什么?并且我们已经复位完成,对不对?已经复位完成,那什么?那么我们的程序状态就变成四零一,对不对?我们程序状态就变成四零一 好,并且什么?并且把我们这个复位完成的这个信号叫什么?给他变成零,对不对? 好,就结束我们的一个判断好。同理底下我们这里是。如果 我们 hmi 的 一个停止引线号,那么我们就把我们这一个程序状态给成四百,并且什么? 并且我们这一个停止给它复位,对不对?并且这个 hmi 的 停止把它变成零,好,我们结束我们的一个判断好。同理 底下这里也是一样的。如果我们程序状态等于四百,并且我们停止完成,对不对?并且停止完成, 那么我们的一个程序状态就等于四零一,好,并且把我们这一个停止完成给他复位,对不对? 好,这里先打比较多的一个回车,这样子好看一点。好,这里停止完成,我们就给成零,好,我们就 and if。 好, 底下还有最后一行,如果我们触摸屏的一个手动,并且什么, 并且我们程序状态等于四零一,对不对?并且它等于我们四零一,那么我们的一个程序状态就给到五百,对不对?那么我们这一个程序状态 就给到五百,就 and if ok, 那 这样子我们的程序就已经写完了,对不对?好,写完了之后我们干嘛把这一个擦掉? 好,把这一个也关掉,取消拆分。好,这个时候我们把这个状态机程序先拖进来,对不对?来,我们把没有的给它删掉,好,点击四,我们重命名一下,把它的后缀给它删掉,好,这样子我们就已经编写完成了,对不对? 好,编写完成之后,大家需要自行去验证一下自己写的程序是否正确。点赞加关注,学习不迷路。

那这个作品给大家解释一个咱们一些新手经常遇到的一个问题,什么呀?就是你看我们经常会遇到这个指令转换成题型图,出现无效程序段的这个问题。 这个时候呢,可能会有一些人告诉咱们说,哎呀,这个,呃,不是所有的这个指令都能转成听图,但是所有的听图都能转成指令啊。其实这句话如果是在 s 七三百、 s 七幺二零零幺五零零、 s 七四百等等这些 plc 上啊,这句话是没问题的, 但是在我们 s 七二百 spa 当中,是所有的指令都可以转换成听图,所有的听图也都可以转换为指令。那之所以转换不过来呢?很大的一步,一个原因是因为这个我们看点过来之后,我们注意看一个 l、 d, 两个 l d, 三个 l, 他是把三段程序写到了一个网络当中,那么对于指令来说,我们是可以这样去写的,但是梯形图是不允许的啊,所以我们应要做的是什么呀?你看啊,从这开始,对吧?第一个 l、 d 把它后面的 剪切过来放在这,然后这不是还有两个吗?再把这一段再剪切过来,放下来,然后我们再转换,这就可以转换了啊,这是随便写了一段, 这个一定要注意,我们在二百 spa 当中,呃,梯形图包括这个 s、 t、 l, 包括 f、 b、 d 这些指令都是可以互转的,而且是可以完全互转的,只是说他是不是写到一个这个一个段里了,你看我们再把它复制回去, 对吧?这就不能转换这个了,上面这个是可以的,是吧?

今天我们将从零搭建一个 plc 控制项目,然后通过这个项目呢,我们将了解以下四个内容,一个是 scl 语言和信息图,哪个更好? 另一个是单点连锁自锁,这些简单的控制逻辑在实际项目中是如何转化成一个全流程的一个控制逻辑的。 另一个第三点是通过这个案例,我们如何去学习去做送控和离散控制。最后一个是当我们学会了送控和离散控制以后,我们如何去建立功单,做到全场的自动化流程。好,我们接下来看一下。第一个我们从里面拆解出一个 单体,单体单元,如这个,这是一个流程控制中很经典的一个单体控制程序, 它主要通过上料、排肺、循环这三个功能实现对反应腐或者储液罐的一个液位控制。当我打开上料程序的时候,它将打开上料阀,向储罐或者说反应腐进行补料。当我打开排肺的时候, 它将打开排肺阀,将储罐内的物料排出或者说转向其他的地方。当我打开循环程序的时候, 它将打开循环阀和循环泵,将反应府内的物料进行循环。也就说我们在实际中提到的哄配,我们这个程序我谢给大家,是用一个 s c l 语言去实现的,我们来看, 比如说当我打开排废,排废程序段被激活,并且它关联了补液以及循环这两个功能点,我们将它连锁,将它连锁掉, 当他满足这个条件以后,我们就开始打开二号阀进行排废。好,现在已经液体排没了,不好意思,液体排没了,我们关掉以后呢,我们补一点料进来,补料的时候我们可以看到在补料的过程中,我们补料的程序被激活,我们打开了, 因为控制法的一号法,也就是这个差评林业法。那为什么要做这个连锁?大家来看,如果说我在这个时候不小心把牌费功能点开,连锁被触发掉,这个整个程序就将会被关停, 就是防止你在上料的过程中误操作,把料排排掉,所以这就是连锁的用处。接下来我们来看我这个功能是通过 scl 语言去实现的,那我用梯形图如何去做?我把 scl 语言进行屏蔽,将梯形图做好。 这个界面读大家应该很熟悉,就是我们之前所讲到的连锁,当然我们也可以通过字所在这里我们加一个字,锁也一样可以去实现它。这个没有关系的,就看你的页面上的这个点是如何去主态的。 这个时候我们把程序下载到 plc 里面,我们继续监视,我们点补液,大家看到补液被激活,我们我们向反应符补料,这个功能就是我们非常简单的基础的一个单点连锁的一个逻辑功能,这个时候大家看到了, 也就说我们之前学到的这些基础的指令,其实是在我们的大型项目中完全可以用得到的。 可是为什么我打我们打开一个项目的时候,很少看到这么简单的一些逻辑呢?这个很简单,我给大家重点说一下, 因为这部分内容被打包成块使用。为什么被打包成块使用这个问题,我们一会回答这个问第一个问题,这个为什么被打包成块使用?我们来看一下, 比如说像我这个补液的程序,或者说排液也好,循环也好,对不对?那我们来看一下萃取服里面, 萃取服里面我们也有上料,从上料柜上料进来给它,同样我们也有排费,对不对?排费排掉,我们也有循环, 这个管线不好绕,就这样换循环。在缓冲罐里面我们同样有转料,也就相当于另一种形式的补料以及排费。西服服同样包含有上料、排费以及循环三个功能,也就是说 如果说我去做程序,我完全可以像这样去做,但是我像这样做以后,那我每一个功能都这样去做,那我整个项目就看到的打开以后是整个项目程序全部是这样一段一段这样子的很, 看起来非常的不好,而且不好维护和查找,那我如何去便于维护?我们添加一个函数框, 名字叫做液位控制功能块一,这个功能块借好以后,我们给他做一个引脚叫启动,做一个输出,引脚叫做输出,我可以做三个, 也可以做两个,因为我们在不同的,虽然他们有共性,但是他们在他们在不同的上料或者说出料的过程中可能用到的方法不一样,有的地方有两个,有三个,对不对?那我们可以不妨把它做多一点,我们做三个, 我们再增加连锁点,这个时候我们这个块的引角已经做好了,我们来写程序启动,通过两个连锁,连锁一和连锁二输出,三个输出,三个输出,这个时候我们保存,我们回到内函数里面,这是我们业务控制系统,刚刚我们写的那一段就是这个,是,就是这个 我们先把它屏蔽掉,这个页面是一个流量控制的,我们后面讲 pid 的 时候以及模拟量处理的时候,可以重点去讲它。我们增加程序端,将刚刚建立好的页面控制功能块零一拖进来,我们可以拖三个, 一个、两个,三个。这个时候我们把刚刚的点关连进来,启动选择页面,控制补页开关。我们补页的时候我们要将排费和循环连锁,到输出的时候我们要打开发音,这个我们就已经填好了。 我们来看第二个,我们用的是排液开关,也就是排废功能,我们将上料和补料这个功能贴到连锁店,一,将循环做到连锁。第三个我们把循环做到启动并补料做到连锁点。二, 我们继续来贴这个输出,在排费的时候我们用的是在排费的时候我们用到的是阀。二,在循环的时候我们用的是阀。三,以及我们用到了循环泵泵一, 这个时候我们看到一个问题是什么?因为我们虽然这些功能是有共性的,它的逻辑是一样的,可是它的点位不一样,那我们这些点位怎么办?我告诉大家一个简单的方法,我这里随便借了一个点,大家可以随便去借一个点, 比如说我这里借了一个点 sim, 这个点是一个空点,没什么用,我把它填充在这些补药的地方上就好,我已经填充完毕, 这个时候我们下载程序,点击解释功能,我们来看,我继续点击补药, 大家看补液程序被激活,这时候我关掉补液,我点排液功能被激活,关掉排液点击循环,循环功能被激活,这个时候我们会发现一个问题,是什么?大家看如果我的程序里面通过这样的方法去写,我可以节省很多工作,我只需要关滤,关滤点位就好, 而且我也比较易于维护。假如说在这些功能中我增加了也死,也就是说我在上药的过程中,或者是在补药的过程中, 我要延迟三秒开法,我只需要点开这个功能块,修改里面的逻辑,所有的功能将会 统一增加到每一个三条程序里面。那这个时候我们就发现了一个问题,是什么呢? s c l 语言和梯形图哪个更好?我们看到了梯形图可以用于解单逻辑以及解单逻辑的功能块分装,这个时候我们刚看到的, 同样我要给大家补充一点,但是这一点我们要在后面讲运动控制的时候才学到。梯形图适合理想运动控制程序,比如机械手、打包机,这个是为什么?我们后面会给大家重点讲,我们最近设计不到,要在下一个课程去设计到。 我们来看一下 icl 语言,当我们看到了梯形梯形图的好处以后,我们看 icl 语言它的好处是什么?我们还是回到这个页面,假如说我现在有一个功能是这样子的,我再增加重水五十公斤以后关闭重水, 添加物料二十公斤进行搅拌,搅拌五十分钟以后开始蒸馏,二十分钟以后开始排废。我刚刚说的这些功能,如果大家用梯形图去做,会做的非常长,我们 如果用 s c l 语言,假如说这个功能是有贡献的,我们同样也可以分装,可是这是一个公单程序,一般不具有共性, 我们更多的是用一个 icl 语言去进行流程控制,比如这里举例我们翠曲府的转量。再来看,我们将一些前面一些功能先实现了, 这是一些控制逻辑,比如说什么分页弹窗啦,人工确认分页以及人工确认分页的弹窗,以及一些逻辑判断算法控制等等。如果我们这个功能 是通过梯形图去实现,我相信大家可以看到我 sl 语言是通过一百八十二行去完成的,你用梯形图低于三百行是完全写不完的。我给大家看一看其中的一条,大家就可以明白, 这里有一句话是说,如果我的一个量大于等于这个量,解去另一个量的时候,我就会执行下一步。如果用梯形图去做,我要首先去用一个解法的指令块, 紧接着在下面一个分支去做一个它的判断,它,它去跳步,这个这么一条指令我就用梯形读,最少要写出两行,两到三行,而且它的占的视觉的面积比较大, 那同样我后面的每一条都是这样子的,如果我换成这样子,大家可以看到我就这么简单一点,是不是后面维护也好,或者说我自己去编辑程序的工作量也会减小很多,那这个时候我们就可以了解到做什么梯形图, 哦不, sorry, i c l 适合,适合流程控制、流程控制、算法控制,比如说 pid, pid 大家知道是有一个功能块的,但其实你用 i c l 可以 自己去写一个 pid 的 功能块,非常好用,算法控制以及后面我们可以借力电子公单,电子公单配方。大家有没有发现一个问题,就是 s c l 语言它所做的一些功能 更适合什么?更适合?是不是像我们比如说我们现在生活中去接触的 ai 一 样,那梯形图更适合的是什么?比如说我们之之前我们接触到像百度这种比较简单的一些搜索引擎做的事情,也就是说 它两者没有谁好和谁坏,两者其实是一个包含的关系。那我的 ai 也是基于最开始的搜索引擎模型去一点一点的 发展到现在的,那 icl 仪也是一样的,我们它也是在基于梯形图以后去弥补了梯形图的一些不足,建立了 icl。 但是并不是说有了 icl 以后梯形图可以完全的舍弃,在我们这个行业里头它没有好和坏。 我们经常看到有一些同学,他去跟别人去争执这个东西哪个更好,这是一个非常错的逻辑思维,大家一定要学会去包容每一种做法, 学会别人更好的做法,才能让自己更加完善好不好?我们回到这里第二点,我们刚刚讲到单点连锁和自锁这些简单的逻辑程序如何在程序中使用, 那这个我们也讲到了,所以说我们把它打包矿泉水用。那其实在这一点的时候,之前我遇到了一个朋友,他说我们之前学了一些单点连锁制锁, 他说这个没什么用,我在生活中用不到。他同时还给我举了一个非常有意思的例子,他说因为当时一般学连锁的时候,我们都是去用电机去学,他说电机现在都通过变频器 和四伏来控制,谁会通过连锁?就比如说我刚刚那个连锁去触发那个点去控制,他说他没见过,他说这个学了没什么用, 这个我借着给纠正他的时候给大家普及一下。第一点是什么,大家看到了这个是非常有用的。第二点是电机除了用四伏和变频以外,用接触器也可以控制它,这个是取决于你的项目的实际情况。 我们在这一行里面有时候经验是一个非常重要的东西,也就是大家借到,借到的东西也是非常重要的,如果你没有借到,你的第第一念头是要去学会它,或者说去求证它这个东西是不是 真的可以这样做,不要去想着说第一念头是去说他这个东西不对,只有你的是最对的,这样是很难。不论是在我们 plc 行业也好,在那个 dcs 行业也好,甚至在后面的一些更高级的运动控制,或者说是我们现在 大模型控制里面的一些内容也好,我们要先学习别人,然后再完善自己好不好? 我们来看第三点和第四点,第三点和第四点是通过这个案例以后,我们如何做顺控和逆反控制,以及通过顺控和逆反控制以后如何建立空单和全流程自动化。那我们回到这个里面,那我是不是刚刚已经实现了第一个功能,也就是说我可以向它里面补料了,我现在也可以向它里面排费, 我是不是也可以向它去做循环?如果我我是先补料 再循环,再排费,我只需要把刚刚所借的那功能块按顺序把它坐在下面就好, 就做成了一个很小的顺控。下节课我将完整的带大家去借力一个顺控和离散控制,以及通过顺控和离散控制如何去借力。电子公单和推流程自动化,谢谢大家。

各位朋友们大家好,这个视频呢,我来分享一下用 ai 编辑西门子薄图 p r c t 形图与触摸屏 h m i 界面的实战分享。 好,我先介绍一下我自己啊,我是王俊杰,做 p r c 编程有十五年时间了,我现在越来越明显的感觉到一件事情, 就是 plc 编程正在进入一个新的阶段。以前我们写 plc 程序,靠的是自己一点一点的去画流程,图标点位,写梯形图,调试,修改再调试。 比如说一个复杂一点的项目,写起来经常是需要好几天,甚至呢会写一个星期,如果客户中途需要修改程序,那前面的程序结构可能还需要大改。那么做过项目的朋友啊,都懂,其实这种感觉啊,是非常痛苦的, 尤其是在用西门子薄图做项目的时候,这种感觉啊,更清楚,因为呢, tia 薄图的功能非常强大,但是程序结构也是非常复杂,比如说变量表、程序块、梯形图、 hmi、 触摸屏变量, 包括触摸屏的画面编辑、检查,每一步其实都不能乱。很多人也尝试过用 ai 去编辑 plc 程序,但是经常会遇到这样的一个问题, 比如说 ai 说的非常好,看着代码也像那么回事,但是呢,真正你把它复制粘贴到薄图里,其实是不能够用的。有些 ai 呢,它只能是生成思路,有一些呢,它只能去写一些 s c l 语言, 有一些看起来像是题型图,但是导入不了工程,有一些是导入进去了以后却编一堆乱码。 所以呢,我当时啊,就在想,能不能让我们的 ai 不 只是讲 plc 的 编程思路,而是真正的生成可以导入薄图,可以通过编辑,也可以继续修改的 plc 程序。那么经过一年多的反复测试,我终于把这套方法跑通了。 好,这套方法呢,不只是普通的用 ai 编辑 plc 程序的方法,它讲的是如何利用 ai 加薄图、 v 二幺加 openers 加西门子的 semantic sd 或者是 xml 格式, 让 ai 自动生成西门子 plc 梯形图项目,并生成 hmi 触摸屏界面。我,我讲的这套方法是能够 把 ai 生成的程序直接导入到薄图软件中的,导入的接口就是通过 openers 这个方法去导入的。好,简单的说呢,就是说你比如说给你一个项目需求 五台电机的顺序启动,逆序停止,或者是六工位转盘的机械手控制,比如说四部电机的运动控制, modbus 通讯、 pid 通讯以及触摸屏界面。哎,这个我们都能用这套方法给它生成出来。 你最终呢,看到的是一个真实的项目,它在薄图里边儿就是真实的 plc 梯形图程序 以及 hmi 触摸屏界面,像这个便面表地址,它都是能够绑定的,并且翻译是零错误,零警告。好,这其实不仅仅是停留在一个想法中,而是已经被我完全跑通的一个方法。 好,我们再来看一下啊,为什么值得去学习这个方法?那未来的 plc 编程呢?不可能永远是手工去编程的,因为未来的 plc 编程,它只靠手工一条一条的编程,它效率其实还是比较低的。那我们 ai 呢? 他其实越来越强大了。但是对于 prc 工程师来说,真正有价值的不是让 ai 去随便写一段代码,而是让 ai 去真正生成能导入,能编辑通过的,而且是能够继续修改的 薄图的梯形图程序。大家注注意啊,是梯形图程序,而且是能够导入薄图的。好,这个方法呢,它的价值其实非常大的。首先呢,是把 ai 从会聊天的工具变成了真正的你的一个 plc 编程助手。 好,学完之后你就会明白,第一,如何把项目需求整理成 ai 能够理解的格式。第二,如何让 ai 生成薄图可利用的程序结构。第三,如何利用西门子的 semantic sd 语言,或者是 x m, 或者是这个 x m l 这种底层程序去生成薄图的听图程序。第四是如何利用 c sharp 调用薄图的 opens 接口。 第五是如何自动复制模板工程,避免项目被破坏。第六是 检查导入后的程序是否正确。第七,如何一步一步地排查程序,做到零错误,零警告。第八,如何生成运动控制、 modbus 通讯、 pid, hmi 等复杂的一些真实的案例程序。 好,有些朋友会说,老师,我不会 cshop, 也不会 openers 怎么办?大家啊,不用担心,我知道呢,其实很多 plc 工程师啊,一听到 cshop 或者是 openers 还有这个 sml 这种语言, 就会觉得非常难。其实不用害怕,我的这门课程呢,不是培养你去做专业的这种软件开发的,也不是让你从零去学习这种 cshop 这种语言的。我们的目标啊,其实非常的明确, 让我们的 plc 工程师学会借助 ai 做出一个能够自动生成西门子薄图 plc 程序的一个工作流。或者是呢,借助 ai 生成一个西门子触摸屏 hmi 界面的工作流。好, 你不需要去精通 c 景,也不需要去成为软件工程师,你只需要掌握的是 怎么让 ai 帮你去写工具,怎么让工具去通过 openness 去调用薄图的接口,怎么把写出的 p c 程序和 h m i 界面自动地生成出来。这个就是我们这道课一个方法之一。 好,我们这个课程啊,会从哪儿去讲起?我们是从零基础的环境开始配置的,一步一步地帮你去跑通,比如说 打开薄图 v 二幺的 openers 的 权限配置,这个非常重要,你只有打开这个权限配置, ai 才能够进入这个接口,把这程序啊,直接导导入成梯形图程序。 好,第二是通过这个 visual studio 去创建工程。第三是帮你去配置西门子的 d l l 引用配置文件。这个啊,大家一看,哇,好难好难,其实 大家啊,都不用去慌,因为呢,在课程中啊,后面啊,我都能够把你教会。第四就是 c shop 连接泊图工程,这个大家看过之后啊, 一定会感觉非常震撼,就是我们直接写完程序之后,直接调用这个 c 景程序,就把这个程序啊编写到薄图的梯形图里边了。好,第五是 导出变量表和程序模板。第六是识别这个 semantic sd 的 文件格结构,这个就是 ai 通过薄图的一个编程语言。好,我这个都会在内部课给大家去讲解,非常清楚。哎,看,大家看啊,以及 ai 生成一些状态机程序,以及 ai 生成 机械手臂程序,包括四伏电机运动控制程序,以及 modbus 通讯, pid 通讯或者 pid 的 恒压供水程序,以及 ai 生成触摸屏的 hmi 界面。 好,在课程中呢,我会尽量利用 plc 工程师能够听懂的方式,哎,不去讲一些 非常高深的技术名词,你能够按照课程的方法,一步一步地先跑通一个小项目。然后呢,我会再带大家逐步地去做复杂的大项目。好,这门课程适合谁呢? 哎,你看啊,第一是适合会 prc 基础,想学习 ai 编程的自动化工程师。第二是适合用于 薄图,比如说,大家用过薄图,想提高西门子 prc 编程效率的人。第三,想知道 ai 到底能不能真正地生成薄图梯形图的人。第四 想把自己的典型项目经验变成可附用的模板的人。第五是想学习 ai 加 plc 未来的趋势,不想只停留在手动编程的人。好,以上课程就适合这些人。 如果啊,你想系统的学习这套方法,哎,一定要点击我这个视频下方置顶的评论 去看一看,看,我的置顶的评论价值巨大! ai 生成西门子 plc 薄图梯形图和 hmi 触摸屏程序。哎,获取课程啊,看我这个视频下方置顶的评论。好,今天的分享就到这儿,再见!

大家好,我是野生工程师,前两天上传的那个三菱用 a a 怎么写?好多兄弟让我试薄图,然后我们来给 a a 编一段话,就这个标准的语言啊,然后发给这个 a a, 就是豆包,还有 deepsea 都可以,然后还有这个 kimi 啊,那我们生成了,然后我们打开这个新建文件,然后我们还是把那一个程序复制过来啊,粘贴, 粘贴好了之后我们还是老方法,另存,另存,这个文件名我们改一下啊,这个名字我们改成 红绿灯,然后主控制好,然后我们把这个后缀名要改啊, s, c, l 啊,然后把这个所有文件,然后 a, s, n, 然后点保存 好,然后我们还有个参数,就是那个参数,这个是可选的 db 块啊,就是我们也把它复制一下, 那我们还是在这个文本里面把它粘贴上啊,我们先全选 ctrl a, 然后再 ctrl v, 然后我们把这个粘上,然后再另存, 然后再把这个改成那个参数啊,我们把这个名字改一下参数, 然后后缀还是 s、 c, l, 然后所有文件啊,这里点所有文件,然后这里编码,然后保存好。两个文件我们都保存好了,我们拉过来 一个主控,一个参数块,然后我们从那个博图威士七打开,对,博图威士七,然后我们双击打开啊,然后我们等待这个博图反应啊, 打开了之后我们创建新项目,等一下创建新项目,然后项目一对吧,我们点确认, 然后打开项目视图, 让我们添加一下新设备,我们添加 p、 r c 啊,我们来个幺二零零的,然后 cpu 我 们选一个幺二幺二 c 吧,我们选这个四点五版本的, 那我们这里把这勾掉啊,这个密码我们不要,我们不要保护啊,这里完全访问,然后点完成啊,下一步完成啊, 好,然后我们到这边项目栏,然后我们这个幺二幺二 c m 添加了让这个 db 块,然后我们从这个外部原文件啊,我们点添加外部原文件,然后下面参数块和这个红绿灯啊,就是我们把这两个 嗯都添加进来。好,然后我们鼠标放在右击,然后从原生成块,再点一下从原生成块,然后点一下确定, 然后这个也是啊,参数块也是,也是,右击从原生成块,然后点确定 好,然后上边 f b 块和 d b 块我们都生成了,我们从中这个 o、 b、 e 里边,然后我们会把这个 s、 c、 l 的 这个 f、 b 让我们拖过来,就拖到这个 m、 b、 e 啊, 然后它会自动分配,我们就选自动就好了。然后我们把这个地址随便改一改啊,就是输入 i 零点零,下面 i 零点一, 然后 i 零点二,然后下面 i 零点三, 好,输出,这我们把它改成 q 零点零,然后黄灯是 q 零点一,下面是红灯,是吧?绿黄红是吧? q 零点二, 那我们这个暂时扣零点三,那么扣零点四,扣零点五,扣零点六。 好,让我们把这个块弄好了,让我们翻译一下,等一下翻译,翻译没问题,我们就没问题啊,然后我们把这个拉上来看一下, 好,没有错误啊,就是我们变异成功了,然后我们仿真一下,我们启动仿真啊,然后点确定,然后这里确定, 然后这里连接,然后再点装载, 然后这里无动作,我们点一下,选一下,选成那个启动模块,然后完成 我们转一下。在线啊,让我们打开这个,这个表,变量表啊, 我们看一下这个默认变量吧,就添加了一些变量表,我们打开一下啊,这里面就有,我们添加了一些变量表,对吧? a 点和 q 点我们都有,然后这个状态也有了啊。然后我们再点一下这个强制表,我们把那个强制表添加一个, 随便添加一个,我们启动是那个 i 零点零。好,然后这个是强制表,我们把它强制一下,把这个改成一,我们选 f 给它全部强制一下, 对吧?这都可以操作的,然后我们看一下这个变量, 让我们监视一下,好,它这里面就是红绿灯在闪,在输出啊,好,这个薄图我们怎么上传程序,对吧?怎么通过 a, a 写完,然后上传到这个薄图,好,谢谢大家。


很多电工兄弟都知道西门子 plc 有 两种编程思路,一种叫梯形图,另外一种叫 sl 语言。今天给大家聊一下,新手如何快速的把梯形图转换成 sl 语言。那我们通过这个案例看一下, 这个是一个简单的一个题型图,那么从这个题型图里面可以分析到, a 和 b 是 y 的 关系, c 和 d 是 y 的 关系,那我们它两个正奇呢?又是一个或的关系,我们在 lcl 语言里面, y 就 用 i 的 来表示,或就用 r 来表示, 那我们可以直接在这里面把它的一个逻辑顺序写到这里面,我们这里面就可以用 f, a 和 b 它俩的整体,或者 c 和 d 接通之后, e 也就是我们 q 零点零就输出为真,否则它就为假,它就没有接通, 我们可以用复制指令, e 等于他们这个关系直接写进来。大家再看一下这个案例, i 零点零和 i 零点二是一个火的关系, i 零点一和 i 零点三又是一个火的关系,它俩整体又是一个域的关系。那我们可以在 s, c, l 里面直接写,如果 a 或者 c and b 或者 d 接通的话,我们 q 零点零就会有输出,否则 q 零点零就没有输出。这两种常见的一个编程思路呢?大家都比较常用,那很多电工兄弟非常喜欢用这个梯形图,这个梯形图处理一些简单的 逻辑运算比较简单,但是 sl 处理一些复杂的逻辑运算就用起来比较简单,有可能一两行就能解决掉。你们都喜欢用哪一种语言?咱们评论区聊一聊。

今日课题, s c l 语言 g f c 和 f b 调用 hello, 大家好,立刻公控啊,今天我们来学习一下 s c l 语言里面的调用 f c 和 f b 的 一个功能快 啊。首先呢,我们来回顾一下,之前我们在西门子的基础课程里面讲过啊, f c 快 和 b 快 的一个区别啊,我们今天来回顾一下吧。 呃, f c 呢,就是 flex 的 一个,嗯,英文缩写,代表的是无状态的一次性工具啊,就是我们说的一个黑匣子,这个黑匣子它就是一个工具箱啊,它可以实现呃,你的一些功能啊, 就 fc 快 啊,就比如说无记忆的一个计算器,对吧?然后没有内部存储,这一定要注意,它是跟 fc f b 快 是有区别的,然后调用就执行啊,没有背景记忆快, 适用场景呢?适用于纯计算啊,数据转换和逻辑判断啊,这是 f fc 快 呢, fc 快 是有记忆的一个独立设备,嗯,它是有记忆的。 呃,就像一台带有内存的洗衣机一样的比喻。然后核心特点呢,是有内部的一个背景 d b 啊,这是他们两个唯一的区别。然后状态保持啊,必须有背景 d b 管适用场景呢,描述具有呃持续状态的物理现象和物理对象和呃逻辑 单元啊,比如电机和阀门等,对吧,就是 f c 和门闭的一个区别。那 ok, 我 们今天来用 s c l 语言去调用它呢啊,我们去试一下用 s c l 语言去调,我们之前在呃西门子的那个基础课程里面讲过 啊,用题型图去调用,那 s c l 元去调用有什么区别呢啊?今天来讲一下。首先我们来看 fc 块的一个调用。呃,我们在我在程序里面啊做了一个例子, 例子呢就是很简单, fc 块其实调用分了两种啊,一种是有呃有输入输出的,对吧?还有一种是没有输入输出的, 不管有输入输出和没有输出,其实调用对于我们来说是一样的啊,嗯,它都是需要把这个 fc 块啊写出来,嗯,如果你 很熟练的话啊,我们可以直接啊填写这个 fc 块,比如说我现在呃新建了一个 fc 块,对吧? fc 块,然后我们通过 f b 啊在 f b 里面去调用它, 这时候很简单,我们只需要写 f c 块的一个名称,然后一个括号,两个括号,对吧?然后括号里面呢是它的一个,呃,行餐和食餐,这是行餐,这是食餐,对吧?输入和输出 啊对应的,我们程序里面就是,我们可以看一下 f c, 我 们把这个分两两个字,嗯, 我们看一下 fc 零零一的一个行餐,行餐的话就是输入,对吧?输入,然后我们输入这边呢,我们用用了一个电机的一启动按钮, 然后输出啊,有一个 auto 的 一个输出,那输出呢?我们呃用用了一个电机输出的一个 q 零零零,对吧?然后我们只 fc 只有两个变量,那 ok, 我 们只需要填两个变量就行了,对吧? 啊?就这样简单,但是一定要注意一下,因为输入和输出的表达式是不一样的,输入呢是一个负值语句,对吧?行冒号和等于 啊,输出呢是一个等于加一个那个分号,对吧?就是这种,嗯,大,然后这是一个指向,指向符号,就相当于把输出的呃结果啊,指向给那个 编辑输出这个变量啊,这个我们自己定义一个变量,然后加上一个分号就结束了啊。如果大家啊不熟悉,不知道怎么直接写,其实我们也可以非常简单的去调用,它 就直接选中这个 fc 块,我们比如说选中它,然后再拖到 fcl 源的这个编辑框里面, 然后这个时候它就自动把这个格式啊给出来了。但是这个时候呢,你大家一定要把这里面,嗯,就照这个黄色代表这个行餐的一个时餐变量嘛,对吧?我们就可以用电机启动这个,这样 对吧?然后把把输出的那个时差,我们选择点击输出, ok, 这个时候呢,我们可以看到这个时候上面和下面是一模一样的,但是它有一个波纹,波纹的一个红色警告,这个是其实是一样的,这个没有关系, 这没有报错,只是说它我们在调用的时候它会引用的一个错误,我们可以直接把它翻译一下,这个时候就没有了,你可以把它翻译一下, 大家可以看编辑完之后这个红色的情况是没有的,也就是如果大家啊不知道 怎么直接写,我们可以直接去拖,对吧?把它拖进来就 ok 了。嗯,还有一种呢, f c 快, 其实还有一种就是还有一种就是没有 没有输入输出的,那大家说 f c 快 为什么会没有输出?其实有很多种情况的,因为 f c 快, 它只是一个功能快,这个功能快可以实现很多功能,比如说有些有些功能快啊,它比如说就想做一个延时,对吧?延时, 只想做一个延时,那它就没有输入输出的引脚,就就像这种,比如像我这种啊,我们也定义了一个 f c, 快, 我们看一下 f c r, 它就是没有输入输出,对吧?它输入输出没有,但是我在 temp 里面,嗯,定义两个 temp 的 变量,这两个变量呢就不算输入输出的变量,所以我们调用这个,嗯,没有输入输出的时候呢, 我们很简单,就是直接啊,要用 f c 块,然后加两个括号就行了,一定要加括号,这是非常重要的,也可以跟我们刚刚一样的直接拖进来,对吧?拖进来就行了,也是一样的一个状态。 呃, ok, 这就是 fc 块的一个调用,如果你熟悉的话,你直接可以在嗯 s l 标标准框里面去这样输入,如果不熟悉呢,就按我的方法就直接拖进来就 ok 了,这是,呃, fc 块的一个调用。呃,然后我们来看一下 f b 块, f b 块的一个调用呢? f b 块其实也有两种方法, f b 块,我们看一下 f b 块呢,比如说你调用一个普通的 f b 块啊,这是 它为什么有两种方法?因为 f b 它会产生一个背景 db, 对 吧?就刚我们在之前说的它有一个背景 db 要产生,但是我们在哎 sl 源去写的时候呢,就是有两种可能,第一种是你调用的这个 f b 块,对吧? 嗯,它生成的 db 块,比如说它生成的 db 块,它独立的,我们就是,嗯,这种 一对一的,我们最开始跟大家讲啊,多少背景和普通的背景 d b 的 一个区别的时候,跟大家讲过多少背景 d b 呢?就相当于,呃,很多的一个鸡蛋放在一个篮子里面,对吧?然后普通的这种 啊, f b 块生成的 d b 块呢?它就一对一的啊,一个鸡蛋放在一个篮子里面啊,这种就在最开始,嗯,之前跟大家讲过,这个我看一下,我找一下,找一下,应该有 对多重背景 d b 的 一个说明里面啊,对,就这个啊,传统的一个单背景 d b 里面就是这种,对吧?一个鸡蛋放在一个篮子里面,然后多重背景呢?就是以所有的鸡蛋放在这样一个篮子里面 啊,那它的一个区别就是我们在嗯 s c l 语言去调用 lb 的 时候也遇到也有这种可能, 如果我想这个 d b f b 块啊,它是一个单背景 d b 的 啊,那就是一个鸡蛋放在一个篮子里面,那 ok, 那 我们只需要啊,在定义这个 f b 块的时候呢,我们需要把这个变量,比如说啊,我们给我给它演示一下,直接比如说把这个 f b, 我 我现在用的一个 f b 一, 对吧?我们把它缩进来的时候,它这个时候让你选择,嗯,让你选择单个实力还是多重背景实力, 如果你选择单个实力的话,那就是我们说的一个鸡蛋放在一个篮子里面, ok, 然后我们可以可以试一下,因为我之前已经见过一次,我们可以直接用他之前的就 ok 了,对吧?就这种,然后直接填他的一个输入数字的引脚,就像我现在这种一样的, 这就单背景 d b 了,这个接单放在一个篮子里,那 ok, 如果你是多重背景 d b 呢?那怎么办呢?其实很也很简单,多重背景 d b 呢?那 你就只需要你在调用这个 f b 块的时候呢,我们选择多重背景 d b 块,然后这个时候它让你选择一个多重实力, 这个实力呢你可以用,嗯,用你自己现现写的,也可以算它自己新建。其实我们在这个,比如说你现在要用多重背景 d b 之前呢,我们会在 我们的调用 l b 块里面有一个啊,静态变量,对吧?我们静态变量里面我们要写一个,比如说我要写这个名字,可以,这个名字可以是背景 d b, 对 吧? f b 零一的被运 g b 吧,我们写一下被运 g b, 然后我们这个数据类型呢,要选择 f b 零零一,对吧?我们可以把它新建一下冲击三档。那么在静态变量里选择 f b 的 d b, 对 吧?然后选择变量呢?选择 f b 零零一,这个时候我们相当于在 f b 一 里面啊,新建了一个背景 d b 块的啊,对应的 f b 零零一的一个背景 d b, 然后我们在新建这个变量之后我们要引用,引用的话我们就是 在 s c r 里面我们选择 f b 快, 对吧?然后这个时候我们都不能选单倍镜,选单倍镜就跟上面一样了,选择变成一个阶段放在一个那里,那 ok, 那 我们选多倍镜呢?那我们就要选择这个 d b 多种实力选择它,然后我们把我们刚刚写的这个 f b 零零一的那个, 对吧?这个变量啊,我刚刚在,嗯静态变量里选择这个名称选择, ok, 那 这个时候它就选择变成了啊,多重背景变量的 f b 的 一个调用了,它就变成了一个啊,很多个 啊,很多个,那个什么很多个气态放在一个篮子里的一个状态, 它跟梯形图去调用其实是一样的啊,我们看到这个状态是一样的,对吧? 呃,然后呢, f b 快 的一个两种情况我也跟大家讲了,对吧?就是单背景调用和多背景调用, 然后它们俩有什么区别呢?啊?区别就是我们之前跟大家讲 c l n 讲西门子的那个多层背景应用的时候说过,其实啊,它们呢有很大的区别,我们今天也在这里回顾一下吧。啊, fc 啊,回顾一下那个 f c 和 f b 的 一个区别, f c 块呢,它是核心,本质是无状态值,对吧?然后我们刚才说有 f b 是 有状态的,它就是会保留 d b 嘛,它有 d b 一个变量。 然后 fc 快 的背景数据快是不需要的,它是 f b 快 是必须有的,然后它的一个数值保持线是不保持,对吧? f b 肯定是保持的。然后变量时序化呢?嗯,它是仅支持临时变量,因为它可以支持 temper, 但是没有 无法实利化全句,变量全句唯一的版本。然后应用场景里面可以看到数学运算啊,可能加减乘除啊,逻辑运算啊,格式算、宽算等。嗯,比较单一的一个数学运算。然后 f b 呢,它可以,因为它有一些 嗯,呃内存变量,所以它可以用复杂的,比如说 pid 啊,计算器复杂逻辑的可以用 f c。 然后当我们在 s c l 圆去写 f b 和呃 f c 的 时候呢,可能会有一些变异冲不过的原因,就刚刚我给大家演示的如果,嗯,直接调用 f c 的 时候,我们可以看到它有一个黄色,对吧?这个没有关系,其实这个黄色 要用 f c e 的 时候,我们看到我们就算把形态和实在写完之后,它也会有黄色,但是这个黄色其实是一个啊,变异的一个,嗯,也是变亮一样的状态,当我们变异的完成之后,它也就会没有了, 但是,嗯,这种状态是 ok 的。 但是我们有的时候可能出现,比如说调用 lb, 未声明啊,未声明背景 g b, 就 像什么情况呢?就是我们直接去呃写 lb 啊,直接写 lb 的 一个程序,但是我没有申声明,这个 f b 对 应的 d b 块它就会报错,这是第一种。还有一种是参数名拼写错误或不匹配啊,就是当我们 f b 里面会有一些参数,对吧?我们可能会有一些 参数,那这个参数如果我们把输入输出改成输,那也会错,对吧?因为它对应的就是必须要跟呃 f b 里面的一个行参啊保持一致,所以这也是第二种错误。 呃, ok。 今天的 f b l v c 的 一个 s c l 语言的一个教学呢,就到这里,这节课其实相对还比较简单的。然后后续下节课呢,我们来讲就讲多维数组的一个数上限和计数啊。 呃,谢谢大家,今天课程到这里,大家点个关注,你们的关注就是我们最大的鼓励,谢谢大家。下一节课我们讲计算数组的元素及上下限。

大家好,我是老刘,很多电工新手看不懂电机正反转电路图怎么转换成 plc 梯形图,今天大白话一遍讲透。首先咱们先看上面的传统的继电器电路图, sb, 一 是停止 sb 二正转启动, sb 三反转启动 km 一 正转 km 二反转,还做了互相的电气互锁,防止短路。 换成西门子 s 七杠两百 smart plc 之后,逻辑一点没变,外部按钮全部接到 plc 的 输入 i 点停止, s b 一 对应 i 零点一,正转按钮 s b 二对应 i 零点零。反转按钮 s b 三对应 i 零点二。 接触器线圈换成 plc 的 输出 q 点正转 k m 一 就是 q 零点零反转 k m 二就是 q 零点一。 电路图里的自锁互锁梯形图里原样照搬启动按钮,并连自己的输出触点做自锁正转回路串反转的长臂触点,反转回路串正转的长臂触点,实现软互锁。 说白了一句话,原来电线怎么接,逻辑怎么跑,梯形图就怎么画,只是把硬接线的继电器换成了 plc 里面的软软件而已。学会这个以后任何电工电路都能轻松改成 plc 程序。关注我,每天学点实用 plc 电工干货!

本视频我们来学习一套状态机写法。状态机分为两层,第一层是主控状态机, 第二层是执行状态机,两层状态机彻底的解偶分工明确。那首先我们来看主控状态机,它只负责一件事状态的跳转和逻辑判断。因为是给大家演示,且时间有限,我只列出了四种状态, 那在我们的一二零零 plc 中是没有酶举的,所以这里要在变量表的用户常量中添加四个状态,数据类型是 int, 它们的默认值分别定义为零、一二三。那我们在 case 语句中直接使用常量名称程序执行时使用的是对应常量的实际的值。 比如当前状态为待机中,其值为零,则代表 case 语句执行状态值为零的分支。 我们先看第一行程序,第一行目的是将上一扫描周期的当前状态作为本扫描周期下一状态的起始值,核心作用是默认状态的自保持, 哪怕后续所有的判断条件都不触发,那设备的状态也不会乱跑,也同样起到显示指定的目的,方便阅读。那紧接着我们来看这个 case 语句, case 语句的执行条件,当前状态数据类型和用户常量一样是 int 型,下一状态也是 int 类型,这样才能相互切换赋值。 我们看程序执行效果,设备上电后,程序开始执行,此时当前状态的值为起始值,也就是零, 这样就代表着设备处于待机状态。虽然默认就是待机状态,但从可读性上来讲,我们依然要去显示指定进入待机状态。在 case 语句的 else 分 支中做一个兜底约束,当直播为 case 的 所有分支时,指定状态为待机,也就是零 case 语句结束后,将更新后的下一状态复制给当前状态,为下一个扫描周期的 case 语句提供分支执行条件。 我们首先来看状态的跳转逻辑,当处于待机中的时候,可以跳转到运行中,条件就是启动信号为去,此时 if 条件满足,将常量运行中的值也就是一复制给下一状态。当本扫描周期结束后,当前状态的值就更新为 e 了, 也就对应着运行中这个分支来到新的扫描周期后,此时 case 执行运行中。分支运行中有两种状态跳转, 分别是故障中和停止中。逻辑的跳转来自故障输入、信号触发以及停止信号的输入。故障状态的跳转逻辑优于停止状态,所以它放在 if 的 语句里面,只有 if 条件不满足才去判断 else if 分 支内的停止状态条件,也就是没故障才能切停止,故障优先。那我们看,不管是待机中还是运行中,都有一个 else 分 支去将当前状态复制给下一状态。 有人可能会觉得这个 else 是 多余的,那这里要解释一下,在状态机的跳转逻辑中,我们需要显示指定每一个状态跳转分支,把它全部猎取出来,这样的话这个程序显得会更规范,更专业。也就是说,当故障和停止信号都没有的时候, 走 else 分 支设备保持运行中。接下来看停止中,此处用到了一个已停机信号, 当在停止中的时候,我们设备如果停机完成,必须反馈给状态机一个停止完成的信号,从而让状态机从停止中再一次进入待机中。 如果不做交互逻辑,只要状态在停止中,就将待机中复制给下一状态,那这样的话,停止中这个状态出不了,这个 f c 就 被待机中覆盖掉了。所以必须有一个来自外部执行完成的交互信号作为下一个状态的跳转条件。那接下来我们来看故障中。 从故障中跳转到待机中通常是有两种写法,那一种就是判断故障信号是否消失,如果消失且按下复位按钮之后,将状态从故障中切换到待机状态, 否则保持故障中。另外一种直接不去判断故障信号是否消失,只要收到复位信号就去切换成待机中。那我们根据我们的主控状态机,它的核心原理就是状态驱动输出, 只依据当前设备工况下达动作指令和上层判断逻辑彻底分开,各司其职,互不干扰。不同状态对应固定的设备动作,待机停机切断动力与告警运行,启动电机 故障,立刻停设备并点亮警报。也有人会疑惑,多工位带墙连锁的复杂项目,这套写法行不通。其实这套是顶层框架整机状态把控局权线复杂工位联动连锁动作, 单独封装橙子状态机和功能块嵌套使用就行。系统层定工况、守安全,执行层做细节动作,层级拆分后反而能规避逻辑混乱,大型项目同样适用。

各位同学,大家好,我是朱江老师任志伟,下面我们进入第三章的第五节的学习。 第三章第五节 w o d 指令,本节课的指令我们上节课也已经提到过了,上节课呢,我们学习的是 four to do 指令,本节课呢,我们学习 w o d 指令, 这两个指令的区别呢?我们上节课也说了啊,半节课呢,我们再回顾一下,对于这个 fall to do 指令跟这个 fall to do 指令呢,他两个都是程序循环指令,两个指令呢,都可以执行这个在程序内部的多次循环啊, 那两个的最大的区别呢?那就是如果你在循环次数已知的情况下啊,最好是用这个否透度指令,如果在循环次数未知的情况下,最好的指令就是这个否透度指令,也就是说我们本节课学习的这个指令啊。 好,那我们往下呢看一下这个否透度指令,嗯,它官方的解释。好,首先我们往下看,对于这个 while, 满足条件时执行,嗯,这条指令呢,他是在使用满足条件时执行指令,可以重复执行程序循环,直到不满足执行条件为止。该条件是结果为惯性的表达式,可以将逻辑表达式或比较表达式作为条件。 也就是说他是对返回值进行判断的,而不是对次数进行判断的。啊,这个呢,我们,呃,我一会给大家做实验的时候啊,大家就会明白,我们继续往下看, 他也可以嵌套程序循环,在程序循环时可以编辑包含其他运行变量的其他程序循环啊,这个呢,跟这个 fall to do 指令是一样的,就是在 嗯,这个角度啊,这个指令的内部呢,我们也可以添加 fall to do 指令,也可以添加 if 指令,也可以添加其他的各种指令进行使用啊,只不过它的循环次数呢,是随着这个外部的角度指令进行这个呃循环的啊,循环执行的。 好,那我们接着往下看,下边呢是这个喔度指令,嗯它的这个结构形式,它的结构形式呢就是喔表达式,然后度,嗯,然后后边呢紧跟的是指令, 往下呢就是这个 and 就是 这个结束啊。呃执行该指令时将对指定的表达式进行运算,如果表达式的值呢?为一处啊得满足条件,也就是说这个哇后面跟着这个表达式啊, 如果值为零呢,则表示不满足条件的啊,这个指令呢它也就会不会进行循环啊,只有满足条件的情况下它就会一直循环,它是随着这个扫描周期进行循环的啊,就是你如果把这个凹柱指令放在 o b e 下边, 那他会随着每一次循环他都会去判断一下这个表达室内的词是不是零还是一。如果一直是一的话,那他就会一直是循环啊,一直是对,一直是一的话,嗯他就会一直是一直去循环,那这样我们就会得到了一个这个 现象,对吧?啊?这就是他会抑制循环的话啊,这该怎么办呢?或者是他能不能进入到我们程序员所说的这种死循环当中呢?嗯,这个呢,我大下节课的时候我们一块去测试一下这个死循环, 并且我给大家讲一下怎样去跳出这个循环,或者是对这个循环的做一些这个优化啊,那本节课呢,我们就光认认真真的学一下这个 y o d 指令啊,就可以了。好,那我们再往下看, 往下呢是我们做一个实力,当按下按钮后呢执行批量数据传输。第二个呢就是嵌套使用一下这个 while 指令,嗯,跟上节课 fall to do 指令使用的方式差不多,实现的功能呀,差不多,但是呢,我们是学一下这个指令啊。 好,我们废话不多说,直接进入程序,程序呢,我已经建立好了。好,这里呢,我们就直接开始写我们这个程序啊,我们首先呢添加一个块,然后呢添加一个 f, c, s, l。 嗯,我们的名称呢就叫 wow。 好, 然后确定 好,我们继续呢添加 db 块啊, db 呢我们直接就叫数据啊,确定 好,添加完成之后呢,我们再回来分析一下。我们第一个实力啊,当按下按钮后啊,执行批量数据传输,那我们是不是需要一个按钮啊?在这里呢,我们就虚拟一个按钮,它的名称呢就叫按钮, 然后它的数据类型呢是 bar 型变量,对吧?好,我们先放在这,然后我们进行写我们的程序, 首先呢当按下按钮之后,我们去执行批量传输,也就是说按钮如果在这个松开的情况下呢,或者是按钮等于零的情况下,他就不会执行这个数据传输,对吧?好,那我们这里呢,嗯,首先呢用一个 if 指令啊,去判断一下我们这个按钮到底有没有按下。 好,嗯,然后呢,我们把我们的按钮放在这 啊,然后呢我们再在这里呢,我们把中间的程序给删掉啊,我们给他多加几个空格,中间呢就写我们的指令,如果这个按钮被按下了,那我们执行玩偶度指令。 好,这里呢他的大体模样呢?我们点这他就会给出解释啊,这里呢是他的那个表达式,下面呢是写这个要循环的内部的指令啊,这里呢我们给它删掉。删掉之后呢,我们首先呢要判断我们是否在循环,对吧?在这里呢我们就先做两个这个, 嗯,做两个数组吧。啊,第一个呢是 a, 第二个呢是 b, 好, 这两个数组呢我们给他建立一下, 嗯,这是数组,然后数据类型呢,我们随便用一个,比如说我们用 int 吧,然后零到十。这里,好,这里呢我们把上面复制一下,然后放到下边来, 好,这样呢 a 跟 b 就 建立完成了,建立完成之后呢我们进行一下判断啊。啊,首先我们对于这个位置的比较的这个参数啊,我们可以在这里写它的这个临时变量啊,在这里呢我们就直接在这边写吧, 嗯,首先呢这个是我们给它起一个名字,叫循环次数,循环次数,循环次数。好,循环次数呢,我们用 int, 好, 我们把这个循环拖过来,我们如果这个循环次数 大于,嗯,我要用英文的哈大于,嗯,比如说十,那么就执行啊它下边的指令啊,执行什么指令呢?我们就执行一下把这个 b 的 参数,然后传, 把 a 的 参数传到 b 里边啊,好啊,这样呢我们的指令呢就大体上,嗯,样子呢就这样做出来了,做出来之后呢我们要注意的一点就是当数据 这个循环次数大于十的时候,那他就会执行,那循环次数的初值是几啊?初值值是不是零啊?所以说呢,在前面呢,我们要给他把循环次数的值给它赋成零啊, 因为我们在复成零之后呢,我们这个循环次数他就永远不会大于十了,对吧?现在这个状态,那他里边的这个数据呢,就会一直在循环,那这样怎么办呢?我们就需要进行给他判断一下啊,我们这里呢就做这个循环次数,然后自加一 冒号,等于等于谁呢啊?就是这个循环次数,然后加一分号,好,这样呢,我们就做成了这个循环次数四加一。呃,第一次循环的时候呢,循环次数肯定是零,对吧?这里的数据就会循环,然后他接着往回跳,往回跳过来啊?嗯, 然后,嗯,他的这个值呢就会变成一,然后再继续循环啊,就这样执行一个反复的循环啊,执行完成之后呢,他就会执行下边的程序,然后再返回来再执行上面的程序啊, 好,在这里呢,我们就先这样做。呃,等大于十的时候,我们就,嗯,不去进行这个循环了,不去进行这个循环。然后最后呢,我们既然他是一个按钮啊,对于我们平常来说呢,按钮的这个循环,如果我按下按钮之后, 是不是他对于程序来说,他就会循环多次,对吧?因为你按呢按一下了,他并不是执行了一个上升延,那这个上升上升延我们怎么去进行给他?嗯, 进行初步化呢?嗯,那我们就直接把这个按钮呢给他赋成零就可以了。这样呢,我们按下按钮之后,他就开始执行第一条指令,执行第二条指令,当这条指令执行完成之后,我把按钮赋成零,然后这整条指令呢,他都不会执行了,对吧?那我们理论上啊,是这样的,对吧? 那我们下载进去,我们试一下到底可不可以啊?可不可以实现? 好装,装载完成之后,我们突然想起一件事啊,没有把这个 c e 调用 好,这样呢,我们调用了,调用之后呢,我们打开,然后再重新下载一下。 装载好,装载完成之后呢,我们在这里呢,给它稍微拖一点啊。嗯, 好,那我们监控 这边呢,我们要往这拖一下,然后我们监控好,首先呢这个结果是零,对吧?首先我们要把它赋成一,在这里呢,赋成一之前呢,我们要把嗯 啊这两个数啊啊进行传过来,对吧?进行传过来之后,我们突然在嗯,还没有执行的情况下呢,我们就发现了问题,这个地方他不能是零啊,他要等于多少呢啊?他要等于这个循环次数, 好,这样呢,这个循环次数如果等第一次呢等于零,对吧?然后再加一,再循环的时候第二次呢等于一,然后第三次呢等于等于二,再往下一直这样循环啊。好,那我们再下载一次。 好,装载完成之后呢,我们可以把 d 给它写上几个数字啊,比如说第一个是一,第二个是二, 第三个是三。好,我们把最后一个十页给它附上啊,比如说十一吧,我们就给它附啊这几个数。 嗯,我们这里好像写的是把 a 的 数据传到 b, 是 吧?把 a 的 数据传上传到 b, 那 既然我们付了值之后,嗯,这样吧,我还是把 a 的 值给它付一下吧,比如说十一、十二、 十三,然后最后呢我们写一个十四啊,下边的数据,我们不要去,不用去管他了啊,嗯,这样他他就会把 a 的 数据附到 b 里边,那他的数据就会覆盖,我们不要去管他,我们直接修改为一确定。 嗯,在这里呢,我们发现程序并没有执行,对吧?这是为什么呢?我们看一下啊, 这里呢我们一步一步啊去排查啊。嗯,首先呢当按钮等于一的时候,这个没问题,因为我们刚才修改为一,然后往下呢是出式化没问题, 然后再往下我们就发现有问题了,数据大于十的时候,那他就不会大于十,对吧?他应该是小于十。好,这里呢我们写错了啊,那这里我们改一下就可以了,改一下之后呢我们再下载双载 状态,完成之后呢,我们就去试一下,我们把这个呢修改为一,大家看着这个 b 的 数据跟 a 的 数据的变化啊,把它修改为一确定好,这样呢,他就把 a 的 数据呢啊写到了这个 b 里边,但是呢我们发现 那最后这个 a 的 这个十四呢啊,最后这个 b 的 十一呢,并没有变成十四,对吧? 这个啊他到底是为什么呢?我们自己去核算一下啊,首先他的循环次数要小于十,但是呢我们这个地方又有十,那这里呢我们可以写。呃,我们就不能去小于十了,因为这个 a 呢是有这个十这个位置的,但是呢我们小于十的时候,他就会在等于九的时候 啊,或等于九的时候执行最后一次,然后他又跳出了,那这里呢,我们如果这个地方我们可以写成十一,或者是呢我们是小于等于十一,这样呢就没问题了,我们再下载 状态。好,那这样呢,我们再去写一下啊,修改为一,确定 好,修改为一之后呢,我们看到 b 的 这个十四呢啊,他已经传过来了啊,他的这个循环次数呢,他也给你显示出来了,循环次数呢?是十一。为什么是十一呢?因为我们从零到十,如果把零算进去的话,他是循环了十一次,对吧?那循环次数呢,他也会给你显示出来,在这里我们因为我们 如果执行完成之后按钮等于零,所以说本条指令不再去执行了,这样呢就实现了我们这个当按下按钮后,他就会执行这个批量的数据传输。啊,这样一个这样一个程序啊,这里呢我给大家注视一下。这个呢,我们实现的是 按下按钮后进行批量传输,为了大家以后看程序方便呢,我再给大家往下写啊, 然后第一个呢,嗯,我给大家都注视一下,这个是这个按下按钮后,嗯后执行好再往下呢就是,嗯触使化循环次数, 嗯,这个呢,我建议大家每次写这个循环的时候都要把这个循环次数给清嗯,清零一下啊,因为你在,嗯,无论在什么情况下,嗯,如果这个循环次数被改变的话,你这个循环就不是一个完整的循环,那就相当于是被破坏掉了啊, 好,我们再往下写,这个地方呢我们写嗯,当,嗯这个循环次数这个变量啊啊,我们直接写吧,复制一下吧, 小于等于十十啊,持续按照扫描 周期啊进行循环啊,这个是不会停止的啊,只要是这个他小于十的时候,这个循环他就不会再出来了啊,他就会一直在里面循环。好,我们再往下写这两个呢啊,大家肯定知道这是给这个自循环去加一, 然后再往下呢,这个就是。嗯,对按钮呢进行一个清零,这样我们按下按钮之后呢,我们不会去做这个重复的事情啊,只会执行这样一次,就相当于是实现了一个上升延的功能啊,相当于实现了一个上升延。 好,那我们呢再往下写往下呢就是这个嵌套使用这个 while 指令。好,对于这个嵌套使用呢,我们还是要做几个变量啊。 嗯,我们这样吧,我们还是跟上节课一样,我们给他写一个 c 吧,然后 d, 然后这两个呢,我们也让他是往这拖一下啊, 嗯,也让他是数组,然后他是一个多位数组 啊,他是,嗯,零到一,零到十吧,零到五吧,然后分号零到五,确定 刚才有错误,对吧?嗯啊,这个地方我们是写零到五,是分号零到五,确定。 好,这样就完成了,我们把这个也给他复制一下啊,粘贴好。那这个循环次数呢,我们也复制一个,直接把这个变量复制一下吧,然后在后边呢进行一个添加。行,然后我们在这个行上面呢把它粘贴粘贴啊。 嗯,好,然后我们叫他,我们随便给他输一个字母吧。 好,这样呢,我们还是进行用这个按钮去当做他的复制啊,我们把这一整条整条指令呢给他写到后边,然后我们再把这折叠一下,我们只写下面的指令。 好啊,那这样呢,我们就第一次循环的时候,我们先不管它啊,上面循环次数等于零,那这样呢,我们要进行嵌套,循环的话,我们就要有一个这个第二次循环,我们可以给他写一个循环次数 d, 在 这里呢,我们首先要出示话题吧,循环次数 a, 我 们直接写啊,循环次数 a 呢等于零,然后再往下呢,是这个把它复制一下吧, 循环次数 b 呢,我们也要等于零。好,那往下呢,我们把里边的东西呢都给它删掉,这个按钮呢一会我们要用到,对吧?那中间的这个嵌套呢,我们要写一下了,当这个首先呢是这个循环次数 a 啊, 循环次数 a 呢要小于等于五。好,然后再执行。再执行什么呢?再执行这个循环次数,我们把这一整套给它复制一下吧,那先把这个不是给它删掉啊, 好啊,这个循环次数呢, b 也是小于等于。好,再执行里面的指令。执行什么呢?我们就把这个 c 里边的这一个数据, 然后冒号,等于等于谁呢? d 里边的数据啊,好,然后呢我们解分。好啊,写完之后呢,它前面有两个尺,对吧?这个呢就跟我们上节课学的一样,把这个 a 跟 b 都给它附上。 那首先呢,嗯,第一次,第一个里边呢,我们要写这个 a, 第二个里边呢,我们要写这个 b 啊, 好,我们把里边的这个这些东西呢,然后给它复制一下,然后我们粘贴到这边来。好,这样呢,我们就大体上写完了,然后我们还差什么呢?还差它的循环次数加一啊,那循环次数 b 呢?嗯, 循环次数 b 要在这个位置写啊,要进行加一, 加一分号,然后在自己的循环里边把自己进行加一啊,那循环次数 a 呢?也要在自己的循环里边进行加一啊, 加一分号。好,这样呢,每一个东西呢都在自己的这个循环次数里边都加了一, 这样我们看似我们程序啊,好像是没有问题啊,好像没有问题,那我们再往下呢就分析一下,首先呢被按钮被按一下,然后两个数值都被触使化, 然后再往下执行这个循环,循环,第一次循环,这是啊,这是他的结束,中间呢有他自己的循环次数加一,然后呢就是这个呢,是这个他自己本身的这这个循环啊,然后他循环是五次。 好,那这个呢,我们感觉上是没有什么大问题的,那我们把程序下载试一下,可不可以啊? 好,现在呢装载完成了,装载完成之后呢,我们把这边进行监控,然后拖小一点。 嗯,这里呢我没有用 int 这个值啊,我们我用的是这个 word 值,但是呢不妨碍我们使用啊。啊? c 的 值跟 d 的 值,我们是要把 那 d 的 值传到 c 的 值里面,对吧?那我们把 d 里边随便找几个数给它赋值啊, d 里边比如说我们 d 零,给它赋一个一,然后,嗯,一一零呢,我们也给它赋上一, 然后我们随随便赋几个值吧,负一,然后最后呢我们要把最后一个负一,这个我们在试的时候呢,一定要 无论中间你要负多少一啊,进行测试的时候,你一定要把第一个跟最后一个进行给他负一,因为这样呢,他才能去判断出就是你才能看得出你这个程序到底是完完整不完整啊?呃,就跟我刚开始写上面那条指令的时候, 这个地方应该是小于十,我写成了小于等于十一,我写成了这个小于十一啊,那他的这个值呢就有可能传不过来,传不过来那两个值呢?他要么就是对乘上一个值,要么就是对结束这个值啊,那我们就去试一下。 嗯,上面的值呢所有的都是零,对吧?那我们把按钮呢修改为一,就这样,哎,我们发现 并没有变化啊,这里面的值呢并没有变化。好,我们看一下这个是什么原因啊?嗯,首先呢按钮被按下了,然后循环次数小于等于五,对吧? 嗯,这里,嗯,他并没有去这个传输这个数据啊,并没有传输数据的根本原因呢?嗯,这里呢,我刚才看了一下啊,嗯,这个地方,嗯,他其实是因为这个上面我们把这个按钮给清零之后,我们下边的这个程序导致这个按钮不会变成一啊。这里 我们最好是用第二个按钮啊,这就是再新建一个按钮。嗯,在这里呢,我们在下边添加一个行吗?我们就叫按钮一。这个呢也是我犯了一个错误啊。按钮一, 然后我们把这个地方呢给它改成按钮一啊,因为上边呢?嗯,我,嗯,这个地方呢,我们把这个按钮一呢给它清零掉了,下边呢?这个刚才那个按钮呢就不会去执行啊。好, 我们把程序给下载,然后重新出式化装载好。装载完成之后呢,我们再看一下,我们把这个 d 的 数值呢给它重新复制一下啊,我们随便赋几个啊,把它赋成一, 赋成一啊,最重要呢是把最底下这个也赋成一啊,好,这里呢,我们有几个数值呢,被赋成了一,对吧? 尤其是第一个跟最后一个,我们已经把它赋成一。好,我们看 c 的 c 的 值呢,所有的都是零,对吧?好,那我们把按钮二呢给它修改为一, 好,这样呢,这个 c 的 第一个值被传过来了,对吧?我们看一下。嗯, d 的 零零是一,对吧?然后再往下拍一,零是一,我们再往上看 一啊, c 的 啊,只有好像只有这个零零给传过来了,对吧?其他的都没传过来,这样呢,嗯,在这个程序里面呢,还是出现了问题,那我们再排查一下它到底出现了什么问题, 那我们就看一下,对于我们本身这个程序来说呢,我们还是从头去分析啊。首先呢,按钮按下之后,有两个被腐蚀化了,对吧?有两个数值被腐蚀化了,然后往下循环这一个次数, 然后,嗯,有一个地方我们当时是被忽略掉了,就是这个在循环这个次数的时候,他是小于等于五的,对吧?他本身自己循环五次之后,他的这个值呢就已经被加到五了,那他在执行第二次大循环的时候,他的数值是不是就会变成六, 变成七,然后再往上加,他就会循环这个,嗯,五乘五啊,等于二十五次这样一个大循环,最后他得到的数据是不是等于二十五呢?对,我们得到的数据呢是等于这个二十五啊, 那这里呢?呃,我们我修改一下啊,等于一,这里呢数值没有变,对吧?那我们往下看, 嗯,这个循环次数呢?啊,它不是等于二十五,它是循环了是六,然后六乘以六呢,是三十六次啊。嗯,在这里呢,我们最好现在要做的是什么呢?把这个数据呢放到这里来,然后我们把这个给删掉, 因为在他自己本身内部循环的时候呢,嗯,他就已经不进行这个循环了。嗯,他他是小于零五,那他加到六之后呢?他就不会再循环了,我们只有是让他的循环再进行循环才行。那这个循环 初识化呢?我们必须加到它本身循环的上边,而不是加到外边加到外边呢?嗯,它只会循环至六次,然后然后再循环的时候呢,它就不会进行这个里边的循环了,它只会进行外边的循环了。好,这里呢,我们把程序进行下载一下。 好,嗯,装载完成之后呢,我们发现这个数值已经变过来了,对吧?已经就是从 d 里边然后写到这个 c 里边来了。那这样呢,我们还是找一个显眼的东西比较看吧。啊,我们把这个数据类型呢给它改成 int 这里,嗯,对于博主来说呢,它是直接改啊,改成 int, 然后呢我们把 c 的 也改成 int。 好,这样呢就没问题了,我们再重新下载一下,我们这样呢,看的直观一点啊。 好,那我们把 g 的 几个数数据呢给他写一下啊,比如说我们随便给他写写几个数据啊。好,嗯,别忘了把最后一个数据给他写上。 好,这样呢, c 里边的数据全是零,对吧?那我们把这个按钮一呢给它修改为一啊,确定。好,这样呢?十一,二,十三,四十五,然后到最后的这个三百三十三啊,它都从这个 d 里边的数据给复制过来了,对吧?啊?这样我们的程序呢就没有问题了, 这个就没有问题了。呃,当然呢,这个我是仿照这个上面的这个 fall to do 啊指令 进行写了这样一段程序,我们在知道这个我们要循环多少次的时候呢,我们就不会去用这条指令了啊,我们去用这个 f 值指令就可以了,在不知道这个循环次数的时候,我们才会用这个指令,然后呢 对于我们之后的这个程序来说呢,我就会视情况而去用哪一条指令,大家呢慢慢的学习就会融会贯通了啊, 最后呢我给大家去优化一下这个,嗯,注示啊,按下按钮一好直行啊,然后往后放放吧,最好能让他一条直线的时候就让他一条直线 好,小于等于五啊, 这个呢也是, 好,这个呢注是呢,我们就写完了,我看一下上面呢,我们也给他规范一下,要别人读我们的程序啊,非常困难,那是。