好,下边说一下这个酷的视频。那我们使用 cos s 的时候,其实 一个是 cost sis 给我们提供了很多很多各种各样的库,我们很多库呢都可以通过使用 cost sis 这些相关的库去实现。另外一个呢我们也可以使用一些其他公司提供的一些个库, 比如使用运动控制功能也有, cost 系统也有我们公司自己开发的。当然我们也可以在网上找到一些个, 比如某些功能的,有一些个第三方公司开发的一些库,我们都可以安装上来,然后去使用。第一个是安装库,安装库的话,我们一个是在这个工具菜单箱里边这有一个库, 用它去点开。另外一个呢是在这个库管里双击打开,在这个地方资源库这打开这样的一个库的窗口, 在这个地方点击安装,选择我们要安装的库去添加上来,添加完了之后,我们可以在这个里这个列表里边去就可以显示出来我们安装好的库,那库在安装,安装完成之后, 其实只是在我们的开发环境里边安装好了,不代表的在我们当前的这个工程里边就可以使用。我们要在当前的这个工程里边去使用的话,还需要把它添加到我们的这个 库管理器里边去,在这个库管理器里边点击添加库,找到我们想要添加的库,确定这个时候呢,我们就把这个库添加到我们当前这个工厂里边去。
粉丝753获赞2009

现在是一些安装设备描述文件,那我们比如说使用一些个其他的一些个 l 设备的时候,我们首先要安装他的设备描述文件,比如说 我们的电机 io 模块啊,在这里边去使用的时候,都是首先要安装他的设备描述文件,那设备描述文件呢?不同的设备类型啊,他的设备描述文件的格式 也也不完全相同,比如说像咱们卡 open 的设备呢,是 eds 文件,然后 那个 either case 是叉 ml 文件,我都可以在这个地方工具下边设备存储库,然后打开这个对话框,然后点击安装,然后选择对应的 设备描述文件进行安装,安装完成了之后,在这个设备列表里面就会这地方就会显示出来你安装 成功的一些设备,下边看一下,在你的工程里边去添加设备,在设备数上点击右键 dyc 进店点击右键,然后添加设备,他会 弹出一个窗口来,在这个里边去选择设备添加,也可以,比如说你这添加了一个设备之后,你添加他的夏季设备,添加他的夏季设备,就是在这个节点上右键添加,点开这个设已经添加好的设备,我们也可以更改他的设备类型, 但是在这个设备上右键更新设备,然后在这个探索唱唱里边选择了新的设备类型。那对于 callop 和移动 code 的设备呢?我们也可以在这在他的主站节点上点击右键,他会有一个扫描设备, 在一个上台下点击扫描设备,我们可以扫描出来这个总线上现在已经已经有的设备,我们可以把它扫描的设备选中,复制到你的工厂里边去,这个是一个是总线的任务选择,假如说你的你的程序里边有多个任务的时候, 你可以去指量你的总线在哪个任务下边去执行。你比如说一段开始的这个,你可以在他主人节点上在这个位置去设置,选择 他在哪个任务下边去运行。其他的像 call phone 和模式袜子也差不多。而这么去设置下面一个呢,就是我们在添加了这些设备之后,他都会有这个,每一个设备都会有他相应的输入输出,那我们这些这些 输入输出在程序里边怎么去使用呢?有这么几个方法。一个方法呢就是你在你的程序里边去定义一个变量, 在这个设备的 io 映射表里边在这个地方去设置,选择上你的你对应的这个变量,去建立他们那个变量和这个 io 通道的一个映射关系。这样的话你在在你的程序里边再去访问这个变量的时候,实际上就是访问这个通道,这是第一种方法。 第二种方法我们在定义这个变量的时候,直接定义定义一个这种直接变量,用这个 at 指定指定你的这个地址。这第二种方法, 第三种方法在你的程序里边可以直接使用这个地址,对,你可以你可以不定义,直接使用这个, 直接使用这个地址使用。在这个 io 映射表里边,我们在程序运行的时候,有时候经常会发现一个现象, 我会发现这这里边的这个单铅纸,哎,我英式表里边单铅纸会发现部分或者是全部是灰色的,你持续运行的时候,明明这个这这个设备上的状态已经发生改变了,这地方也不不变化,那这个时候大概率是这个地方的这个 选项的事,我们可以把它选选成这个使能二去解决这个问题,但是依然在这个 cost 里边,它是,它是注意一种效率的考虑吧。 在默认的情况下,如果你,你的这个通道在你的音在你的程序里边没有使用的时候,他是不发行的,我们可以选选成这个使 男孩,让他一直一直刷新,这样的话你就可以看到这个变化。



如何编写并运行第一个 ctrls 项目?新手一定要点赞收藏。一、点击新建项目,选择标准项目, 自定义存储滤镜和项目名称。二、右键单击选择菜单项添加设备,然后就显示一个片系逻辑对象。三、创建程序,选择添加对象,然后在紫菜单中选择 puu, 给主程序起一个名称。四、通过双击编辑模块, 在编辑器窗口上定义一个变量 ctr, 收集类型为 i n t, 并用零初始化这个变量。就此我们实现了一个简单的程序,每当你调用这个没对象时,该程序就会对变量 ctr 实现加一。 五,双击 men task 对象来配置他,选择添加调用,然后选择你创建的程序 men, 点击确定。六、任务时间间隔设置为二十五毫秒,对于多任务, 按照优先级的高低来执行任务。七、点击扫描网络按钮,编译一下程序。八、在菜单栏在线 登录到下载程序。九、点击菜单栏的调试,启动运行程序,最后打开命程序,可以看到计数 gct 的值在累加。大白话讲公控,一听就懂,关注我,学习更多公控知识!

今天我们继续讲解第六章系统库的运用。我们今天所要讲的内容是字符串的处理学方法, 在我们平常的项目中,特别是牵扯到通讯的时候,基本上会牵扯到对发送或者接收的一些数据的字幕上做一些处理。 那处理这些支付站所用到的一些函数,就是在系统库的 standard 这个里面。 像我们切到这个程序,点开库管类器 dna, 下面有一个均方形,提供了这么多有关连接,删除、查找、插入以及相关的一些 pou, 我们可以看到 他所有的都是一个方形,就是所有提供了速算处理的这些方法都是一个函数,那我已经在 may 函数中把所有的方形的函数是组串的一些函数都写到这边来了, 那采用的就是我们之前讲到的那个调试调试函数的这个模板程序。首先是一个 kiss, 下面是一个取反的一个动作,保证我们只会执行一次。下面我们直接登录到这个程序, 因为测试这些方形的时候,它会有很多很多对应的支付商或者接口,所以我们在待测试这个 man 函数中 定义的定义一些 inter 型的, string 型的,或者是 word 型的,或者是 real 型的一些变量,然后供我们在测试这些 p u u 的时候去使用。 首先测试,测试第一个就是这个 can cat, 我们可以通过拖动这个放到右边这个摇,然后实现一个双屏的这么操作,右边 位置稍稍动一下光标放在这里,你就可以大概看出一些简单的一个英文的这么一个函数的说明, 这个其实就是一个连接,连接两个字串中间,那下面我们直接运行一百 s e 就得到一个 hello word, 这个比较简单。然后这个删除,删除,我们看一下 delight 这边,它是删除 link correct, 就是删除 lin, 连是在这边是,也就是这个 r 一表示就连还有个 pose, pose 代表的是 从哪地方删除,他说零到一都是指向第一个组成,那么我们先从零开始,我们删除大概两个字符, 理论上来讲,我们触发幺零幺的话,他会把 h e 删掉,还有只剩下 l l o, 我们验证一下,触发 幺零幺发现它并它只删除了一个 h, 所以说它这个注数讲的 pose 等于零,也就是对应这个 i r 的这个虚音 pro 的这个变量 input 型的这个边呢?呃, 在实际我们操作起来发现好像不是这样子,就是零,他指向的零跟一的返回其实不一样,我们看一下把这个 ir 也就这个 pose, 我们从第几个字母开始删,我们来改成一, 同样出发幺零幺,那当前返回就是 l l o, 跟我们设想的是一样的,也就是这个 i 二等于一,表示从第一个字母开始删,就是从 h 开始删,删两个,把 h e 删掉,刚好剩下 l l o, 这才是对的。那如果改成零, 那他这个返回值就跟我们想象中的不一样,实际他只删掉了一个字符。 所以对于系统提示说的这个 pose 等于零或者一,都代表第一个主串,其实可能在是运行或者说你发现是有问题的。所以我们在使用 delight 这个方形的时候,一定要把这个 pose 从一开始,也就是说,呃,所有的 in function 我们后面也会看到有关有关字幕上所引的,它不是像我们的数组一样都是从零开 开始,他是从从一开始,也就是说第一个字符就是一,第二个字符就是二,那下面我们把这个 ir 改成二,那第二个字符是 h e e 开开始,也就是删除两个字符,就是把 e l 删掉,还剩下 h l o, 那我们再出发幺零幺, 那还是用 h l 没有问题,那这个就是 delet, 那 find find 就是查找,指不出来,那从 hello 里面去查找,比如说我们查找一个 l l, 输入幺零二,返回,这是一个三,那 l l 第一个 l, 也就是它的访问,这个三,我们可以看到这个三代表的是第三,第一个 h 是一, 意义是二, l 杠是三,所以说他返回值的这个 find 这么一个,所以呢值三的技术也是从一开始的,他跟我们大部分有一些总串了,这么所以呢返回值从零开始不一样,这就是我们 那在处理一些,在处理一些查找缩影的时候一定要注意,就是 find, 它的返回值的缩影是从一开始的,不是从零。那 insert, 然后我们也可以点一下这个 insert, 点到这个图形发现,也就是说它指的就是把 string 二的插入到 string 一,然后插到什么位置呢?这个位置是用 pose 来指示的,也就是说比如说我们插入一个一二三,从第三号开始插入,从第三呢就是 l h e l, 那也就是说插入完了一个字不算,应该就是 h h e l, 然后加上一二三,然后再 l o, 应该就是类似于这么一个总称,我们验证一下,那出发幺零三, 那 h e l。 跟我们刚刚讲的这个是一样的,所以这些自助串啊,就是单个的方形,看上去并不是特别复杂,我们如果对它的注视 呃,不是特别理解的话,你就可以直接就是实际呃运行起来测试一下,那你对他的这么一个,整个整个方形的一个理解就会更深入一些, 那紧接着就是 left, 那这个应该比较简单,就是截取自助串左边的三个,那幺零四触发应该就会返回 h e l h e l 那这个是计算字,不算长度的,那等于,应该是等于五幺零五,返回去等于五,没问题。 mind, 这个就是结局,这部串你可以看一看这个 mind 的函数 lan r e 就是截取五个字母串,那从哪里开始?从从第二个字母串开始,第二个在这里代表的是 e, 那截取五个,那我总共珠串长度才是五个,所以说他应该是会把所有的全部截取掉, 也就是说幺零六 s 一的返回值应该是 e l l o。 我们出发一下幺零六,那 e l l l o 没有错,也就是说如果你的 r 一的长度超过了它走向这么一个数量, 那也就会把剩下的全部截截取掉啊。如果我们从一开始截取两个,那应该是从应该返回的是 h e, 你再触发幺零六 h e, 没错。 replace 替换来替换,我们再点开这个,一个 d l r e 代表是一个长度, 然后一个 p 代表的是一个位置,从哪里替换? 对,这个不是理解,没有不是特别理解,没关系,那我们就直接验验证一下。比如触发幺零七, 我们看看幺零七,它就等于幺二三 l l o, 那大概就是什么意思呢? i r 代表的是就是这个 p p 的位置,是一个位置从哪里开始替换? 从一的话就从 h 第一个字符 h e 开始开始替换,那我替换几个字符,替换两个字符,把 h e 替换掉,用什么东西用 s 四去替换,所以这个就比较清楚了。那我们在一二三四五六七八九 换成 this is 这样子,我们假设把这个五六七换掉,那五六七应该是第五号开始 把五六换掉,呃,把五六,把五六换掉,五六换成 q w e, 然后就应会应该会变成一二三四 q w e 七八九,我们触发一下幺零七 q w e 七八九 问题就五六没有了。所以说再次就是对于这个他的解释,不明白的话你就去测试一下就可以了。 right 应该是比较简单,就是右侧去这三个,直接触发幺零八 啊,去两个口就八九。那刚刚所进行的就是所有的单个功能,我们都 去那个计算了一下,那下面我们自己做一些小的功能,比如说像我们比较比较硬的,比较经常的就是比如说合成字不串,那相比于系统提供了这种字不串的合成,我们可能会两个字不串,中间会加一个分割 的这种方式,那我们实现这个,所以有个分割服务,那可以两个两个字不串,那如何去使用我们的提供的这些个方形,然后去做一个我们自己想要的一个功能,那这个 这个也就是说实际上就是先把菌一跟这个分割符先做一个连接,然后把连接的结果再跟这个菌二再做一个连接,那就完成了。我们添加一个分割符的这么一个,组成连接的这么一个方法, 那 as comp cat 二,等于 string 一分割符 这样一个结果给到他,然后再去连接上你的 contact 二,那实际上这样的话,那也就完成了, 下面我们直接试一下幺零九幺零九 s e 等于 s concate 分割符,我们使用逗号 第一个 s 三,第二个 s 四,直接 ctrl 一登录, 直接运行幺零九,应该会变成一二三四五六七八九,逗号 q w e, 那结果就如 我们所料,那如果,嗯,如果我们需要连接三个呢?就三个字母串 c 一二三,怎么办呢?再创建一个, 再加一个三, 然后像这样子再写,继续往下写也是没有问题,但是会特别复杂,嗯,会写的特别多的。行, 我们其实还有另外一个办法,就是说我们可以先使用已有的这两个,已有的连接两个组成的这么一个方法,那我们先使用它,使用 你已经有的这两个,嗯, steam 一, spin 二,那这个就已经完成 spin 一二的这么一个,下面再怎么办呢? 那还是在用它。那把之前的这个结果放在这里,来,这边连上数据三,这样不就可以了? 就是可以利用已已有的,那下面我们再测试一下 幺幺零三, s r ctrl 一 给一个 l k, 触发幺幺零,可以看到 l k 逗号一二三四,然后也能达到我们的一个要求,那有人说我可能需要四个,以此类推,你再写一个,写四的时候记得 这边用什么呢?这边用三,先用一个三,再用一个,再用一个二,然后就完成了, 他们这个四五也是同样写法。那如果我要连十个,那是不是说那是不是我要一直从二一直做到十?那也不需要, 也就是说大部分的我们的一个使用场景可能二到五就足够了。哎,就如果是五的话,如果是你真的是要连十个字不算的话,那我们可以 在我们的程序中直接使用两个五连的,然后去组成一个十连这么一个速算就可以了。呃,也就说没有必要你要去从二做到十,如果他需要有连接二十个速算,那也要一直做到二十,这也不太现实, 那这个就是支付串连接的。然后我们就讲到这里,那既然有支付串连接,那肯定有支付串切割,下面我们做 一个把我们输入的主串按照我们指定的分割服务切割开来。那这边 首先首先我们先考虑下这个算法,那就是我们首先要找到这个分割符所在的一个珠串,然后再使用一个什么呢? left, 比如这个这这个方向的反应位置在哪里?然后我们使用一个 left, 所以把左边的这个给它切回来就可以了。 那我们先看 find 的返回词, find 的返回词是是什么呢? 拖到这边呢?发的反而是一个 inter 型,我先定一个 inter 型的变量, 使用 i index 等于 fight, 从哪里找?从这个 s input, 我们输入了这么一个参数里面去找, 找什么?找这个分割符,返回了一个返回了一个方案的这么一个缩影值。由刚刚我们测试知道他这个值是从从一开始的,也就是说 假设我们是一个一二三逗号,假设是一个一二三逗号四五六,那么你这个 对这个子弹进行一个查找,这个逗号他返回的是应该是一个四,但我们其实只需要前面三个,所以说对当 选的这个算法,那么直接第二步,利用这个 left, 利用这个 left 并联 as input, 根据这个的返回值 index 减一其实就可以了。像我们测试一下 幺幺幺 s cut left, ok, 看一下我们接口,第一个是输入助算,第二个是分割符,这个顺序一定不要搞错, 我们要切割的是 l k, 不对,我们就输入刚刚所说的一二三逗号四五六,然后我们可以在这加个断点, 直接幺幺幺滚出 qq 进去 alt 加二进入,加入先查找,刚好等于四四减一三 left 去三刚好帮我返回一二三,没有问题 啊,这个就是使用就是 dana 助战库提供的这些最基本的方形,然后我们再去实现我们程序功能中所需要的这么一些常用的这么些方形函数。 那有关这个 standa 的这个字母串的处理,我们今天的内容就讲到这里。

今天我们继续学习第六章系统库的应用,我们今天要讲的内容是内存快的这么一个操作, 内存快乐操作在我们一般的项目使用中使用的不是很多,但是会在处理某些 应用场合的时候会非常的方便。比如说我们当前有一个 around bite, 一个自觉型的数组,或者是一个自定义的结构体的这么一个数组,那如果按照一般的方式呃对他进行一个复位操作的话, 可能会像我们当前 ppt 页面第四到第九行这样去写,用一个方循环,然后依次的对它进行零复 fast 这么一个处理。那么如果我们知道这个 system memory 这么一个库的话,直接使用那第 幺零幺的这两两段就可以完成上面有方循环的一模一样的这么一个操作,看上去会非常的简单,那我们就这就是我们需要讲的第一个 this this memory set 内存区域的这么一个设置,那它 是一个方形,首先需要指定一个目标的一个地址,那地址我们使用在这当前的程序使用 adr 取地址, 然后要把这一块地址你要设置多少多少长度,那使用个 size of around bite, 那这个数组占用了多少个字节?比如说他占用了一百个字节,那么 size of 它的范围就是一百个字节,也就是说从 adr 开始的地址, 然后把所有的内存往后从这个地址开始,后面全部设为零,那设多少个为多少个自己,长度是多少,那就是一百个自己,那这个就是 system memory set 这么一个操作。 另外这一颗是内存串的内字节复制的这么一个操作,也就是说我们可以使用当前的这个把 s e 这个轴串的内存内存字节的内容直接复制到这个 run bite, 复制这个 run right, 呃,当前这个操作可以干一些什么事?达到什么什么样的后一个效果呢?就是说我们可以清楚的看到每一个字母串,它实际在内存中存储 处的那个实际的单元是什么,也就是可以完成一个字串像 x 个码的这么一个转换的这么一个处理。那还有个就是内存比较的这么一个操作,需要用到一些 特定场合的时候,我们可以使用这个比较可以比较任意的两个注册类型,只需要给一个地址就可以了,只需要给定一个第一个地址,第二个地址,然后设定比较多少个。 那下面我们直接在程序中看一看这几个有关内存块的操作,那这个是上次说讲的这么 有关字幕上的操作,那今天我们可以直接把这边做一个剪辑,按照我们之前所讲的可以创建一个 action action, 这是刚一百左右的 string, 我们今天要讲这个内容内存块的操作,我们把它放到从两百开始,然后同时把这个杠一百的像这种操作在这里做一个调用。 首先我们先定一个这个串,呃,那个数组 by they are bite 这么一个数字, 啊啊,零说九九九 of bite, 它定义一个结构体, s t, 杠 d u t, 把这里面的所有的数据复制一下放到这里来, 然后再定一个 d u t 的这么一个数字, s t, 杠 d u t。 我们编一下,把这两个不要的删掉留下来哈。 下面如果我们需要对这个,比如第六行的这个 a r d o t 做一个复制的话,那一般的操作我们可能会用到一个 for 循环,那我们先用 for 循环, i e 等于零 two 九九九 two, 那么这就 a r d u t r e 点 bite, 也就这个 bit 里面它又是一个数组,那也就是说我们需要再嵌套一个 phone 循环,那有关这个 bit 你先不写 i e 等于等于零,那依次要写很多, 那这个操作的话肯定是可以实现我们的一个方法,那在这里我就不再做演示了,因为写完太复杂了,我们直接用我们第二种方法使用这个 s y s m e m state。 有人喜欢这个,他并没有自动跳出来这个 memory 库啊,在我们新建完这个工程以后,默认他是不加载这个库的,那需要让我们 添加库的时候主动去搜一下,就是这个库默认是不勾选这个显示高级库的,你也是找不到的。单机显示这个高级库,然后就可以看到他点确定, 我们可以看见。我们今天主要介绍的就是这个复制 set, 还有一个 compare, 其他的用的不多,有兴趣的可以自己去验证验证 括号。第一个就是一个地址,我们从哪里开始去设置这个边料取地址 a d r a r d u t, 然后再把它把它设置。为什么东西既然是 对于这个 ar dot 做一个复位呢?所有的轻微的轻多少个自己是一个 size of ar dot, 也就是说不管你做的这个 dot 有多么复杂, 我们只需要在一行之内就可以做到对这个很复杂的结构体做一个内存复位的这么一个操作运行起来,下面我们随简单的 对,比如第零号的这个,这个数据一二三四,然后对他的一十号幺零幺幺幺二,做一个 q, 做一个写入,这是第零号元素。同样我们对 d 版也是做同样的一个操作, 十号、十,十一、十二,也就是当下我们需要对这个一千个的这么一个 复杂的这个结构体的输出做一个复位的这么一个操作。那些我们只需要触发二零一就可以触发二零一,在触发二零一之前,先把这个点开, 先我们单击调试写入,可以看到所有的都被已经复位掉,十,第零号,看到第十号所有的都被清空了,那这个就是 system memory, 然后比较常见的这么一个复位复杂结构体的这么一个用法,那另外一个叫 system copy 二零二, this m, e, m, c, p y copy。 有时候我想看看 s e 这个珠串,它的阿斯科马对应的都是多少, 你可以 destin p, d, e, s t 就是目标。我们把这个内存复制到哪里?复制到我们的字节数组 a, r, bite 从哪里开始复制?从 s e 开始复制,复制多少个多少个字符呢?我们复制使用这个 land 字符数 数据去复制。在这里我就没有用这个 size of, 因为诶对于 s e 来讲,它是一个 string, 它 morn 占用的是可以最大可以传八十个字符,也就是整个 s e 的 所占用的内存地址,其实八十一个字体,也就是说你使用 size of s e 的话,它其实要复制八十一个,那么如果你 s e 后面都是一些空的,那就好毫无意义,所以我们只复制有效的有字符的这么一个数据。使用这个 land 下面我们对这个 s c 给他做一个复制,比如一二三是 五六七八九九个,那出发二零二二零二。好,已经复制完毕,我们检查一下这个 质量数组,可以看到那一对应的斯格码其实就四十九,所以说零到八,总共复制了九个,我们就可以 看到当前的这么一个操作。 那有关这个 system memory 这么一个用法。先讲到这里,我再看最后一个 system system companion, 就是这么一个比较,你先看一下这个比较这么一个接口,它有个返回值,它是一个 d i n t 的,那在这里我们有些 要把用到的这个数据定义好, d i 一 d i 二 d i 三, d i 四,多定义几个 d n t。 我们比较什么呢?我们把这个 我们定义两个,我们直接比较 s e s 二, d r e 等于 d r e 等于 s s memory c m p。 比较第一个这个 buff e r 就跟上面的没有一个前后关系,就没有,就没有一个呃目标或者语言什么一个差别,它就是比较两个内存, 但是返回这个结果跟你写的这个顺序是有点关系的, 比如说当百分之是一的时候, buff 一的变量是大于二的,那负一是小于等于零的话,就两个的内存是一模一样。他这个比较完全是按照 ask 码的这么一个顺序。我一会演示一下 a d r, s, r 比较多少,那我们使用一个变量,比如说呃 i r 好了, 报错重复 s 一是一二三四五六七七九八,那我们这边输一二三四五六七八九, 第一是七九八,第二个是七七八九。我们比较几个字符呢?比如说比较六个,就是一二三四五六,一二三五,前面六个都是一模一样,那这个反过去应该是零,我先默把它改成八八八, 免得触发完感觉这个零到底是防伪值是零还是怎么着?我们输入二零三, ctrl qq 写入,那它直接等于零,也就是说前六个字符是一模一样的,那如果改成九,那两者肯定是不一样, 七九八肯定是大于七八九,所以它的反应是应该是一,我们看一看二零三,反应是一,它是完全按照阿斯科马的。那我们又刚刚我们说的这个 i r bide, 它里面就是一二三四五六七八九。如果我们使用, 因为它只是一个 disc, 对是你的数据类型来讲是完全没有任何关系。我们再看看 后面这个是七,后面这个是看看七九八还是七八九, 应该是七九八七九八,所以他应该反问就是零,因为比较的是九, 我们再触发一下二零三,应该是零,果然是零, 那这个就是比较在一些特定场合的一些用法,就是说可能你的项目在当时还用不到,用不到类似于这种这种这种操作,那就是, 但是你要知道,然后这个内存操作有这么些功能。那下面我们来另外看两个方形的函数。 有上节课我们讲过这个切割,切割一个,按照一个分割符切割一个输入的字符串,但是我们希望把这个音谱的字符串,它可能有很多个元素, 我们把它切完以后放到一个数组里面,那第一种实现方式呢?就是我们新建这个方格形的返回值,就是一个数组零到九的这么一个数组,那这是一个输入的轴串,这是一个分割符。 下面我们看一看这个具体的视线,先清理两个计数器,这个是缩影值, 使用发音的函数找到这个,这这一步的话跟之前写的那个是一样,那如果反复字等于零的话,那就是没有找到,那没有找到就直接把 输入的 s input 的这个直接给到我们的元素数组,这个是一个数组,当前看的可能是零,我们先 先先放在这里先,也就假如说我给的是一个一二三,逗号四五六,那么 i index 范围是应该是一个四,那此刻我使用 index 减一,使用 left, 就把第一组元素然后 切出来,放到这个数组里面去,那紧接着使用 as input, 然后删除这个 as input, 就是把 as input 这个字串 本身做一个删除,删除多少默认,比如说我们一二三四五六七八九,删除多少?首先是先把前面这三个删完, 那前面有三个的数据,那就是 index 减一,剩下再把我们当前的这么一个分割符删掉。分割符删掉为什么不用直接是一?因为我们的分割符有可能是两个字符,有时候有可能是像这个, 所以说我们使用了一个 land spot, 这就是取分割符的长度,这是分割符的长度加上分割符前面的这么一个长度,我们删掉这么多,从第一个开始删除,这是之前讲的这个 delete 的函数,也就是说那么剩下的元素 再复制给 s import, 然后把这个技术题加一,等着 y 循环,再来到第二次循环,然后再重复一模一样刚刚的动作。那这个是 第一种实现这种方式,这种实现方式,嗯,它的返回时本身就是一个支付成数组,那我们需要在面函数里面再定一个支付成数组,然后使用 十七号二零四的这么这么一个操作。在这里有一个限定,就是我们的反,我们的这明显是定义的这个,比如说我定义是十九,嗯,编一下就会报错,就是说当前的这种切割方式,必须要求 你定义的这个类型跟方形函数里面一需要一模一样,否则就会报错。我们看看,再看看第二种实验方式,第二种实验方式我们就用了,今天学到这个 member copy, 我们可以想象,想象一下这个 main handle 的这个 a r string, 那么它是有十个元素的这么一个 string 型, string morn, 它的元素,它 string morn 占用了这么一个 元素大小,我们可以用这个算一下,二零六, r 一 就等于 size of string, 这个末日应该会等于八十一。我们同样再计算一下, size of a r string 应该是八百一。 首先触发二零六,看一下,二零六啊,八十一,八百一有十个元素,所以说 那么第七行 a s 菌就是一个八百一十个字节的这么一个变量,那每一个元素占用八十一个字节,所以我们可以利用这个, 这些都一样,那也就是说等于零的时候,我们先不看,我们先看第九号,如果他不等于零,我们需要复制,复制第一个是目标的这么一个 地址,目标地址就是我们给进来的这么一个呃数组的这么一个地址, 数组的地址加上这个计数器乘以 size of, 也就是说 more i count t 是从零开始,那就是说我第一个元素组的目标地址就是对应数组的第零号元素从哪里开始? as input, 从这个地址复制,复制多少个,那就是 index 减一也跟跟刚刚的那个元素数量也是一样的,那这一步也是一样。删除,那就是加一也是一样, 那像这种的话有什么好处呢?我们使用这种实现方式以后,对于美函数来讲的话,因为你在调用的时候像二十行这样去调用,我们只是给了一个地址过来,那么对于你的这 air string, 你定义成九或者十九都是都是可以的。 嗯,像 a r 像这种方形的话,还有个什么包,它是比较耗内存的,因为也就是说你为了完成一个 呃制服串,然后切割成数组这么一个操作,你需要在 fans 里面定一个八百一十个字节的这么一个变量,那在面前的时候你需要再定一个八百一十个字节的这么一个变量,当这个多了以后,他确实对你的内存消耗 比较大。下面我们直接登录测试一下,首先每天测试二零四, 那第一步之前讲就是把这个清空看,当前是有数据 新调 boss 加二进入我们写的这个四四不等于零, 直接 left 四减一等于三,取一二三,然后复制给这个零号元素,此刻你只是把这个值复复制给了 方形这边,那外面的这个 a r string 这个数组它还都是空的,我们继续运行,来到第二次循环,同样再去查找四五六点七八九,那依然四五六, 一次做完等于零,等于零的话就最后一个,直接把七八九这一个就不用做任何的给到七八九,这个时候, 那我们的返回值其实就是这个数组啊,再给它 a r s g, 这边可以看到一二三四五六七八九, 我们再看一下二零五,二零五 alt q。 出发再清空进入 此刻当前的方形里面是没有的,我们只给到给了一个地址,进来先找一下等于零,此刻我们复制从取地址 s input 这个地址,取三 三个字迹,那就是取一二三放到零号元素里面,我们注意看一看,明显说里面的这个 as 菌灵,它直接一二三就进了, 下面都一样,然后第二次切割,此刻啊 count 变成了一那一乘以它 p h p around, 这个是他的地址,加上个一乘八十一,那就刚好指向第一号元素,那么我们再复制就四五六 g 依次同样操作,这个是二,在这一步的时候需要做一个变更,因为他就不是 index 减零了,那就是把剩下的七八九是用 lane, 有几个 字符你就复制几个字体,你自己把七八九复制过来,那就可以。他要完成我们的这么一个操作, 举了这么一个例子,就是侧面的,然后想讲一讲这个 system memory copy 这么一个操作符的这么一个概念,它在于我们特别是处呃跟指针搭配使用的时候,会让你的程序 比较灵活,那有关,今天 memory 操作内容我们就讲到这里。

从今天开始我们学习第六章系统库的应用,我们今天所要讲的内容是定时器及边缘处理功能快的用法, 那定时器跟边缘功能快是在哪里呢?他是在这个 steno 库里面, steno 库在我们新建完工程的时候会默认加载到我们的项目中,现在我们打开这个, 打开这个程序,我们看一下,我们首先点到库管理器,来到 steam 这个库,然后在参谋的这个文件下面可以找到三种电视器, 分别是 t o off, 但 t o off 是关闭延时, t o n 是开启延时, pp 是一个开启脉冲,这是定制器的功能快,那么边缘功能快是在这里, f 是 falling 下降眼, r trig 是上升眼。 我们先看电视器,我们点到 ton, 在输入输出这边可以发现他其实是一个方式 block, 所以说所有的电视器他都是一个功能块。 那由前面的章节我们知道,我们在使用功能快的时候,首先是要吊用,首先是要声明, 那我们已经声明好了这三种定时器的这么一个实力,声明完第二步就是要调用起来,下面我们登录他这个控制器, 我们先看这个推温 tv 是开启延时,就是我们开启这个音角 ton 在图形中可以看有两个角,两个输入,两个输出输入,英语 是开启定时器, pt 是一个定时的时间,那 q 是定时器到达一 t 是时时时的一个计时的一个时间。我们看一下, 我们首先给一个定时时间,就是两秒给音写个处可能出 q 写入值,那定时就开始计时, 计时到两秒 q 量。当我们富裕到阴角的时候,那么 q 跟一体同时复位,那再次出发,再次计时时间到达,那这个就是一个开启延时,也是我们最常用的, 我们下面看第二个 tf 是关闭延时。首先我们先开启, 开启后你会发现 et 的值会变成零, q 的值会直接有处了, 然后当我们关闭音角的时候,那这个时间就开始计时,接到两秒,然后 q 就放肆掉,所以说它是一个关闭延时,在我们开启的那一刻 开始计时,此刻 q 一直在亮,那计时到达可以灭掉,所以 t o 是一个关闭延时。但对于 tp, 我们再看一下,同样是定时两秒,我们开启,此刻 q 字一亮起来, 那定时时间到 qq 就自动关掉,他就像一个脉冲一样,那你设定多少时间,他就会亮多少时间,这就是一个脉冲开启脉冲 第十七,这三种电池器理解起来并不复杂,那需要我们呃十电话,然后运行起来,这么测试一下,你就能很能明白它大概的功能。在这里我们使用最多的就是一个 to 开启一个延时,同时还要注意的问题 就是这个叉 m 这个电视是类型,这个类型呢其实是一个三十二位的一个数据类型,让我们找到当前的这个 time, 就是在 操作数数据类型这边参谋产量。在某可以看到有几种 定时的时机, m 是什么呢? m 就是分钟, h 是小时, d 日航秒, s 跟 ms 是平常用的比较多的。 让我们知道开幕他其实最终一个单位,他是一个好秒单位,他是一个三十二位的一个好秒单位,那么他最大的一个定时时间是多少?在这里我们可以通过这个计算器, 三十二位,我们切了这边三十二位对石榴进来演戏,就是八个 f, 八个 f 的最大值就是四十二亿左右,我们可能是 c 复制一下再回到这边来, 四十二亿,先除以一千换成秒,再除以三千六换成小时, 再除以二十四换成天,那就是四十九点七天。所以说胎木最大的定时时间是四十九点七天,我们定个四十九点七, 四九点七 看已经超过了 井号四十八,四十九点,四十九点七 d 是可以的哦,当我们第四十五十 d, 那有个报错,就是五十 d 已经超过三十二位,差那么一个时间, 就是开幕数据类型,我们在这里要清楚,那当然了,我们基本上是不会用到这种以天为计时的这种单位,基本上那平常我们用的就是好秒的这么一个计时单位,但是我要知道他们的最大定时时间他是有点限制的, 那这个就是我们讲的三种电视器,那下面我们再看看这个边缘,那边缘其实我们可以发现他也是一个方式 blog, 对于我们先看上一上眼, 上升眼的话,它是有一个银角 clk, 一个输入银角,一个 q 的一个输出银角,那么根据这个 clk 从 force 到处的时候呢? q, 然后存在一个周期,那这个就是上升眼的概念。下面我们也同样定义 nice trick 功能快的使用方法,先声明再调用, 由于这个这个相声因他只会运行一个周期,我们在这里要加一个计数器, 去比较明显的看出我们上升前的出发这么一个过程,这个比较简单,要 f r trig, 上升前出发的时候,我们让这个阿一加一, 然后下降盐出发的时候让这个二加二,加一。 好,我们再次登录到控制器 archig, 我们触发的 clk, 仔细观察阿姨, 他就直接加了个一,但是 q 你是看不出来明显的一个变化了,因为他只遇见一个周期,那我们如果想 想要很明确的看到这个 q 的一个变化,我们可以看怎么办呢?把断点加到这里来,我们再出发 cok, 你就会发现 此刻 qq 是处的如初八商业,我们二加三跳过,你怎么还走 前面那些不管?当我们再次运行完第六行,这个 q 就会变 false, 也就是说第二个周期再扫到这个啊,这个的沟通快,那他是就会变 false, 所以他就是一个上升研的这么一个出发,只运行一个周,只保持一个周期。 我们再看 foxy fox 下降音,下降音,下降音就是 clk 从数到 false, 然后会触发走 q, 那也就是说 从 fas 到处他应该是没有反应的。我们在这边加个断点, ctrl qq 写入,没有触发任何, 也就是说 siri k 必须从数到 fast 才叫下降言,我们在 ctrlq 写入字,那此刻就会触发下降言。问,同样加一在词性观第七行,它也会变成 fast, 所以这就是上上下下下下的感觉,也比较好理解。但是有时候我们在做程序的时候,项目中 会对某一个信号,比如说一个传感器的信号,我们既要他的下降,也要他的下降,那么每一个我们都要定义两个功能款,那就比较 繁琐一点,那我们能不能自己做一个功能快,然后同时实行两种功能?下面我们试着写一写,同样 clk, 我们也定义一个输入边料, 既然是有两种输出,那我们在第二的铺子的时候有一个 be our trick, 上升眼,下降眼 be four trick。 在这里我们需要定一个什么呢?需要定一个中间变量,八伏的一个中间变量。那这个程序其实 我想一想,上升研是一个什么样的概念?上升研就是等于前面是一个 fauce, 然后跟上一个处,他就会是一个上升研, 前面是一个 fauce, 所以说他应该我们直接可以这样写, buff and b clk b f trig 就等于前面是一个处, 然后按上一个 foss, 他就这个下。 当然了,我们可以不用这个 buff, 然后直接在面色定义的这两个直接拿过来用就可以了。那就更简单一点的,其实 我们只要知晓这个上上下下下这个圆脸其实可以自己自己这样写,那这个八幅等于什么呢?就等于 bclk, 我们声明一下,吃一个,然后测试一下这个, 同样跟这边一样,说明玩具吊,用起来 shake all fb tricks didn't be on trip all s b。 我们点开这个,这边加个断点,在这边也加个断点, 在这里我们先统第九行,我们先加断点,先看,先进入到这个功能框里面看一下, 当前是 not above, 那么 not above 是一个 true and 是一个 false, 所以说他也是一个 false, 也就是说当往外面 be style 开为 chew 的时候,那这个啊 trigger 它就会变成 true, 我们再看第二行,因为 b buff 是一个 false, 所以第二行肯定是一个 false, 然后我们再看第三行,第三行是把你的 bclk 的直,假如说我们 bclk 他是一个处, 我们右键再设置下条鱼,再再回到第一行,我们可是 qq 写入,写入这个值,这个我们可以看一看。 br trigger 有个输出 f, trig 没有这个它是有个输出,当下一个周期再进来, 当下一个周期再进来,我们在右键是指微下调以及下一个周期,我们认为下一个都已经进来了,然后再来,你看啊,这个就变成了 boss, 对,然后 f 这个它已经像是一个原理是一样的, bbof 一直保持一个 cl, 开始处理这么一个状态,那这这个是一个上升员,这么一个处理,这么一个效果,我们在此还得把它弄成 好,下面我们都把它清成泥, 直接触发 bclk, 上升沿触发加一 f 五运行, 比赛还可以变成 false, 那下降言出发,那么到这个时候呢, 我们就完成了这么一个,把上升跟下降也然后合并到一起。那在这里我们要把这个稍微改一下,变成一个 input, 否则你在这边的眼角比 clk 他就显示不出来,那么也就相当于这个视物眼角没有开放出来的话,那别人是没有没有办法去用你这个上身下降眼的。 那我们再总结一下今天的内容,今天内容主要是其中在这个 stand 这个库里面,那有个 time 三种电视器开启延时,关闭延时,关闭延时,关闭延时就是你触发这个音角的时候, 触发这个音的时候 q 即刻会变成触,那这个自己可以 新建一个空白的一个功能程序去演示一下。那另外一个就是边缘上十年跟下半年,那我们也可以自己做一个同时支持两种边缘的这么一个功能的话, 那就是在项目中如果你当前的一个需求只是一个上升研的话,我们就直接用这个啊吹,如果只是需要下降研呢?你就用这个,如果同时需要两个,那你就可以声明自己做的这么一个功能。那行,我们今天的内容就到讲到这里。

然后下面的话我们来看一下这个酷酷的一个创建以及使用。像酷的话,我们可能你做的,比如说你做你,你刚才做的那个 f b 这个功能 可以比较实用,对吧?比如说你写的这个功能可以去进行这个什么呃,大小端的这个一个交换呀或等等这些功能,你可以把它封装成一个库,然后给到别人去,他都可以把这个库加上之后都可以去用的。 大家给咱再点点赞啊,给咱点到一万,好吧?然后我们来看一下啊, 像这个库里面他提供的功能的话,就是不光我们可以创建那些功能块,然后去写东西啊,就是写一些你 要实现的这个内容,然后像他的数据类型这些他都可以去在里面创建的,包括那个可视化里面所用到的一些元素,比如说像有的图片啊等等很多,对吧?你不可能每一个工程都去加一遍,也挺挺麻烦的,你可以把它做成一个库去添加都行的。 然后我们酷的名称那个后缀名称的话,默认的话是这个点 library, 然后另外的话我们还有 另外一个就是后缀那个叫什么 completely 这个什么 library 那种就是一个是编译,一个是编译库,一个的话就是这种普通的他们俩的一个区别的话,就是一个可以看到原码,一个是看不到的。 就如果说你的库里面的这个代码你不想让别人看到,那你保存的时候你就要选成那种编译库。 呃,这一周的话,我们现在 s t 的话已经讲了三天了啊,今天是最后一天,然后下次的话我们开奖前的话我们都会通知的啊,你可以加一下粉丝群, 然后我们后后期的直播的话,我们都会在这个抖音平台上面直播的,所以你加一下粉丝群的话,可以呃随时获取到我们的一个直播动态,包括我们的一些相关视频啊,是这些都会发布的话,粉丝群里面可以,呃,提前知道嘛? 然后我们直接看一下吧。啊?直接来看一下,现在这个是一个工程,我们要给他新建啊。新建,新建的时候你看左边的话,他有工程跟库之分的,如果你在工程 下面的话,就直接去创建这个标准工程,然后这个就是创建工程的,然后库的话我们就选择下面这个,然后我们选择这个这个库就可以了,选择这个库,这个就是我们经常用的,其他的,呃,用不太到, 然后酷的名称,对吧?给它设一个名称 也会上传 b 站,我们像我们的微信,呃,微信公众号里面,微课堂里面我们会上传,然后那个抖音上面也会放,然后 b 站上面的话也会传。 前面两场的直播的视频的话,我们都已经传了啊, b 站可能还没传,但是其他的像微信公众号里面,抖音上面的话已经放了, 然后这边的话就是一个库啊,看这个后缀就是点 library, 这边是库,然后我们创建的是一个标准的库嘛,所以它上面的这些,呃,就是有一些标准的模板是可以用的啊,像它一个,呃 存放什么错误代码的一个什么结构体啊,或者说是功能快的一些文件夹之类的,他他提前帮你创建好了,你可以不要啊,你可以把他都删掉,都没关系的。像你如果你什么都不要的话,你刚像刚才创建那个空白库 都行,空白库的话就是里面啥都没有,你想要什么你就自己去创建,用这个的话其实方便一些,他可以帮你分好了,这里面都有一些什么东西,你需要什么的话就直接在什么地方去创建就好了。 你像比如说这边我们在这个 function block 这个文件夹下面的话,我们可以去创建一个,呃, p o u 对吧?可以创建一个功能块儿,对吧? 好,它的一个名称叫叉叉一,对吧? 里面写的话跟跟刚才在那个普通的那个就是工程里面去写这些 f b 的话都是一样的,都是一样的,去定义的话也是一样,比如说 我们也是一样,给他就是做一个简单的一个加法来看一下啊。 好,然后这边的话就是 c 等于 a 加 b, 对吧?然后完成之后的话,我们 你可以也可以创建其他的程序块啊等等,这些都可以啊,你可以整个一个一串逻辑创建了好多个这种 f b 啊, p o u 这些,然后中间 有很多代码,然后各个调用啊等等这些,然后最后把它整整体打包成库啊,这个是可以的。 然后比如说我们装 创建了这个东西完成之后的话,我们,呃,好像是在我看一下,在这里这个有个 工程信息啊,其实就是就是我们库相关的一些信息,然后你的公司名称是什么?因为这个到时候你把库添加进去之后,他会那个库里面他会显示这些信息的,所以你的公司名称是什么,你随便写都行啊。 然后标题,标题的话就是我们这个酷的一个名称是什么?酷的名称是什么? 比如说我们这个就是一个加法运算,然后它的一个版本,就是版本的话你 可以自己随便改哦,但是你要按照这个格式就什么什么,比如说零点、零点、零点一这种就是用四位中间用点给它隔开, 比如说我们写零点、零点、零点一,对吧?你看你刚才少一位这种,这是不好的,看好。 然后这边有个什么库类别啊?库类别的话就是你把这个库放在什么上面,因为你像你用软件的时候你可以看到的啊 啊,这边把那个工程关了,就是他在那个工程那个库管理器那边的话,你可以看到他里面其实那个库他分很多类别吗?就是这个库可能是放在系统库下面,或者说放在某一个库那个下面,对吧? 就是分类别的,如果我们不分的话,因为这个类别的话,如果你要添加的话,你得去,好像是在这个软件的安装目录下面会有,但是我们可以不用去放啊,没必要我们直接就直接不给他去选,我们不选的话,他到时候加进来之后会出现在那个杂项里面。 这个是 codesys 编程软件啊,拥有我们核心三百 c 系的这个 plc, 就可以使用这个软件来进行编程。然后下面的话这个缺省名称,缺省名称可能你用的低版本的话,可能叫什么命名空间,对吧?命名空间 就是用来去识别我们这个库的,就是我们在呃程序里面去调用他的一个名称,比如说我就跟这个标题一样,跟标题一样。然后这边是一个 站位服, 看一下,来这边看一下啊, 站位符就是用来区分这个库的版本的,因为你可能有很多个同一个库,你编译了很多次啊,对吧?你第一次的话,比如说什么零点零点零点一这个版本,下一次的话你又变成了零点零点零点二这个版本,对吧? 第一次听说这个软件吗?那你可以可以可以学习一下啊,现在这个软件人家用的还是蛮广泛的。 然后这个就是作者名称,对吧?作者名称,然后后面的话就是对这个酷的一些描述啊,你有的话写,没有的话你不写都行啊。 然后这边的话我们可以让他把这个给他勾选上,让他自动生成库的或者项目的一些信息。这个有什么 含义呢?就是他生成之后他会有生成对应的那个函数库,那里面通过一些库的指令的话,我们可以获取到你这个库的一些信息,比如你的库的一个版本,然后你的这个公司名称啊,标题这些,他是可以通过指令获取到的。 然后像有有这些的话,你有时候可以在程序里面去使用一下,比如说,呃,去做一个判断,比如说判断一下这个版本是不是这个版本,是的话你再去怎么不是的话就就报错或什么之类,对吧? 嗯,这个软件的,呃,对资料的话是有点,但是我们现在不是已经做了吗?等会你加一下粉丝群,我们把那个课件什么都会放到群里面去啊, 然后完成看一下这边 这个是以前版本的,他这边还叫这个命名空间,然后占位符。现在现在高版本的话,就是刚才变成了我刚才看到的那个名称了, 看命名空间的话就是名称,我们直接给他添加一下看看。啊 啊?我们还没有保存呢,像这个库的话,我们保存的时候你点这个啊,点这个什么保存工程,并安装到这个库存储。呃,器里面,你这样点了之后,他这个库会自动帮你安装到软件里面去的, 自动帮你安装,你就不需要通过这里什么工具库存储这种方式去安装,你点这里的话,他会自动帮你安装进去了,然后或者说但这种的话他是 保存的这种 library 格式嘛,我们刚才还讲了,还有另外还有另外一种格式,对吧?就是保存编译库这个将工程另存为编译库,然后它的这个后缀的话就是这个 completely。 呃, 然后 library 这种的话,就是他看不到我里面的代码,我给他也输出一个啊,输出一个等会弄吧,先先弄这个,先弄这个,我保存 保存,然后他同时帮我装到软件里面去了,我再给他打开一个, 我们创建一个工程,然后把刚才那个库给它加进,加到这个工程里面看一下, 大家点点赞啊。今天的这个赞有点少啊,给咱点一点, 然后他已经添加好了,你可以看一下啊,可以在这个工具,然后库存处这边 他加进来之后会出现在这个杂项里面,你看这边是有很多类别的,是吧?这个什么 obligation 啊,什么什么 inter 啊,什么 system 这些东西,对吧?因为我们刚才创建库的时候根本就没有去选择类别,对吧?没选,没选的话,所以他会出现在杂项里面, 看到没有?有个 a、 d、 d, 我刚才是叫啥名字啊?这记性不好。我,我叫歪歪, 我,我叫什么名字?我看一下,哦,就叫这个 a、 d、 d、 e, 我是不是起过这个名称了?怎么软件里面这么多这么多版本? 零点零点一,那就是这个,就是这个。好, 可能我之前还导出了一个这样子的库,看着有点误导人啊。这个就是我们刚才那个版本,他已经加进来了, 再进来之后我们在工程里面要去使用的话,得在这个库管理器里面去添加,然后选择这个添加库,然后就是在杂项里面 这个 a、 d、 d、 e, 然后点击确定,然后这边你可以看到它的 命名空间就这个,然后版本的话是这个点到这个, 现在他只有一个版本,就只有这个没有东西的,然后这个库你点一下啊,点进去之后,然后在这个 看一下 function block 下面这个这个地方我们是可以看到它的一个输入输出引脚的,对吧?然后我们可以比如说这边给它去调用一下啊,调用一下, 呃, a、 d、 d, 哎, 先是这样叼泳吧, a 一 a 二, c 一 这个变量的话我们可以提前声明,也可以像刚才那种我先写好,然后到时候按回车,他可以自动帮你去声明的, 然后可以执行一下看看啊, 看到没有?它是这这样子,它直接跳到了刚才那个叉叉一这个这个 f b 里面去了,就是可以看到我这个 f b 里面它写了什么内容?就是这种,我们刚才保存的是这个呃 library 这样子的一个库,这个后缀的这个库它的话就是可以看到 里面的原码的。那还有一种就是我们不想让他看到原码,不想让他看到。你看这个现在就完全可以看到,我刚才写的就是一个加法的一个运算,他完全可以看到。那我不想看到的话我可以这样子做。我们这边的话把这个刚才这个信息可以改一下啊, 点版本给他改一下,其他都不改。点击确定,然后点这里,这个保存成编译库, 没有输出错, 妈妈 点 等一下,这个是输出部分,不可用。什么意思? 等一下等一下,先把这个先保存一下。 come on, 不愿意哭,不能用, 先展示还是这个,然后我们看先看一下版本吧,不同版本的 那个 st 那边的话,它没有。那个工具箱里面没有东西, 工具箱里面是空的,只有那个梯形图里面的话它才会显示那些呃元素, st 的话它没有。 叮当喵喵, 你看这边他直接会跳出你里面他还有一个高版本的酷嘛,对吧?就是软件里面现在有两个版本, 然后现在我们当前用的是这一个,对吧?然后我们点到这个这个里面去, 你双击一下,他就是在这个站位符里面,就是刚才那个站位符的话,就是可以去选版本的双击一下,比如说我们要把它改成这个版本,我直接改下就好了, 直接这样改一下就好了。我程序这边不是调用了吗?我不用不用去,不用去改的。 晚上好, 重新新建一个,看看刚那个怎么回事? ok? 刚才是啥问题?我也不太清楚哎,没看到是啥问题。 主播也不算大神啊,现学现卖,大家将就一下。好吧, 这个我今天还没起床, 看一下行不行?还是不行?酷的输出部分不可用 这个我记得我好像之前也用过这个功能,好像软件上面也没提示错误呀,现在现在不知道为什么他老报错了, 可能有点问题吧,反正就是我们用的时候就是保存成这种这种这种后缀的话,然后他 就看不到里面的原码了。如果你是简单的这个 project 这样子的后缀的话,你这个代码它运行起来之后,它是可以看到你里面的这个写的这个程序的。 这个是我们三百 c 系列,三百 c 系列的这个 p l、 c, 然后就可以用这个这个平台去去编程。大家看一下啊, c 系列, c 系列我们分 h 和 c 系列嘛,像这像这个这款,然后 还有下面的这些 c 五六、 c 五七等等,这些 c 三七这些都可以用这个 cos cos 的平台来进行编程的。 对算中大型的 plc, 它跟三百 h 的话,它们的硬件是相同的平台,然后就是软件不一样,软件的话我们 h 系列的话用的是我们核心自己的这个。呃, magic works plc 平台, 这个这个是我们小型 p l c, 包括我们 h 三百系列的用这个,然后 c 系列的话就是在这个 q 四的上面来进行编程的。


今天我们继续学习第六章系统库的应用,我们今天要讲的是计数器功能快的一个用法,呃,计数器功能快 也是在这个时间段,这个库这边有个康特的这么一个文件夹,他有三种不同工作的这么一个寄宿器, 那分别是 ctd 是递减, ctu 是递增,那 ctud 是,可这是两种递增递减这么一个形式,那我们打开这个程序,所以我们看一下这个 count, 这次我们在没函数,我们新进了当前的三个功能块,我们 ctrl 加一登录了这个控制器, 每天热敷一下, 热敷喂完以后,当前的 q 是零, q 是一个处,是因为我们的 pv 值跟这个 cv 值,然后就一样, pv 跟之前计算器所讲这个 pt 是一样的,就是一个定时的一个数,我们要计数去达到某一个数,比如说我们是六为三, 根据 q 写入,那当前 cv 值是小于 pv 的,所以 q 他就那个了,也就是说当我们的 cv 值大于等于 pv 值的时候, qq 就会亮。那么如何触发这个 cv 值递增呢? 看看这个 ctu 的这么一个接口,首先它有一个 cu, 就是一个触发上升烟采的触发 reset, reset 是什么意思呢? reset 是把 c v 值从事为零,那 p v 就是一个技术器,比如说低音为三,当我们 c u 给一个处,那么 c v 值会加一 cv, 直直到 cv 大于等于 pv 的时候, q 就是一个处,那这个就是一个丁递增的这么一个计数器。下面我 c s 给个处,可以看到 cvs 加一, 而且即使我的 cu 一直去的话,他也只会加一次,也就是说他内部对于 cu 这边做了一个上升研的一个处理,那我们再 boss 掉,再 给个处,还有一加二,再放肆,再给处。当 cv 值大于等于 pv 的时候, q 就是处了。如果技术去到达,我们再给处,你会发现他的 c 位置还是一直在递递增的那个 q, 他是一直是保持为处的, 嗯,放肆掉,此刻我们触发 reset, 他会把 q 跟 cv, 然后全部清掉。那么在 reset 的同时,我们如果触发了 ceo 会怎么样? 也就是 reset 脚是一个强制脚,在 reset 脚出发的时候,你 ceo 出发,他是不会触发这个技术的,但这个就是递增的递减道理是一样的,就是我们会 p 位置仍然是一个技术。三,我们先触发这个 logo, 当我们触发漏的以后,你会发现 cvs 就变成了三,它的 cv 值,这个漏的跟个 reset 意思是一样,只不过漏的是把 cv 的值变成跟 pv 值一样,因为它是一个递减,那我们把它放肆掉,当我们触发 cd, 他就会触发一个递减的一个动作,一直减到零的时候,那 q 子就会错了,那这个就是递减, 那递增递减这个也比较好,还有两两个银角,我们点到这个户这边,有没有发现有一个递减出发,递增出发 reset load, 就相当于把前面 两组输入输出的这个银角都放到了一个共同框里面。我们大概演示一下 pv 是比如射程三, 某些人说话 lord 递增递增,他那个反馈是 qqd, 我们递减那就是减,所以这个递增递减混合有增有加有减的这么一个技术学习方法啊,大概就是当前展示的这个样子,那就是说对于这种定时器,我们 一般在 t 型图片 c 中用的比较多,那其实在我们 sd 元的这么这么一个编程中使用激素器 基本上不会用到,不会用酷提提供的这些技术器,因为 看上去功能都能满足我们的要求,但是功能快提供了一个接口太多了,每一个气出去他可能有三进两出五割出去接口, 那我们有没有办法说对这个那个技术去做一个改造呢?我们在这里声明一个 cnt, 你的一个功能化 ct 的公众号,我们只有两个变量,一个是 uipv, 一个是 uicv, 这是一个 pv 设定值, ur 就是 urnt 的,就是无符号的这么一个整形。 我们再想一想,我们先实现一个地单的地加了一个计算器,其实递递增的这么一个计算器就是把 cv 是一直加一直加到 大于等于 pk 值的时候我们就输出,这在这里我们引入之前在嗯那个 程序 组织单位里面有个叫属性的这么一个东西,我们右键添加一个属性 返回式类型, urnt 类型的名字叫 oncd。 我们刚刚看到这个激素器的结果,我们知道这个激素器 寄出器的一个复位,那我们需要有两种型,第一个就是直接触发这个漏的, 那第二种形式就是触发 logo 的同时,我们把 pv 值变掉,在这里,我们在赛特这个环节中去实现这个功能,就 efrac 这个 iac 给我 无符号的整数,如果他等于零的时候,我们怎么办呢?我们就直接就把这个 uicv 的值 直接等于零。 else 它不等于零,肯定是一个大于零,那么 usb 同样是等于零,那么 usbv 的值 直接等于这个 rnc。 比如说到我们 rnc 这个属性等一百,那么他的技术就会变成一百。既然 irc 不管是什么数据,这个 usb 的是一定会变,那我们可以直接写上面去,就是出 出发赛车以后,出发赛车以后,还是按照之前的这样行,更更简单,更方便。理解一点, 有时候多想几多写几行单吧,就是可以让你的程序要在别人看起来,然后更容易理解,并不一定说非要写的多,简化简练才是最好。 呃,这就是赛特那对 get, 那盖的就是我们实现这个里面的这个 q 跟 cv 的功能。 q 跟 cv 的功能 我们打算怎么做呢?就是当他继续到达的时候,我们要根据我们当前这个属性的,是当前这个属性的类型是一个 uit, 我们打成这样弄,当我们去次去到达的时候,我们 把这 rnc 返回一次,返回是一个零,如果技术是没有到达,就把 cv 的值返回给 rnc, 那有了这个数,我们就可以这样写, if pcv 的纸, usb 的纸 大于等于 uipv, 就是说我们的当前时已经大于等于那个了,然后 ic 他就直接返回零,如果没有,那 uicv 就等于 uicv 加一 cp 四加一的 i n c 就等于 usb 的词。 也就是说我们创建了这个功能块,用了一个属性,然后通过他的一个 set 跟 get 这个方法就实现了大概这五五个借口。我们使用了一个借口, 那么我们在程序中去使用一下, 我们首先把这个之前做那个模板的样例程序,然后 在这边打开, 我们声明一下这个 c 零 fb 杠 cnt。 我们第一步对计数器做一个初始化,计数器为十为五吧, 那么 c 零 c 零初始化计时器,我们知道我们调用这个 rnc 让他等于五。 if i stayed in and i stayed shall i do i see it 一个区分。 像我们登录一下这个程序, 在登录这个程序之前,我们可以看到我们并没有,就是说我们生育完这个功能化,我们并没有调用, 因为什么呢?我们可以看到这个公众快乐的这个程序编剧啊,并没有写任何的代码,也就是说你没有代码的时候,那你调的这个工作跟不调用的时候没有,是这都是一样的, 你说我们的所有的功能都在这个属性里面去实现,他下面我们光标放在这里来,出发一百进去坑 去二,跳入五等于零八不等于,然后就会把 cv 的字清零, pk 的字变成五,然后跳出来, 这个是初始化,下面我们直接幺零幺 af, 也就是说我们如果使用激素器的话,我们是要调用它的一个毒 uc 零, 在这里我们可以定定一个 u n t 的 u i e, 我们使用 u r e 去获取这个 c 零的 i n c if u r e 等于零 is that 等于幺九九九,为什么等于这个?他这个就不会触发下面的一个缺乏的一个动作 啊?下面我们再出发幺零幺幺零幺, 当前第九行执行,他是对这个 c 零做一个 c 零 rnc 属性做一个毒的这么一个操作,毒的话就会这样 get, 我看一下 零到一等于我们不对触发 l 四 l 四,然后加一, r e c 等于一,那么 u r e 他就等于一,所以说为什么要只要直接写 u r e 等于一, 就是因为让让我们可以很清楚的看到 inc 的一个反位置,他就是就是,他就是一个 uit 的一个数据类型,那此时如果我这样写行不行? 这样写没有问题,但是你在 kiss 幺零一里面他会会怎么样呢?相当于技术两次,那下面我们直接再出发一次幺零幺 control art 挑入加一,加到二, 我们再进入第四行,第四行他对于安心属性来讲,他也还是一个独的场所,只要是独 毒的操作,它就会触发这个激素器加一。所以说如果你在 case 流程中只需要对毛制作仪式出地震的话,那其实我们直接这样写就可以了,可以让我们的激素的一个 触发更简化一些。刚刚为什么要写个一二一,就是更方便你观察他的一个返回词, 那应该加到三了,我们再出发一次,我们看看这个 c 容值,再出发一次, ctrlq 加一加四幺零幺,我们这次肯定要定期到达,我们加个断点, ctrlq 加一, 跳进五, 寄出去到五,然后他也返回五,但是这个值当前的这个值他应该等于五,所以说但是此刻呢,我们这个 cv 是已经到达,也就是当前我们做的这个每个 get 的一个方法呢,还是有问题的, 也就是说他刚在执行的时候,我们这个 cv 加一不能这样写,一定要写在最上面, 他先加完,然后我们再判断。那如果先加完,如果大一点,我就反问这个,如果不是的话,那我就直接这样写, 我们再去触发一百,触发一百就是把这个接触器敷一下, 再触发幺零幺,加一幺零幺二幺零幺四,最后一次我们加个断点幺零幺, ctrl 加二跳进去,刚刚没有断点没有触发进去,但是我们可以看到当前已经变成消息一九,也就是说他已经触发了这个电视器, 我们再次加个断点幺零幺 ctrl 跳进去, 那么把当前的想去敷一下,再次启动一百幺零幺幺零二, 最后一次幺零幺。 这里有个奇怪的问题啊,断点跳不进去了,那我们先不管这个,也就是说我们测试的一个结果就已经达到我们一个要一个需求, 那这个基本就是我们今天的主要内容,就是总体上来讲呢,嗯,激素器当前的提供三个激素器还是偏向于梯形图的这么一个用法,因为梯形 图对于这个 cd 的或者这个 cu 的这么一个虚度级的他是很在乎,他必须要是一个上升眼。 那么我们当前 stea 在处理技术器的时候,都是在某一个分支,某一步,我们第二个一个属性或者第二个一个方法,然后做这么一次就可以了,然后我们就完成这个技术加一的这个功能就可以了,我们没必要, 然后非要需要,需要这么需要一个上升研功能这么一个演讲。所以说这三个功能块在 stea 元的吸收区中用的比较少,那即使我们没有这个功能块,其实在我们的程序中 其实也很简单,你就你就设计,像 pvuricv, 我们直接就自行定义两个最简单的原体的变量,也可以达到净水器的这种概念,那这是一部我的 uicv, 然后加一就可以了。所以说系统库提供的这三个功能款,对于我们的一个接口太多,使用起来也不是很方便, 所以我们可以自己建一个 flbcnt 这个功能快,或者是直接就像新建两个两个变量 啊。当然了,如果你一个程序中使用的技术器的特别多,那么还是建议做成功能快的样子,因为你会说明很多很多要按体的这种变量,那么技术 的功能就讲到这里,在结束之前我们再再提一个上节课讲的上升研的问题,就是说上升研啊,我们需要注意一个多任务的这么一个问题,比如说我在任务配中再添加一个任务, 我们可以看到 man tax 个任务是四号秒,这个 task 任务是二十毫秒,那如果我把这个 man 还说,我复制一遍,把 man 还说杠一放在这边, man 还说杠一我把这边的删掉, 这边我使用,我也就是说没还是要定义的一个上 发声炎的或者消下来的功能快,但是我在另外一个任务中 toss 可所调用的 may e 这个功能快中,我去使用这个杀声音,然后这样的话我会出现一个随便的问题, 我们运行起来有之前我们也是可以得势,比如说我们直接出发上升也出发一次,那这个二一他会加一, 加一没问题,我们看看这个,你发现我吊用的也是 mini 里面这个 r qq, 为什么这里面不加一?原因就是他是个是个二十二号秒的这么一个任务 man, 他是个 是一个四号,也就是说 main task 要执行五次 task 才会执行一次,所以说也就是说 当我们 mantis 里面的上音出发以后,他自己会执行五次,那么执行第二次的时候这个 q 已经 fast, 那执行第五次的时候才轮到 man 函数的一,那此刻的 q 早已 fast 掉,所以说他是不会触发上视音的。 那这个在我们实际的项目运动也是比较经常犯了这么一个错误,就是我有两个任务, 我另外一个任务使用了 a 任务的这么一个上升眼,但是两个任务的上面周期是不一样,那在这如果我把 task 的这个时间也定为四号呢?我们再看看 运行这个程序触发阿 trick 加一,我们再看看棉杠一里面啊,这边也是加一,所以说只要任务周期一样,即使跨任务使用上升下降也是没有问题。那我们今天课就讲到这里。