首页
Python
Java
IOS
Andorid
NodeJS
JavaScript
HTML5
c# 状态机 plc
2024-11-03
PLC状态机编程第一篇-状态机介绍
状态机的一般概念 过去我在学习PLC编程时,看的大部分书仅仅停留在软件的操作上,没有真正讲述如何组织程序,这里我们讲一个通用的描述控制算法的方法,就是状态机,和SFC很类似,其实SFC也是源于状态机啦.状态机是UML中的概念,在嵌入式开发中应用很广,但在PLC编程中基本没有流行.下面是一张用matlab画的状态机,包含了大部分基本元素.它描述的就是启保停电路,经典的控制...我们会在这个电路的基础上慢慢扩展. 这个状态机中包含两个状态,分别是Off和On,这两个状态只能有一个是激活的,这和SFC
AB PLC 编程之状态机
AB的程序设计和西门子有点PLC不大一样,在AB中没有RS指令,所以主要用move指令来作步进.今天我们就用Move指令写个AB的程序,和西门子比,有哪些不同. 控制任务 很简单的一个状态机.初始步为Step0,根据不同的条件分别转移到不同的步. 具体程序 下面是tag变量表: 下面定义了一个关于步进的udt,StepNumber是当前的步号,根据StepNumber的步号来设置Step变量中对应的一个位,Reset设置StepNumber为0, 恢复到初始步.Re_Step是Step步中对应步
PLC状态机编程第六篇-优化PLC程序生成
还记得第一篇博客中,我们在状态机中手写上升沿来处理有别于传统的一键启停程序,那个手写的上升沿就是优化手段.stateflow状态机是带事件的,事件本身支持上升沿和下降沿等事件,在这里,如果我们选择用事件来作沿触发,会导致程序不可读,很复杂,所以我们手写上升沿,保证了程序的简洁.请看下图. 那么我们不用它的上升沿,如何处理需要上升沿的情况.我们手写一个,请看下图. 在stateflow中新添加三个local变量,都是bool型的.tempStop是保持上次的stop值,risingTrigStop
PLC状态机编程第五篇-状态机自动生成PLC程序
这篇比较简单了,我就直接上图了,不多废话. 一.选择求解器,一定要选择定步长的. 二.右击Chart状态机,出现图上菜单 三.左边红色的勾选择,选择右侧的菜单,然后点击Generate Code按钮,这个按钮被菜单覆盖了. 四.会在红色目录里出现optimize.scl文件 五.双击TIA Portal中的[添加新的外部文件],请看图,出现对话框,选择上方的那个文件 六.右击刚添加的optimize.scl文件,选择[从源生成块] 七.选择刚生成的Chart块,拖到程序段中,完成. 这里生成的程
PLC状态机编程第四篇-历史状态处理
今天我们接着上次的控制任务,加入历史状态,这个任务会比较复杂,象这样的任务我们倾向于自动生成PLC程序,自己写容易出错.但为了演示,我们可以尝试一下.言归正传,下面是我们的控制任务. 控制任务 这次的任务是基于上次的,增加的一个急停按钮,当按下EMStop急停按钮后,设备马上停止,等排除故障后,希望设备从故障前一刻的状态接着运行,针对这样的任务,我们需要引入历史状态. 下面是这次任务的状态机. Logic状态机中,多了一个Action子状态,Action状态中,包含了逻辑控制.Action状态中
PLC状态机编程-如何在STL中使用状态机
搞PLC编程多年,一直不知道状态机,学习matlab后,发现状态机编程异常方便,过去很多编程时的疑惑豁然开朗起来.今天跟大家分享一下如何在STL中使用状态机. 下面是用状态机描述的控制任务. 这个状态机较简单,那如何在STL中把它描述出来呢? 这里我们选择用JL指令...我就直接上代码了,一看便知.但JL程序只能用来表示单步状态,遇到并行状态就处理不了了..下次我们用ST语言来描述更复杂的状态机.. L #state // 把#state的值载入累加器 JL
PLC状态机编程第三篇-RS信号处理
我们今天简要介绍RS指令在状态机中怎么处理的.有些设备按下停止按钮后,没有马上停止,而是到原点后才停止,那么这种情况在状态机中如何表示呢?我们以案例说明之,下面是我们的控制描述. 控制描述 小车从左位开始,从左向右行使,到达右位后停5秒,然后从右向左运行,到达左位后停3s,继续向右运行.当按下停止按钮后,小车不是马上停止,而是到达左位后才停止.我们假设左边的到位信号位isOnLeftPos,右边的到位信号为isOnRightPos,向左的运行动作为GoLeftPos,向右的运行动作为GoRigh
PLC状态机编程第二篇-负载均衡
控制任务 大家好,今天我们用状态机描述稍复杂的实例,同时用LAD和ST语言写状态机.我们的控制任务如下: 真空泵A和真空泵B, 按下启动按钮后, 泵A启动, 3秒后泵B也启动, 此时泵A仍运行, 当容器真空达到后, 泵B停止, 泵A继续运行, 维持容器真空. 当按下停止按钮后, 泵A停止. 再次按启动按钮, 泵B启动, 3秒后泵A也启动, 此时泵B仍运行, 当容器真空达到后, 泵A停止, 泵B继续运行, 维持容器真空. 当按钮停止按钮后, 泵B停止. 注意: 任何状态按下停止按钮, 都停止,
PLC编码规范
PC在编码规范方面比PLC要好很多.既然它们都是编程语言,那么PC方面的规范是否可以用与PLC呢?答案是肯定的,但需要作取舍.下面规范中的大部分可以用于一般PLC,其中有些只是针对西门子博途,使用时需注意. 变量命名 目前PLC中的变量命名没有统一的规则,这方面我们可以参考PC编程,在PC的编程中有如下规则: camelCase,又叫骆驼命名法,变量中第一单词首字母小写,后面单词的首字母大写,就像camelCase名称一样.Java.C++等高级语言中普遍使用. snake_case,又叫蛇蛇命
适合WebApi的简单的C#状态机实现
目标 采用了Restful WebApi的架构,再把业务逻辑状态转移放到后端就有点违背初衷了.实际上只要后端Api的权限设置的好,把状态转移放到前端也未尝不可.我考虑的结果是,一般如果变更这个状态本身就需要特定权限才可操作,比如xxx审批者,在前端处理状态逻辑问题不大,因为本身这个人就是有权限的,如果伪造请求破坏了数据也可以通过Log定位到个人,但是如果是面向大众的情况,比如团购下个订单什么的不对数据有特定权限要求的就需要在后端单独做动作类的WebApi了,欢迎讨论. 相关传送门:Restful
趣说游戏AI开发:对状态机的褒扬和批判
0x00 前言 因为临近年关工作繁忙,已经有一段时间没有更新博客了.到了元旦终于有时间来写点东西,既是积累也是分享.如题目所示,本文要来聊一聊在游戏开发中经常会涉及到的话题--游戏AI.设计游戏AI的目标之一是要找到一种便于使用并容易拓展的的方案,常见的一些游戏AI方案包括了有限状态机(FSM).分层有限状态机(HFSM).面向目标的动作规划(GOAP)以及分层任务网络(HTN)和行为树(BT)等等.下面我们就来聊一聊比较有代表性的游戏AI方案--状态机. 0x01 有限状态机(FSM) 有限状
Workflow笔记2——状态机工作流
状态机工作流 在上一节Workflow笔记1——工作流介绍中,介绍的是流程图工作流,后来微软又推出了状态机工作流,它比流程图功能更加强大. 状态机工作流:就是将工作流系统中的所有的工作节点都可以看做成一个状态节点.每个节点都有N个状态,其中都包含初始状态.进入状态.离开状态等.当节点的状态变化的时候会执行某个节点. 新建项目StatueWorkflowConsoleApp 自动添加了一个起始节点和一个状态节点. 运行结果如下: 注意执行顺序.接下来,扩展此工作流. 1.设置全局变量Num 2.双
Unity Animator动画状态机 深入理解(一)
接触Unity以来就已经有了Animator,Animation用的少,不过也大概理解他俩之间的一个区别于联系. 图中其实就是Animator和Animation之间的区别于联系了,啊!你肯定会告诉我这就不是Animator么. 对啊,Animator其实是由Animation组成的.比如在Animator没有出现的时候有些公司写的动画状态机其实就是代码版的Animator. Animator其实就是把Animation统一管理和逻辑状态管理的组件,而Animation就是每一个动画. 动画状态
FSM(状态机)、HFSM(分层状态机)、BT(行为树)的区别
游戏人工智能AI中最常听见的就是这三个词拉: FSM 这个不用说拉,百度一大堆解释, 简单将就是将游戏AI行为分为一个一个的状态,状态与状态之间的过渡通过事件的触发来形成. 比如士兵的行为有“巡逻”,“追击敌人”,“攻击敌人”,“逃跑”等行为, 响应的事件就有“发现敌人”,“追到敌人”,“敌人逃跑”,“敌人死亡”,“自己血量不足”等. 那么可以写成这样一个状态机: 1.士兵 “巡逻”,如果 “发现敌人”,那么,“追击敌人” 2.士兵 “追击敌人”, 如果 “追到敌人”, 那么,“攻击敌人” 3.
功能实现:PLC对LPC的音量控制
设计方案1: 在PLC上,当使用QDial调节音量时,触发QDial的SIGNAL:ValueChange(),对应SLOT向LPC发送自定义键码0x22; 在LPC上,当接收到0x22键码时,执行操作:设置当前volume值,当设置完成后,PLC将接收到来自LPC的volume数据进行更新. 发现问题: 1.当触发ValueChange()信号时,由于LPC设置3s无活动自动进入音量显示界面,PLC每隔3s仍发送0x22键码,导致VFD一直显示0x22键码,其他按键可以正常使用,但是操作执行完
JavaScript状态机程序逻辑编辑器
制作背景 之前做Win8 Metro动态加载内容框架的时候,由于采用了XAML+JavaScript的方法,程序复杂的执行逻辑是由JavaScript控制的,而页面一多,流程一复杂,制作起来就非常麻烦,还要考虑不同XAML页面返回事件的名称.所以就写了个状态机模型的程序制作工具. 技术支持 说到制作状态机,无疑微软的VS是最强大的,微软本身就有Workflow.使用微软的工作流就可以很方便的制作出一个状态机,然后在用System.Workflow下的类库提取,整理结构,然后生成JavaScrip
react+redux教程(二)redux的单一状态树完全替代了react的状态机?
上篇react+redux教程,我们讲解了官方计数器的代码实现,react+redux教程(一).我们发现我们没有用到react组件本身的state,而是通过props来导入数据和操作的. 我们知道react本身是个状态机,也就是说组件是state的表现形式.那么redux提供了一个全局的唯一的状态树,是不是就不需要组件本身的state了呢? 当然不是! 有图为证,这是官方的todomvc的例子(https://github.com/lewis617/react-redux-tutorial/t
Game中的状态机
我相信大多数博友都会玩游戏. 玩游戏,牵涉到状态包含 登陆,正常,死亡,复活,下线, 在上面状态的基础上.同时包含 站立,走动,跑动,不可移动施法状态, 战斗状态, 通常这是三个不同的分组.也就说可以同时存在的状态和不可同时存在的状态. 通常情况下也许你会这么定义, //分组1 public bool 登陆 = false; public bool 死亡 = false; public bool 复活 = false; public bool 下线 = false; public bool 正常
SharePoint 2013 状态机工作流之扩展自定义状态
当我们使用SharePoint 2013的状态机工作流时,发现一个非常不爽的事情,就是SharePoint 所有的工作流状态,都是固定的那些,没办法显示我们自定义的状态,后来经过Google发现,原来这个状态是可以自定义的. 自定义状态步骤 1. 修改xml添加MetaData下面的扩展项: <ExtendedStatusColumnValues> </StatusColumnValue> </StatusColumnValue> </StatusColumnV
SharePoint 2013 状态机工作流之日常报销示例
简单介绍下状态机工作流,状态机工作流提供了一系列的状态.工作流从初始状态开始,到终止状态结束.两个状态之间定义行为进行过渡.通常情况下,状态机工作流对事件作出反应,事件的发生将会使状态发生改变. 1.新建项目,选择SharePoint解决方案,创建空项目: 2.选择调试站点,部署为场解决方案,如下图: 3.添加新项,选择“Office/SharePoint”下面的“状态机工作流(仅场解决方案)”: 4.选择列表工作流,修改工作流名称为“日常报销”: 5.选择调试时使用的列表,并选择任务列表和历史
热门专题
idea 2029.3.2破解
如何判断formSelects控件没有选项
JAVA List<父类> List<子类>
hashmap初始指定大小
jquery 窗口关闭事件
Tortoisegit lockfile 指向不存在的目录
多选下拉框 输入后默认选择
click和click on的区别
org.apache.poi冲突
gcc编译器版本xiugai
hybrid容器是什么
mongodb wt文件恢复
vnc远程桌面怎么复制文件
zigbee接收的数据包如何串口输出
python开发web页面源码
sql查询表数据库条数
react首屏js优化
linux用for循环批量添加删除用户
asp.net如何实现打印
cmd命令多个二进制文件合并成一个