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模板加载数据逐步演化到前后端分离的异步数据 ...
随机推荐
- JUC整理笔记一之细说Unsafe
JUC(java.util.concurrent)的开始,可以说是从Unsafe类开始. Unsafe 简介 Unsafe在sun.misc 下,顾名思义,这是一个不安全的类,因为Unsafe类所操作 ...
- ShoneSharp语言(S#)的设计和使用介绍系列(10)— 富家子弟“语句“不炫富
ShoneSharp语言(S#)的设计和使用介绍 系列(10)— 富家子弟“语句“不炫富 作者:Shone 声明:原创文章欢迎转载,但请注明出处,https://www.cnblogs.com/Sho ...
- 如何利用BeautifulSoup选择器抓取京东网商品信息
昨天小编利用Python正则表达式爬取了京东网商品信息,看过代码的小伙伴们基本上都坐不住了,辣么多的规则和辣么长的代码,悲伤辣么大,实在是受不鸟了.不过小伙伴们不用担心,今天小编利用美丽的汤来为大家演 ...
- ssserver多出口ip
环境:centos6.10-7x(虚拟机),配置好之后至少保证能上网 需求:在一台服务器上配置多ip,并实现,用哪个ip 作为代理,访问ip138.com这类的网站的时候就返回对应的ip. 实现步骤: ...
- 【JavaScript数据结构系列】07-循环链表CircleLinkedList
[JavaScript数据结构系列]07-循环链表CircleLinkedList 码路工人 CoderMonkey 转载请注明作者与出处 1. 认识循环链表 首节点与尾节点相连的,就构成循环链表.其 ...
- golang垃圾回收机制
golang的GC,1.8通过混合写⼊屏障, 使得STW降到了sub ms.go语言中程序代码执行和垃圾回收是并发执行的. 当前Go GC特征 :三色标记,并发标记和清扫,非分代,非紧缩,混合写屏障. ...
- 跟着阿里学JavaDay01——Java编程环境搭建
一.下载并完成JDK的安装 我们要学习Java就需要下载JDK.因为JDK是Java的开发工具. JDK的获取可以通过官方网站下载:JDK下载地址(这里我们下载Java SE10的版本) JDK下载完 ...
- Win2003远程桌面突然无法连接,有没有解决方法?
在日常工作中,运维人员除了接触服务器监控工具外,最常用的应该就是远程桌面了吧.iis7远程桌面是一款绿色小巧的服务器管理工具,更加人性化,管理服务器更是不可测量. 可以管理1000台服务器的远程桌面: ...
- Chisel3 - 模块
https://mp.weixin.qq.com/s/2vjM-gcauvHnn6KJzlOm4g Chisel的模块和Verilog的模块很相似,都用来定义模块结构(hierarchical s ...
- 空格与false