python工业互联网应用实战2—从需求开始
前言:随着国家工业2025战略的推进,工业互联网发展将会提速,将迎来一个新的发展时期,越来越多的企业开始逐步的把产线自动化,去年年底投产的小米亦庄的智能工厂就是一个热议的新闻。小米/华为智能工厂只能说是中国制造2025的一个代表,产业转型和制造升级,笔者从事的企业领域就越到越来越多的(制造)企业开始悄悄的自动化/智能化。这里肯定有国家政策推动的大背景,同时,也有着企业自身不断提高生产率的“刚需”。
本序列我们也从一个需求问题开始;然后,拆解需求(问题);其次,解决拆解需求(问题)的点;再次,通过的不断技术摸索和迭代过程找到一个个合理的解决需求的方法和手段,最终,完成了这个需求(问题)的项目实战。我们会在文中描述演化过程、方法论、过程保证机制和实用的工具等,最终带着大家完成这样一个实际项目需求的项目过程。项目涉及的Django的更多基础知识请大家阅读笔者早期的《Python开发入门与实战系列》。
本文的过程采用python3.6和django2.1版本
项目需求:这是一个简版物流自动化仓库实例,仓库控制系统(以下简称WCS)需要调度AGV小车运送一个实托盘(搬运单元)从1楼入库站台经由提升机搬运到2楼指定的仓库货位。
1.需求分析
仓库控制系统(以下简称WCS)需要调度AGV小车运送一个实托盘(搬运单元)从1楼入库站台经由提升机搬运到2楼指定的仓库货位。这句简要描述常常是我们在项目URS看到的需求描述,接下来我们需要对拿到的需求进行分析,形成一个个可度量的开发功能点。
1.1.用例说明
需求用例说明文档能够很好的对需求进行详细的分析,主要的包含内容包括:前置条件、事件流程和后置条件(执行结果)用例描述如下表,通过用例分析我们能够很好的把握需求的具体事件执行流程,并通过文档清晰的描述出来,便于后期设计编码时作为开发设计人员的指导。
经过团队头脑风暴讨论,大家基本上达成了如下表的需求用例说明,我们把这个调度设备的搬运过程设计成一个序列顺序执行的步骤(子任务),这些子任务对应着设备的执行分解动作。
|
用例编码 |
1.1 |
执行角色 |
WCS |
|
用例名称 |
托盘入库用例 |
||
|
前提条件 |
|
||
|
需求描述 |
1 WCS分解搬运任务成3个设备作业; 2 调度AGV从入库站台搬运托盘到提升机1楼门口工位; 3 调度提升机到1楼并打开廊门; 4 调度AGV从提升机1楼门口工位到提升机并卸货,返回提升机门口工位; 5 调度提升机1楼提升到2楼并开门; 6 调度AGV进入提升机并载货搬运到2楼门口工位; 7 调度提升机关门; 8 调度AGV从2楼门口工位搬运到库存货位。 |
||
|
备选过程 |
|||
|
扩展过程 |
|
||
|
原始需求描述 |
参见 《XXX URS》 |
||
|
特殊需求 |
无 |
||
|
后置条件 |
WCS调度相关设备完成实托盘从入库站台搬运到库存货位,反馈结果给WMS |
||
2. 需求功能点
从上面的用例说明的需求描述事件流程来看,我们需要先把这一趟搬运任务分解成设备子任务,并串行的方式顺序下达到设备执行,任务清单如下表:
|
序号 |
作业描述 |
执行设备 |
|
1 |
调度AGV从入库站台搬运托盘到提升机1楼门口工位 |
1楼AGV |
|
2 |
调度提升机到1楼并打开门 |
提升机 |
|
3 |
调度AGV从提升机1楼门口工位到提升机并卸货,返回提升机门口工位 |
1楼AGV |
|
4 |
调度提升机1楼提升到2楼并开门 |
提升机 |
|
5 |
调度AGV进入提升机并载货搬运到2楼门口工位 |
2楼AGV |
|
6 |
调度提升机关门 |
提升机 |
|
7 |
调度AGV从2楼门口工位搬运到库存货位 |
2楼AGV |
也就是说这一趟搬运任务,WCS需要分解成7个设备作业子任务,并顺序下达给相应的执行设备执行,最终完成任务的执行(当前的任务划分粒度实际对接AGV和提升机厂家来说会有调整,最终以上步骤会依赖与实际对接的情况,但是主流程不会有太大变化)。
经过分析从1楼入库站台运送托盘到二楼某个指定货位这样一个任务,系统需要分解成7个子任务,下达给设备顺序执行。系统活动图如下:
3. 活动图
经过分析从1楼入库站台运送托盘到2楼某个指定货位这样一个任务,系统需要分解成7个子任务,下达给设备顺序执行。我们还可以通过UML活动图来进一步详细的描述作业的执行顺序如下图:

从图中我们可以看出来一次入库任务,系统分解为7个设备子任务(作业)来执行完整的托盘入库流程,只有所有子任务(作业)执行完成,托盘的入库才算完成。
4. 功能模块
对于这样一个看似简单的需求来说,包含两大主要功能模块
- 任务分解:依据物理设备处理任务的条件,对任务进行分解,任务分解的粒度是设备能够识别并执行(动作)
- 任务调度:任务调度就是按照顺序执行的逻辑,把任务顺序和逐一下达给设备
这里也有几个基本逻辑就是,设备在某一个时间点上只能执行一个子任务,只有这个任务执行完毕后方能下达新的子任务。多重任务逻辑只会导致设备无法完成任务(不知道到底该执行那个动作)。
4.1. 实体关系
我们从上面需求分析整理当前至少包括2个实体,包含的属性(字段)如下:
1任务:
任务ID,任务号,源地址(从哪儿),目标地址(到哪儿),开始时间,结束时间,状态
2子任务:
子任务ID,任务ID,源地址(从哪儿 上一个子任务的目标地址), 目标地址(到哪儿 下一个子任务的源地址), 执行机构,开始时间,结束时间,状态
5. 小节
本章我们从一个需求问题开始,然后经过需求分析,把需求问题分解为功能点和数据实体,实体是下一步我们设计表或ORM model的基础原型,上面的实体只是一个初步的需求分析主要字段要求,实体属性(字段)会设计时会增加特定的其它属性(字段)。 下一章节我们将描绘如何把这个需求逐步演化到模型设计。
python工业互联网应用实战2—从需求开始的更多相关文章
- python工业互联网应用实战1—SQL与ORM
从sql到ORM应该说也是编程体系逐步演化的结果,通过类和对象更好的组织开个过程中遇到的各种业务问题,面向对象的解耦和内聚作为一套有效的方法论,对于复杂的企业应用而言确实能够解决实践过程中很多问题. ...
- python工业互联网应用实战3—模型层构建
本章开始我们正式进入到实战项目开发过程,如何从需求分析获得的实体数据转到模型设计中来,变成Django项目中得模型层.当然,第一步还是在VS2019 IDE环境重创建一个工程项目,本文我们把工程名称命 ...
- python工业互联网应用实战3—Django Admin列表
Django Admin笔者使用下来可以说是Django框架的开发利器,业务model构建完成后,我们就能快速的构建一个增删查改的后台管理框架.对于大量的企业管理业务开发来说,可以快速的构建一个可发布 ...
- python工业互联网应用实战7—业务层
本章我们演示代码是如何"进化"的,实战的企业日常开发过程中,系统功能总伴随着业务的不断增加,早期简单的代码慢慢的越来越复杂,敏捷编程中的"禅"--简单设计.快速 ...
- python工业互联网应用实战6—任务分解
根据需求定义"任务"是一个完整的业务搬运流程,整个流程涉及到多个机构(设备)分别动作执行多个步骤,所以依据前面的模型设计,需要把任务分解到多个连续的子任务(作业),未来通过顺序串联 ...
- python工业互联网应用实战11—客户端UI
这个章节我们将演示用户端界面的开发,当前演示界面还是采用先实现基本功能再逐步完善的"敏捷"模式.首先聚焦在功能逻辑方面实现普通用户与系统的交互,普通用户通过url能查看到当前任务的 ...
- python工业互联网应用实战13—基于selenium的功能测试
本章节我们再来说说测试,单元测试和功能测试.单元测试我们在数据验证章节简单提过了,本章我们进一步如何用单元测试来测试view的功能代码:同时,也涉及一下基于selenium的功能测试做法.笔者过去的项 ...
- python工业互联网应用实战14——单元测试覆盖率
前面的章节我们完成了任务管理主要功能的开发及单元测试编写,可如何知道单元测试效果怎么样呢?测试充分吗?还有没有没有测到的地方呢? 本章节我们介绍一个统计测试代码覆盖率的利器Coverage,Cover ...
- python工业互联网应用实战15-前后端分离模式1
我们在13章节里通过监控界面讲了如何使用jquery的动态加载数据写法,通过简单案例来说明了如何实现动态的刷新监控界面的数据,本章我们将演示如何从Django模板加载数据逐步演化到前后端分离的异步数据 ...
随机推荐
- LeetCode上的SQL练习
184. 部门工资最高的员工 SELECT D. NAME Department, E. NAME Employee, E.Salary FROM -- 内连接两张查询表 Employee E INN ...
- 好用的python性能测试神器–Locust
原文链接:https://mp.weixin.qq.com/s/9PxSPuHmucSLi_welq6uNQ 现在性能测试工具太多,根据业务不同使用,比如说我们熟悉的loadrunner.jmeter ...
- 【pyecharts】地图显示不全
官网给的解释如下: 自从 0.3.2 开始,为了缩减项目本身的体积以及维持 pyecharts 项目的轻量化运行,pyecharts 将不再自带地图 js 文件. 如用户需要用到地图图表,可自行安装对 ...
- linux高级应用第九章-正则表达式
笔记部分 基础正则表达式: ^ 第1个符号 ,以什么什么开头 ^m $ 第2个符号,以什么什么结尾 m$ ,还表示空行,或空格,可以用cat -An 试一下 ^$ 第3个符号,空行 ...
- JVM调优总结(八)-反思
垃圾回收的悖论 所谓“成也萧何败萧何”.Java的垃圾回收确实带来了很多好处,为开发带来了便利.但是在一些高性能.高并发的情况下,垃圾回收确成为了制约Java应用的瓶颈.目前JDK的垃圾回收算法,始终 ...
- shell日期格式化、加减运算
#!/bin/bash echo i love you输出:i love you =======================================反引号的作用============== ...
- Binlog2sql+CentOS7 离线安装
Binlog2sql+CentOS7 离线安装 目录 Binlog2sql+CentOS7 离线安装 1. 环境 2. 下载 3.1 Pip 安装 3.2 PyMySQL/mysql-replicat ...
- Azure AD(三)知识补充-Azure资源的托管标识
一,引言 来个惯例,吹水! 前一周因为考试,还有个人的私事,一下子差点颓废了.想了想,写博客这种的东西还是得坚持,再忙,也要检查.要养成一种习惯,同时这也是自我约束的一种形式.虽然说不能浪费大量时间在 ...
- .net core 上传大文件
using System; using System.Collections.Generic; using System.IO; using System.Linq; using System.Thr ...
- jchdl - RTL
https://mp.weixin.qq.com/s/gNN2eiJnr9N02xdZVQceDQ 相较于GSL层对物理连接的建模,RTL层提高了一个抽象层次: 把物理的触发器提取为抽象 ...