热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

实现if_使用IF语句和编码指令来实现三台电机任意启动的示例

有网友咨询如何使用SCL来编程实现三台电机任意启动,方法有很多,今天跟大家分享的是使用IF条件语句和编码指令配合来实现功能的示例。设计功能说明ÿ

有网友咨询如何使用SCL来编程实现三台电机任意启动,方法有很多,今天跟大家分享的是使用IF条件语句和编码指令配合来实现功能的示例。

设计功能说明:

三台电机,通过按钮顺序来实现按照按钮的顺序来进行每隔5s的顺序启动。

通过功能说明,其实,很容易想到的就是使用编码指令,来给按钮的按下顺序进行编码,然后按照编码来实现顺序启动。

专栏文章中详细跟大家介绍了IF条件语句的使用,这里就不过多的啰嗦了,主要跟大家简单介绍下编码指令ENCO的使用。

ENCO:编码指令:使用“编码”指令读取输入值中设置的最小值位的位号,并作为结果返回。

指令参数如下表:

5d3d53aa95b868fc46a1f0f87a580201.png

说的再简单一点,就是读取BYTE或WORD的最低位,并返回一个INT型的数,比如说,BYTE

类型0000 0001,则返回值INT型的数就是1,若是0000 0010,则返回的值INT型的数就是2。

下面看看本示例怎么编程:

新建一个FB,并设置接口变量:

e54f57abe2b0e9d83be7628c131040b1.png

下面开始编程:

同时按下编码按钮和任意一个电机启动按钮,进行初次编码。

27a08f995e71225e324e95e9a62d4f47.png

然后判断电机启动顺序:

6fac6bed870f3c7dc57d7e86d64bf3b9.png

根据电机启动顺序,按下启动按钮,电机顺序启动,按下停止按钮,电机全部停止。

d095be59c32f754f3dd6f83a3d601933.png

程序的源代码如下:

IF #编码 AND (#SB.%X0 OR #SB.%X1 OR #SB.%X2) THEN

#ENCO_TEMP_1 := ENCO(IN := #SB);

END_IF;

IF #ENCO_TEMP_1=0 THEN

#motor1 := 'FIRST';

#ENCO_TEMP_2 := ENCO(IN := #SB);

IF #ENCO_TEMP_2=1 THEN

#motor2 := 'SECOND';

#motor3 := 'THIRD';

ELSIF #ENCO_TEMP_2=2 THEN

#motor3 := 'SECOND';

#motor2 := 'THIRD';

END_IF;

ELSIF #ENCO_TEMP_1=1 THEN

#motor2 := 'FIRST';

#ENCO_TEMP_3 := ENCO(IN := #SB);

IF #ENCO_TEMP_3=0 THEN

#motor1 := 'SECOND';

#motor3 := 'THIRD';

ELSIF #ENCO_TEMP_3=2 THEN

#motor3 := 'SECOND';

#motor1 := 'THIRD';

END_IF;

ELSIF #ENCO_TEMP_1=2 THEN

#motor3 := 'FIRST';

#ENCO_TEMP_4 := ENCO(IN := #SB);

IF #ENCO_TEMP_4=0 THEN

#motor1 := 'SECOND';

#motor2 := 'THIRD';

ELSIF #ENCO_TEMP_3=1 THEN

#motor2 := 'SECOND';

#motor1 := 'THIRD';

END_IF;

END_IF;

IF #START AND (#motor1='FIRST') THEN

#MOTOR_1.%X0:=1;

ELSIF #START AND (#motor2='FIRST') THEN

#MOTOR_1.%X1 := 1;

ELSIF #START AND (#motor3='FIRST') THEN

#MOTOR_1.%X2 := 1;

END_IF;

#TIME.TON(IN := (#MOTOR_1.%X0 OR #MOTOR_1.%X1 OR #MOTOR_1.%X2),

PT := T#5S,

Q => #SECOND);

IF #SECOND AND (#motor1 = 'SECOND') THEN

#MOTOR_1.%X0 := 1;

ELSIF #SECOND AND (#motor2 = 'SECOND') THEN

#MOTOR_1.%X1 := 1;

ELSIF #SECOND AND (#motor3 = 'SECOND') THEN

#MOTOR_1.%X2 := 1;

END_IF;

#TIME_1.TON(IN := #SECOND,

PT := T#5S,

Q => #THIRD);

IF #THIRD AND (#motor1 = 'THIRD') THEN

#MOTOR_1.%X0 := 1;

ELSIF #THIRD AND (#motor2 = 'THIRD') THEN

#MOTOR_1.%X1 := 1;

ELSIF #THIRD AND (#motor3 = 'THIRD') THEN

#MOTOR_1.%X2 := 1;

END_IF;

IF #STOP THEN

#MOTOR_1 := 0;

END_IF;

仿真:如下图所示:

08f1062ed9721604b429bd267dd33a65.png
1c7828c9aa215be9df6d3e008592c3ba.png

编程的方法有很多,我这么编是有点麻烦的,但是对于初学者也是比较好理解的。有什么更好的方法欢迎大家在评论区来讨论。

当然了,若你有什么想要实现的功能,也可以私信小编,我会帮大家写个示例!最主要的是通过我的抛砖引玉来使大家的水平有更好的提高。



推荐阅读
  • 本文介绍了数据库的存储结构及其重要性,强调了关系数据库范例中将逻辑存储与物理存储分开的必要性。通过逻辑结构和物理结构的分离,可以实现对物理存储的重新组织和数据库的迁移,而应用程序不会察觉到任何更改。文章还展示了Oracle数据库的逻辑结构和物理结构,并介绍了表空间的概念和作用。 ... [详细]
  • 开发笔记:加密&json&StringIO模块&BytesIO模块
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了加密&json&StringIO模块&BytesIO模块相关的知识,希望对你有一定的参考价值。一、加密加密 ... [详细]
  • 本文介绍了C#中生成随机数的三种方法,并分析了其中存在的问题。首先介绍了使用Random类生成随机数的默认方法,但在高并发情况下可能会出现重复的情况。接着通过循环生成了一系列随机数,进一步突显了这个问题。文章指出,随机数生成在任何编程语言中都是必备的功能,但Random类生成的随机数并不可靠。最后,提出了需要寻找其他可靠的随机数生成方法的建议。 ... [详细]
  • Java中包装类的设计原因以及操作方法
    本文主要介绍了Java中设计包装类的原因以及操作方法。在Java中,除了对象类型,还有八大基本类型,为了将基本类型转换成对象,Java引入了包装类。文章通过介绍包装类的定义和实现,解答了为什么需要包装类的问题,并提供了简单易用的操作方法。通过本文的学习,读者可以更好地理解和应用Java中的包装类。 ... [详细]
  • 本文详细介绍了SQL日志收缩的方法,包括截断日志和删除不需要的旧日志记录。通过备份日志和使用DBCC SHRINKFILE命令可以实现日志的收缩。同时,还介绍了截断日志的原理和注意事项,包括不能截断事务日志的活动部分和MinLSN的确定方法。通过本文的方法,可以有效减小逻辑日志的大小,提高数据库的性能。 ... [详细]
  • 如何用UE4制作2D游戏文档——计算篇
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了如何用UE4制作2D游戏文档——计算篇相关的知识,希望对你有一定的参考价值。 ... [详细]
  • WebSocket与Socket.io的理解
    WebSocketprotocol是HTML5一种新的协议。它的最大特点就是,服务器可以主动向客户端推送信息,客户端也可以主动向服务器发送信息,是真正的双向平等对话,属于服务器推送 ... [详细]
  • 怎么在PHP项目中实现一个HTTP断点续传功能发布时间:2021-01-1916:26:06来源:亿速云阅读:96作者:Le ... [详细]
  • Redis底层数据结构之压缩列表的介绍及实现原理
    本文介绍了Redis底层数据结构之压缩列表的概念、实现原理以及使用场景。压缩列表是Redis为了节约内存而开发的一种顺序数据结构,由特殊编码的连续内存块组成。文章详细解释了压缩列表的构成和各个属性的含义,以及如何通过指针来计算表尾节点的地址。压缩列表适用于列表键和哈希键中只包含少量小整数值和短字符串的情况。通过使用压缩列表,可以有效减少内存占用,提升Redis的性能。 ... [详细]
  • 先看官方文档TheJavaTutorialshavebeenwrittenforJDK8.Examplesandpracticesdescribedinthispagedontta ... [详细]
  • 配置IPv4静态路由实现企业网内不同网段用户互访
    本文介绍了通过配置IPv4静态路由实现企业网内不同网段用户互访的方法。首先需要配置接口的链路层协议参数和IP地址,使相邻节点网络层可达。然后按照静态路由组网图的操作步骤,配置静态路由。这样任意两台主机之间都能够互通。 ... [详细]
  • 本文介绍了在处理不规则数据时如何使用Python自动提取文本中的时间日期,包括使用dateutil.parser模块统一日期字符串格式和使用datefinder模块提取日期。同时,还介绍了一段使用正则表达式的代码,可以支持中文日期和一些特殊的时间识别,例如'2012年12月12日'、'3小时前'、'在2012/12/13哈哈'等。 ... [详细]
  • 本文介绍了Swing组件的用法,重点讲解了图标接口的定义和创建方法。图标接口用来将图标与各种组件相关联,可以是简单的绘画或使用磁盘上的GIF格式图像。文章详细介绍了图标接口的属性和绘制方法,并给出了一个菱形图标的实现示例。该示例可以配置图标的尺寸、颜色和填充状态。 ... [详细]
  • 纠正网上的错误:自定义一个类叫java.lang.System/String的方法
    本文纠正了网上关于自定义一个类叫java.lang.System/String的错误答案,并详细解释了为什么这种方法是错误的。作者指出,虽然双亲委托机制确实可以阻止自定义的System类被加载,但通过自定义一个特殊的类加载器,可以绕过双亲委托机制,达到自定义System类的目的。作者呼吁读者对网上的内容持怀疑态度,并带着问题来阅读文章。 ... [详细]
  • 在Oracle11g以前版本中的的DataGuard物理备用数据库,可以以只读的方式打开数据库,但此时MediaRecovery利用日志进行数据同步的过 ... [详细]
author-avatar
不如藏拙_487
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有