精华内容
下载资源
问答
  • 往往忽略了纵向体系发展,单元化是将一个系统的架构按某种数据特征维度进行垂直的划分,体现锚杆支护巷道"支得住、支得固、支得省"理念,确保既不过度支护又能保证支护强度满足安全生产需要,为"一区一策、一巷一措"提供...
  • 基于模块化设计方法的自动化生产线点胶单元研发.pdf
  • 自动化生产线检测单元的安装与调试.pdf
  • 一种应用于某零件自动化生产单元的柔性检测装置.pdf
  • 基于自动化生产线分拣单元安装与调试项目的教学设计.pdf
  • 模块化生产加工系统的供料单元的编程与实现研究,李萍,李文斌,针对模块化生产系统供料单元的系统结构和工艺流程,利用Step7软件作为S7-300编程的基本环境,采用S7-Graph编程语言对供料单元结构化编�
  • 加工自动生产线三工位分拣单元的自动设计.pdf
  • 基于自动化生产线分拣单元安装与调试项目的教学设计.rar
  • PCB生产线模块化单元辅助机构的设计.pdf
  • 2021年度自动化生产单元行业人力资源效能分析报告(市场招聘用工).pdf
  • Spring-cloud-openfeign3.0服务单元化动态指定服务名

    千次阅读 热门讨论 2020-06-14 14:30:46
    上次写了一篇关于Spring-cloud-openfeign 2.x版本的单元化动态指定服务名的方法,那个方法是由于Spring-cloud-openfeign的Targeter是package范围的接口,不允许自行实现,不得已面变通的方法。后来我又直接和Spring-...

    背景

    上次写了一篇关于Spring-cloud-openfeign 2.x版本的单元化动态指定服务名的方法,那个方法是由于Spring-cloud-openfeign的Targeter是package范围的接口,不允许自行实现,不得已而变通的方法。后来我又直接和Spring-cloud-openfeign开发团队联系,让他们改了一些东西,最近发现他们已经按我的建议修改了,而且已经发布到了Spring-cloud-openfeign 3.0.0.M2版本里面了。所以今天就按照新的方法来优雅地实现单元化动态指定服务名。
    废话不多说,直接上示例

    示例代码

    1. 在Service Client中API的URL中定义一个特殊的变量标记,如:

    @FeignClient("customer-service-CLUSTER-ID")
    public interface CustomerService {
    	@GetMapping("/echo/{customer}")
    	public String customerInfo(@PathVariable("customer") String customer);
    }
    

    上述示例中的,FeignClient的服务名称,以“CLUSTER-ID”结尾,用来标识本服务是单元化的,运行时,要把“CLUSTER-ID”替换为实际定位到的单元ID。(本来想用“%CLUSTER-ID%”特殊符号作为变量place-holder,但Spring-cloud-openfeign会在启动校验服务名,判定为非法域名,所以只能用合法的域名允许的字符。)

    2. 以HardCodedTarget为基础,实现Targeter

    public class RouteTargeter implements Targeter {
    	/**
    	 * 服务名以本字符串结尾的,会被置换为实现定位到的单元号
    	 */
    	public static final String CLUSTER_ID_SUFFIX = "CLUSTER_ID";
    
    	@Override
    	public <T> T target(FeignClientFactoryBean factory, Builder feign, FeignContext context,
    			HardCodedTarget<T> target) {
    
    		return feign.target(new RouteTarget<>(target));
    	}
    
    	public static class RouteTarget<T> implements Target<T> {
    		Logger log = LoggerFactory.getLogger(getClass());
    		private Target<T> realTarget;
    
    		public RouteTarget(Target<T> realTarget) {
    			super();
    			this.realTarget = realTarget;
    		}
    
    		@Override
    		public Class<T> type() {
    			return realTarget.type();
    		}
    
    		@Override
    		public String name() {
    			return realTarget.name();
    		}
    
    		@Override
    		public String url() {
    			String url = realTarget.url();
    			if (url.endsWith(CLUSTER_ID_SUFFIX)) {
    				url = url.replace(CLUSTER_ID_SUFFIX, locateCusterId());
    				log.debug("url changed from {} to {}", realTarget.url(), url);
    			}
    			return url;
    		}
    
    		/**
    		 * @return 定位到的实际单元号
    		 */
    		private String locateCusterId() {
    			// TODO 你的路由算法在这里
    			return "001";
    		}
    
    		@Override
    		public Request apply(RequestTemplate input) {
    			if (input.url().indexOf("http") != 0) {
    				input.target(url());
    			}
    			return input.request();
    
    		}
    
    	}
    }
    

    3. 使用自定义的Targeter实现代替缺省的实现

    在XXX应用中,自己写一个XXXOpenfeignConfiguration,加入如下Bean

        @Bean
    	public RouteTargeter getRouteTargeter() {
    		return new RouteTargeter();
        }
    

    这样,在运行时,我们的“RouteTargeter”就能根据服务名后缀判断到需要动态定位单元时,实现动态定位单元。

    现在已经有了Spring-cloud 3.0.0M3版本了,有网友反应下载不到,大家可以在pom.xml中添加一个库就行了:

    	<repositories>
    		<repository>
    			<id>spring-milestones</id>
    			<name>Spring Milestones</name>
    			<url>https://repo.spring.io/milestone</url>
    		</repository>
    	</repositories>
    
    展开全文
  • #资源达人分享计划#
  • 自动化生产单元公司(行业)薪酬管理制度方案-薪酬设计方案资料文集系列.docx
  • 自动化生产线认知

    2014-04-02 18:01:58
    自动化生产线认知,自动化生产线的运行特性与技术特点,典型自动化生产线各组成单元及其基本功能
  • #资源达人分享计划#
  • 机械设备(电子机械设备)类专用设备(专用机械设备)行业自动化生产单元领域分析报告(研究报告).pdf
  • 2020年机械设备(电子机械设备)专用设备(专用机械设备)行业自动化生产单元领域行业分析报告(市场调查报告).pdf
  • 为预防民用爆破器材生产单元安全爆炸事故的发生提供依据,根据安全评价系统理论,提出一个民用...本方法首先对导致爆炸事故的各个因素进行定量的分析,然后利用等级参数评判法得出民用爆破器材生产单元爆炸危险性大小。
  • 自动生产线加盖单元PLC程序设计 这是毕业生的毕业论文 希望对大家有点帮助
  • 自动化生产线仿真教学

    千次阅读 2018-03-02 16:15:03
    2017年信息化教学设计大赛 《自动化生产线加工站的运行仿真》教学设计方案 参赛单位:天津石油职业技术学院 参赛教师:李传文 参赛时间:2017年4月 设计摘要 教学题目 自动化生产线加工站的运行仿真 课 程 ...

    2017年信息化教学设计大赛

     

     

     

     

     

     

    自动化生产线加工站的运行仿真》

    教学设计方案

     

     

     

     

     

     

     

    参赛单位:天津石油职业技术学院

               参赛教师:李传文

                     参赛时间:2017年4月

     

    设计摘要

    教学题目

    自动化生产线加工站的运行仿真

    课    程

    自动化设备安装与调试

     

    学时安排

    授课2课时(90分钟),学生设计4个课时。

     

    授课地点

    电气智能控制技术实验室C207

     

    参考教材

    自动化生产线拆装与调试说明书

    基于2011年承担的华北油田公司的科研项目《*************

    设计依据

    在自动化上产线拆装与调试中PLC编程方面,我采用了仿真教学的方式。属于2011年我承担的油田公司科研项目的应用。即将自动化生产线的某个站点通过摄像机生成的视频文件,再转换成SWF格式。要求学生我自制的SWF播放器逐帧播放,找到传感器和驱动设备工作时的关键,帧记录下每个工作过程的帧范围,并填入动作运行表中,通过运行表的的数据设计MCGS组态工程各PLC控制程序。从而达到训练学生掌握自动化生产线加工站的工作过程、组态仿真原理以及PLC控制程序设计。

    教学目标

    1.能力目标

    (1)能使用我自制的SWF播放器找到传感器和各种执行机构的关键帧。做出本站的动作表。

    (2)能够根据动作表的传感器动作关键帧设计组态工程,包括实时数据库、PLC设备端口、用户窗体,以及启动脚本和循环脚本设计。

    (3)能够根据动作表的传感器动作关键帧和各种执行机构的动作关键帧,设计PLC梯形图。

     

    2.知识目标

    (1)掌握加工站的工作原理;

    (2)能够设计MCGS环境下的组态工程;

    (3)能够设计本工程的PLC控制梯形图。

     

     

    3、素质目标

    (1)具备一定的MCGS组态工程设计能力;

    (2)通过我自制的SWF播放器,提高学生的创新能力;

    (3)具备可编程控制器的梯形图的设计能力。

     

    教学重点及难点

    教学重点:

    (1)传感器动作帧的定位。

    (2)MCGS组态软件DDE功能的运用。

    (3)PLC图形图设计。

    教学难点:PLC梯形图设计。

    学情分析

    (1)教学对象是电气自动化大二的学生,他们PLC基础编程已经学完和本课程同步的还有MCGS组态工程设计。

    (2)自动化生产线的机械装置可以通过教材、设备参观(去图书馆自动化生产线实训室)认识装置的机械部分和气动部分、演示工作过程、采集视频录像,从中掌握自动化生产线的工作过程。

    (3)在PLC实验室分析视频动画。找出传感器和执行机构的动作关键帧。

    (4)设计仿真组态和PLC梯形图。

    教学方法、手段

    演示法教学:电气智能控制实验室有学生机14台,平均3人一台电脑,通过极域电子教室平台授课。本课程基本是软硬件结合的课程,每台电脑都连接PLC主机。教师通过屏幕广播教学控制学生的屏幕讲解PLC工程的设计步骤、梯形图设计。完后在上学生练习,教师机通过学生机监视,并指导学生完成工程。完成后的工程项目通过电子教室软件上传给教师机。教师根据实时监视学生做作业的情况以及最终的工程文件,给出平时成绩。

    授课内容

    一、 实训目的

     

    1. 掌握加工单元的结构及功能。

    2. 掌握S7-200PLC基本指令。

    3. 掌握S7-200PLC的编程方法。

    4. 熟悉加工单元的工作过程。

    5. 了解传感器、气缸的工作原理。

    二、实训内容

      1、分析加工站 传感器和执行机构动作关键帧

       打开自制的mcgsswf.exe软件,在文件栏选择加工板,此时加载了加工站的视频动画文件。

      打开实训指导书,找到控制对象列表

    控制对象列表

    动作名称

    帧范围

    传感器输入

    执行器件输出

    料台传感器加载

    0..66

    M0.0  =1;

    Q0.4  =1

    夹紧

     

    M0.3  =1;

    Q0.0 = Q0.1 = Q0.2 = Q0.3 =1

    移料

     

    M0.1  =0;

     

    移料到位

     

    M0.2  =1;

    Q0.5  =Q0.6  =1;Q0.0  = Q0.2  =0

    离开主轴上限

     

    M0.5  =0

     

    到达主轴下限

     

    M0.4  =0;M0.5  =1

    Q0.6  = Q0.5  =0

    主轴返回到上限

     

    M0.4  =1;M0.5  =0

    Q0.0  = Q0.1  =0;Q0.2  = Q0.3  =1

    到达主轴上线

     

     

     

    滑台返回

     

    M0.2  =0

     

    滑台返回到原点

     

    M0.1  =1;

    Q0.0  = Q0.2  = Q0.4  =0

    松开

     

    M0.3  =0;

     

    移走物料

     

    M0.0  =0;

     

        连续点击前进一帧按钮让搬运站机器手将物料放到加工站物料台,直到机器手松开,记录下当前视频帧料台传感器加载的终止帧(66),加紧动作起始帧是上动作的终止帧+1(67),继续点击前进一帧,档观察到物料由上跳的小动作,则是加紧动作的终止帧71,移料动作动作的起始帧72,如果不确定可以按后退一帧按钮,反复仔细观察,如果确定继续观察下一动作—移料,起始帧73,挡滑台停止移动时为移料动作的终止帧。依次把所有动作完成。

        2、建立组态工程   

     打开mcgs组态软件,新建工程,工程另存为:E盘以自己的班级和姓名为文件夹工程名为加工站。

    建立实时数据库:

    根据下表建立实时数据库

     

     建立设备窗口,将PLC与mcgs连接

      首先新建设备窗口,在窗口中单击鼠标右键,添加通用串口父设备和设备0-西门子——S7200PPI

      双击通用串口父设备,弹出下图,修改端口号为0-COM1,数据校验方式为2-偶校验。

      

       双击设备0-西门子——S7200PPI ,再点击设置设备内部属性, 弹出下图

     

      

    将其所有删除,点击增加通道

      设置6个M寄存器,作为仿真传感器。设置8个Q寄存器作为执行机构。如下图:

    将PLC的寄存器与传感器或执行机构进行连接

     创建用户窗口,并设为启动窗口。

     

      右键—设为启动窗口,然后再右键—属性,窗口名称为:加工站,窗口位置:最大化显示。并确认。

     

     

     

     

     

     

     

    双击加工站窗口,使用工具画一个圆,画一个标签,在标签处右键—该字符为“物料台检测”,

     

    双击图形圆,在颜色动画连接下面的“填充属性”处打钩

    点击上面的填充颜色,表达式处连接物料台检测

    将标签和圆复制12个,按照通道连接的顺序,将传感器放到上排,执行机构放到下排。逐个修改表达式内容和对应的标签字符。

    添加一个按钮,双击按钮,标题改为“启动”,点击窗体上面的操作属性,为取反,连接变量为“启动”点击确认。

    编写程序脚本:

    启动脚本,也就是变量初始化,在窗体处单击鼠标右键-属性,点击启动脚本

     

     

     

    点击循环脚本,编写代码如下:下面接收数据的范围依据前面检测的数据。

    点击确认。

      将我自制的flash播放器与mcgs建立DDE连接设置:点击主菜单上的工具——DDE连接管理。

       将“发送”变量连接DDE输出,

    接收连接DDE输入

    DDE连接将数据发送端定位服务节点,还要对节点进行配置,服务并填写播放器可执行程序的名称mcgsswf,该软件是VB编写的,服务节点名填写VB,VB的主窗体为Form1,点击确认,

      连接项目,是VB编写的mcgsswf软件中主窗体Form1里面的文本框Text1.

    下面就是该编写PLC梯形图了

    根据下表设计PLC梯形图:

    动作名称

    帧范围

    传感器输入

    执行器件输出

    料台传感器加载

    0..66

    M0.0  =1;

    Q0.4  =1

    夹紧

     

    M0.3  =1;

    Q0.0 = Q0.1 = Q0.2  = Q0.3  =1

    移料

     

    M0.1  =0;

     

    移料到位

     

    M0.2  =1;

    Q0.5  =Q0.6  =1;Q0.0  = Q0.2  =0

    离开主轴上限

     

    M0.5  =0

     

    到达主轴下限

     

    M0.4  =0;M0.5  =1

    Q0.6 = Q0.5 =0

    主轴返回到上限

     

    M0.4  =1;M0.5  =0

    Q0.0 = Q0.1 =0;Q0.2 = Q0.3 =1

    到达主轴上线

     

     

     

    滑台返回

     

    M0.2  =0

     

    滑台返回到原点

     

    M0.1  =1;

    Q0.0 = Q0.2 = Q0.4 =0

    松开

     

    M0.3  =0;

     

    移走物料

     

    M0.0  =0;

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

    学生利用4个学时的时间完成该设计,制作过程中教师通过电子教室监控观察各组完成的情况。实时进行指导,直到成功为止,最后按完成的顺序评定成绩。

     

     

    展开全文
  • 基于工业以太网的自动化生产线通信系统,实现了统一控制和集中管理,在自动化生产线中各单元之间信息传递起到了至关重要的作用。
  • 模块式柔性自动化生产线实验实训系统能适合机械制造及其自动化、机电一体化、机械电子工程、电气工程及自动化、自动化工程、控制工程、测控技术、计算机控制、机械设计与理论、自动控制等相关专业的教学和培训。...
  • 单元测试和自动黑盒测试

    千次阅读 2019-03-02 19:45:54
    第一个显而易见的好处是,您不会使用复杂的框架来让生产代码复杂,以便注入依赖和其他真正相当于使单元测试更容易的事物。 Again, I am not saying you shouldn’t ever use dependency injection, interfaces ...

    目录

    翻译内容

    I finally have an answer(我终于得到了答案)

    Umm, did you say you had an answer, dude? 嗯,你说你有答案,伙计?

    What are the benefits? 有什么好处?

    关于作者

    原链接


    翻译内容

    If you’ve been following me from the beginning of the Back to Basics series, you’ll know that I set out to reevaluate some of the commonly held truths of what best practices are, especially in regards to unit testing, dependency injection and inversion of control containers.

    在Back to Basics系列开始,如果你一直关注我,你就会知道我开始重新评估最常用的一些常见事实,特别是在单元测试,依赖注入和控制容器的反转方面。

    We’ve talked about what an interface is, cohesion and coupling, and even went a little bit off track to talk about sorting for a bit.

    我们已经谈到了接口是什么,内聚和耦合,甚至有点偏离轨道来谈论排序。

    One of the reoccurring themes that kept showing up in most of the posts was unit testing.  I talked about why unit testing is hard, and I defined three levels of unit testing.

    在大多数帖子中不断反复出现的主题之一是单元测试。 我谈论过为什么单元测试很难,我定义了四个级别的单元测试。

    • Level 1 – we have a single class with no external dependencies and no state.  We are just testing an algorithm.级别1  - 我们有一个没有外部依赖关系且没有状态的独立类。 我们只是在测试算法。
    • Level 2 – we have a single class with no external dependencies but it does have state.  We are setting up an object and testing it as a whole. 级别2  - 我们有一个没有外部依赖关系的类,但它确实有状态。 我们正在设置一个对象并将其作为一个整体进行测试。
    • Level 3 – we have a single class with at least one external dependency, but it does not depend on its own internal state. 级别3  - 我们有一个至少有一个外部依赖项的类,但它不依赖于自己的内部状态。
    • Level 4 – we have a single class with at least one external dependency and depends on its own internal state. 级别4 - 我们有一个至少有一个外部依赖的类,并依赖于它自己的内部状态。

    Throughout this series I ended up tearing down using interfaces with only single non-unit test implementation.  I criticized the overuse of dependency injection for the sole purpose of unit testing.  I attacked a large portion of best practices that I felt were only really being used in order to be able to unit test classes in isolation.

    在整个系列中,我最终拆除了仅使用单个非单元测试实现的接口。 我批评过为了单元测试,而过度使用依赖注入。 我攻击了大部分最佳实践,我觉得这些实践只是为了能够单独测试类。

    But, I never offered a solution.  I told you what was bad, but I never told you what was good.

    但是,我从未提供过解决方案。 我告诉你什么是坏事,但我从来没有告诉过你什么是好的。

    I said don’t create all these extra interfaces, use IoC containers all over your app, and mocks everywhere just for the purpose of being able to isolate a class you want to unit test, but when you asked me what to do instead, I said “I don’t know, I just know what we are doing is wrong and we need to stop.”

    我说不要创建所有这些额外的接口,在你的应用程序中使用IoC容器,并且为了能够隔离你想要进行单元测试的类而到处模拟,但是当你问我该怎么做时,我 说:“我不知道,我只知道我们做什么是错的,我们需要停下来。”

    Well, that is no answer, but I intend to give one now.  I’ve been thinking about this for months, researching the topic and experimenting on my own.

    嗯,这不是答案,但我打算现在给一个。 几个月来我一直在考虑这个问题,研究这个话题并亲自试验。

    cool experiment

    I finally have an answer(我终于得到了答案)

    But, before I give you it, I want to give you a little background on my position on the subject matter.

    但是,在我给你之前,我想就你对这个主题的立场给你一点背景。

    I come from a pretty solid background of unit testing and test driven development.  I have been preaching both for at least the last 7 years.

    我有单元测试和测试驱动开发相当扎实的背景。 至少在过去的7年里,我一直在讲道。

    I was on board from the beginning with dependency injection and IoC containers.  I had even rolled my own as a way to facilitate isolating dependencies for true unit tests.

    我从一开始就使用依赖注入和IoC容器。 我甚至推出了自己的方法来帮助隔离真正的单元测试的依赖关系。

    I think unit testing and TDD are very good skills to have.  I think everyone should learn them.  TDD truly helps you write object oriented code with small concentrated areas of responsibility.

    我认为单元测试和TDD是非常好的技能。 我想每个人都应该学习它们。 TDD真正帮助您编写面向对象的代码,这些代码具有小而集中功能的区域。

    But, after all this time I have finally concluded, for the most part, that unit tests and practicing TDD in general do more good for the coder than the software.

    但是,经过这段时间我终于得出结论,在大多数情况下,单元测试和实践TDD通常对开发者更有用,而不是软件。

    个人心得:同意作者的观点,从交付软件这个角度来说,单元测试、TDD的帮助并没有显而易见。

    What?  How can I speak such blasphemy? 什么? 我怎么能说这样亵渎的话?

    The truth of the matter is that I have personally grown as a developer by learning and practicing TDD, which has lead me to build better software, but not because the unit tests themselves did much.

    问题的真相是,我个人通过学习和实践TDD成长为开发人员,这导致我构建更好的软件,但不是因为单元测试本身做了很多。

    What happened is that while I was feeling all that pain of creating mocks for dependencies and trying to unit test code after I had written it, I was learning to reduce dependencies and how to create proper abstractions.

    当我感觉到为依赖创建模拟并尝试在编写代码之后对代码进行单元测试时的所有痛苦时,我正在学习减少依赖关系以及如何创建适当的抽象。

    I feel like I learned the most when the IoC frameworks were the weakest, because I was forced to minimize dependencies for the pain of trying to create so many mocks or not being able to unit test a class in isolation at all.

    我觉得当IoC框架最弱的时候我学到的最多,因为我被迫最大限度地减少依赖,因为试图创建这么多的模拟或根本无法单独测试一个类,是非常痛苦的。

    I’ve gotten to the point now where two things have happened:

    我现在已经发现了两件事:

    1. I don’t need the TDD training wheels anymore.  I don’t pretend to be a coding god or demi-god of some sort, but in general the code I write that is done in a TDD or BDD style is almost exactly the same as the code I write without it. 我不再需要TDD训练了。 我不假装是编码之神或某种类型的半神,但一般来说,我用TDD或BDD风格编写的代码几乎与没有它的代码完全相同。
    2. The IoC containers have made it so easy to pass 50 dependencies into my constructor that I am no longer feeling the pain that caused my unit tests to cause me to write better code. IoC容器使得将50个依赖项传递到我的构造函数中变得非常容易,以至于我不再感到痛苦了,它让我写我的单元测试,让我编写更好的代码。

    What I find myself ending up with now when I write unit tests is 70% mocking code that verifies that my code calls certain methods in a certain order.

    当我编写单元测试时,我发现自己现在最终得到的是70%的模拟代码,用于验证我的代码按特定顺序调用某些方法。

    Many times I can’t even be sure if my unit test is actually testing what I think it is, because it is so complex.

    很多时候我甚至无法确定,我的单元测试是否真的在测试我想要的东西,因为它太复杂了。

    Umm, did you say you had an answer, dude? 嗯,你说你有答案,伙计?

    Yes, I do have an answer.  I just wanted to make sure you understand where I am coming from before I throw out all these years of practical knowledge and good practices.

    是的,我确实有答案。 在我抛弃所有这些年的实践知识和良好实践之前,我只是想确保你了解我的过往背景。

    I am not the enemy.

    我不是敌人。

    My answer to the problem of what to do if you shouldn’t be using IoC containers and interfaces all over your code base just for the purpose of unit testing, is to take a two pronged approach.

    如果您没有仅仅为了单元测试而在代码库中使用IoC容器和接口,那么我要解决的问题是采取双管齐下的方法。

    2prong

    1. Mostly only write level 1 or level 2 unit tests.  Occasionally write level 3 unit tests if you only have 1 or possibly 2 dependencies.  (I’ll talk about more how to do this in my next post) 通常只编写1级或2级单元测试。 如果您只有1个或2个依赖项,偶尔也会编写3级单元测试。 (我将在下一篇文章中讨论更多如何做到这一点)
    2. Spend a majority of your effort, all the time you would have spent writing unit tests, instead writing what I will call blackbox automated tests or BATs.  (I used to call this automated functional tests, but I think that name is too ambiguous.) 原本花费大部分精力,时间在编写单元测试上,相反,要编写我称之为blackbox自动化测试或BAT的东西。 (我以前称之为自动化功能测试,但我觉得这个名字太模糊了。)

    I intend to drill really deep into these approaches in some upcoming posts, but I want to briefly talk about why I am suggesting these two things in place of traditional BDD or TDD approaches.

    我打算在即将发布的帖子中深入探讨这些方法,但我想简要谈谈为什么我建议用这两种方法代替传统的BDD或TDD方法。

    What are the benefits? 有什么好处?

    The first obvious benefit is that you won’t be complicating your production code with complex frameworks for injecting dependencies and other clever things that really amount to making unit testing easier.

    第一个显而易见的好处是,您不会使用复杂的框架来让生产代码复杂化,以便注入依赖和其他真正相当于使单元测试更容易的事物。

    Again, I am not saying you shouldn’t ever use dependency injection, interfaces or IoC containers.  I am just saying you should use them when they provide a real tangible value (which most of the time is going to require alternate non-unit test implementations of an interface.)

    同样,我并不是说你不应该使用依赖注入,接口或IoC容器。 我只是说你应该在它们提供真正价值时使用它们(大多数时候这将需要一个接口的非单元测试实现来替代。)

    Think about how much simpler your code would be if you just went ahead and new’d up a concrete class when you needed it.  If you didn’t create an extra interface for it, and then pass it in the constructor.  You just used it where you needed it and that was that.

    想想你的代码在你需要它的时候调用一个具体的类会变得多么简单。 如果没有为它创建额外的接口,然后在构造函数中传递它。 你只是在你需要的地方使用它,就是这样。

    The second benefit is that you won’t spend so much time writing hard unit tests.  I know that when I am writing code for a feature I usually spend at least half the amount of time writing unit tests.  This is mostly because I am writing level 3 and level 4 unit tests, which require a large number of mocks.

    第二个好处是你不会花太多时间编写困难的单元测试。 我知道当我为一个功能编写代码时,我通常花费至少一半的时间来编写单元测试。 这主要是因为我正在编写3级和4级单元测试,这需要大量的mock。

    Mocks kill us.  Mocking has a negative ROI.  Not only is creating them expensive in terms of time, but it also strongly couples our test classes to the system and makes them very fragile.  Plus, mocking adds huge amounts of complexity to unit tests.  Mocking usually ends up causing our unit test code to become unreadable, which makes it almost worthless.

    mock阻碍了我们。 模拟的投资回报率为负。 不仅创建它们在时间上昂贵,而且它还将我们的测试类强烈地耦合到系统中,并使它们非常脆弱。 此外,mock为单元测试增加了大量的复杂性。 mock通常导致我们的单元测试代码变得不可读,这使得它几乎一文不值。

    I’ve been writing mocks for years.  I know just about every trick in the book.  I can show you how to do it in Java, in C#, even in C++.  It is always painful, even with auto-mocking libraries.

    我多年来一直在写mock。 我知道书中的每一个技巧。 我可以向您展示如何在Java中,在C#中,甚至在C ++中实现。 即使使用自动mock库,它也总是很痛苦的。

    By skipping the hard unit tests and finding smart ways to make more classes only require level 1 and level 2 unit tests, you are making your job a whole lot easier and maximizing on the activities that give you a high ROI.  Level 1 and level 2 unit tests, in my estimation, give very high ROIs.

    通过跳过困难的单元测试,并找到明智的方法来让更多的类只需要1级和2级单元测试,您可以更轻松地完成工作,并最大限度地提高投资回报率。 在我的估计中,1级和2级单元测试给出了非常高的ROI。

    The thirds benefit is that blackbox automated tests are the most valuable tests in your entire system and now you’ll be writing more of them.  There are many names for these tests, I am calling them BATs now, but basically this is what most companies call automation.  Unfortunately, most companies leave this job to a QA automation engineer instead of the development teams.  Don’t get me wrong, QA automation engineers are great, but there aren’t many of them, good ones are very expensive, and the responsibility shouldn’t lie squarely on their shoulders.

    第三个好处是blackbox自动化测试是整个系统中最有价值的测试,现在你将能够编写更多这样的测试。 这些测试有很多名称,我现在称它们为BAT(blackbox automated tests),但基本上这就是大多数公司所说的自动化。 不幸的是,大多数公司将这项工作留给QA自动化工程师而不是开发团队。 不要误会我的意思,QA自动化工程师很棒,但是他们并不多,牛人很珍贵,责任也不应该直接落在他们的肩上。

    BATs test the whole system working together.  BATs are your automated regression tests for the entire system.  BATs are automated customer acceptance tests and the ROI for each line for code in a BAT can be much higher than the ROI of each line of production code.

    BAT测试整个系统可以集成起来工作。 BAT是您对整个系统的自动回归测试。 BAT是自动化的客户验收测试,BAT中每行代码的ROI可能远高于每行生产代码的ROI。

    Why?  How is this even possible?  It’s all about leverage baby.  Each line of code in a BAT may be exercising anywhere from 5 to 500 lines of production code, which is quite the opposite case of a unit test where each line of unit test code might only be testing a 1/8th or 1/16th a line of production code on average (depending on code coverage numbers being reached.)

    为什么? 这怎么可能呢? 这一切都与杠杆有关。 BAT中的每行代码可以在5到500行生产代码中运行,这与单元测试的情况完全相反,其中每行单元测试代码可能只平均测试一行生产代码的1/8或1/16 (取决于达到的代码覆盖率数量。)

    I’ll save the detail for later posts, but it is my strong opinion that a majority of a development teams effort should be put in BATs, because BATs

    我将在后续帖子中讲述详细信息,但我强烈认为,大多数开发团队的工作应该放在BAT中,因为BATs

    • Have high value to the customer 对客户有很高的价值
    • Regression test the entire system 回归测试整个系统
    • Have a huge ROI per line of code (if you create a proper BAT framework) 每行代码都有巨大的投资回报率(如果您创建了适当的BAT框架)

    Imagine how much higher quality your software would be if you had a BAT for each backlog item in your system which you could run every single iteration of your development process.  Imagine how confident you would be in making changes to the system, knowing that you have an automated set of tests that will catch almost any break in functionality.

    想象一下,如果系统中的每个积压项目都有BAT,那么您的软件质量会有多高,您可以在开发过程的每一次迭代中运行。 想象一下,您对系统进行更改时的信心会有多大,因为您知道自己拥有一组自动化测试,几乎可以捕获任何功能中断。

    Don’t you think that is worth giving up writing level 3 and level 4 unit tests, which are already painful and not very fun to begin with to achieve?

    难道你不认为放弃编写3级和4级单元测试是值得的吗?因为这些测试已经变得很痛苦,并且不是很有趣

    In my future posts on the Back to Basics series, I will cover in-depth how to push more of your code into level 1 and level 2 unit tests by extracting logic out to separate classes that have no dependencies, and I will talk more about BATs, and how to get started and be successful using them.  (Hint: you need a good BAT framework.)

    在我将来回归到基础知识系列文章时,我将深入介绍如何将更多代码实现1级和2级单元测试,方法是将逻辑提取出来,分离出没有依赖关系的类,我将详细介绍 BAT,以及如何开始并成功使用它们。(提示:你需要一个好的BAT框架。)

    关于作者

    John Sonmez is the founder of Simple Programmer and a life coach for software developers. He is the best selling author of the book "Soft Skills: The Software Developer's Life Manual."

    John Sonmez是Simple Programmer的创始人,也是软件开发人员的生活教练。 他是“软技能:软件开发人员生活手册”一书的畅销书作者。

    原链接

    https://simpleprogrammer.com/back-to-basics-unit-testing-automated-blackbox-testing-and-conclusions/

    展开全文
  • 堆垛系统单元和自动仓库系统单元进行连接组成一个完整的生产线培训控制系统模型.这样,各个分散单元既可以单独运行也可以对各分散的控制单元进行资源整合组成新的控制系统,有效的提高了资源的利用率并且降低了...
  • MPS模块式柔性自动化生产线

    千次阅读 2019-12-22 17:14:38
    MPS的全称为Modular Powersuits,MPS系统是一套包含工业自动系统中不同程度的复杂控制过程的教学装置。MPS具有综合性、模块性及易扩充性等特点.应用MPS学生可以完成加工系统中机械设计、组装、编程、传感器、电器...

    MPS的全称为Modular Powersuits,MPS系统是一套包含工业自动化系统中不同程度的复杂控制过程的教学装置。MPS具有综合性、模块性及易扩充性等特点.应用MPS学生可以完成加工系统中机械设计、组装、编程、传感器、电器控制、调试、操作、维护和纠错等一系列不同层次的课题.
    供料工作单元(MPS起点)
    功能:供料工作单元的主要作用是为加工过程逐一提供加工工件。在管状料仓中最多可以存放8个工件。供料过程中,双作用气缸从料仓中逐一推出工件,接着,转换模块上的真空吸盘将工件吸起,转换模块的转臂在旋转缸的驱动下将工件移动至下一个工作站的传输位置。加工工件通过传输系统及提取装置从一个工作单元传输到下一个工作单元 。
    检测工作单元
    检测工作单元的主要作用是检测工件的特性。光电式及电容式传感器完成区分工件的材质。在加工工件被无杆缸提升至检测位置之前,先由反射式光电传感器检测该位置是否安全。模拟量传感器检测工件高度。无杆缸将合格的工件传送至气动滑槽的上层,并将不合格的工件捡出至气动滑槽的下层。
    加工工作单元(纯电气单元)
    在加工工作单元,分度盘检测到有工件后,便带动工件旋转,完成检测及钻孔工作。
    本单元是唯一一个只使用电气驱动器的工作单元。
    操作手工作单元
    操作手单元配置了柔性2自由度操作装置。提取装置上的气抓手将工件从该位置提起,气抓手上装有光电式传感器用于区分“黑色”及“非黑色”工件,并将工件根据检测结果堆放,或者工件也可以被直接传输到下一个工作单元。
    成品分装工作单元
    进入成品分装工作单元的加工工件被分别放置在三根不同的滑槽上。当工件被放在传送带起始位置时受到漫射传感器的检测。制动器前方的传感器检测工件的特性(黑色、红色、金属色)。由双作用气缸通过分离器将工件分捡到正确的滑槽上。
    MPS模块式柔性自动化生产线实训系统QY-JDYT11
    MPS模块式柔性自动化生产线实训系统仿真工业生产制造现场,针对实训教学进行了专门设计,强化了各种控制和工程实践能力。适合机械制造及其自动化、机电一体化、电气工程及自动化、控制工程、测控技术、计算机控制、自动控制等相关专业的教学和培训。系统由六个站组成,分别为:上料检测站、搬运站、加工站、搬运安装站、安装站和分类站,控制系统可以选用西门子、三菱的PLC进行控制,具有较好的柔性,即每站各有一套PLC控制系统独立控制,在单个培训完成以后,又可以将相邻的两站、三站…直至六站连在一起,学习复杂系统的设计、安装、编程、调试和整机运行。
    系统包含了机电一体化专业中的气动、电机驱动与控制、PLC、传感器等多种控制技术,适合相关专业学生进行工程实践、课程设计及初上岗位的工程技术人员进行培训。
    实训项目

    1. 了解传感器的应用
    2. 观察气动元件的应用
    3. 掌握PLC控制技术
      模块式柔性自动化生产线实训系统六个工作站各自都有一套PLC主机,可分成六个完全独立的工作站进行实训,在对各单元生产工艺和电气控制系统的构成熟悉后,通过PLC编程可完成:
      PLC基本指令学习和实际应用
      (1) 系统故障检测
      (2) 工件上料程序控制
      (3) 工件搬运程序控制
      (4) 工件检测程序控制
      (5) 工件搬运安装程序控制
      (6) 工件安装程序控制
      (7) 工件分类程序控制
      (8) 多工作工位程序控制
      (9) 工作单元联网程序控制
      (10) 步进电机驱动控制
    4. 电气控制系统安装调试
    5. 机械系统安装调试
    6. 电机驱动调试
    7. 系统维护和故障检测技术
    展开全文
  • 自动化生产线PLC

    2016-06-20 15:03:21
    这是一个原创完整的自动化项目电气部分,该自动化生产线包含四个单元,用3个PLC控制。 压缩包里含PLC程序,PLC品牌是OMRON的CP1H和CP1E。包含触摸屏文件,品牌是威纶通的。包含电路图(要高版本CAD才能打开)。包含...
  • 自动化生产线PLC程序

    2018-05-24 10:20:21
    加热炉自动PLC控制程序,配合组态监控画面,实现加热炉控制。
  • OA 自动化基于PLC 的自动化生产 线的毕业设计 目录 第一章 绪论 1 1.1 自动化生产线发展状 1 1.2 PLC 的应用及目前的研究现状 3 1.2.1 生产线上的工艺过程 3 1.2.2 连续生产线 4 1.2.3 控制系统组成框图 5 1.3 课题...
  • 汽车白车身激光焊接生产线控制系统单元设计,陈建明,陈根余,为了适应和满足我国自主品牌新车型开发和小批量生产定制,为了适用汽车的小型、轻量以及耐腐蚀性能,本文设计了一种以PLC为控
  • 该生产线实现了起爆药的化合及水洗单元自动化生产,减少了人工操作,消除了起爆药生产中易燃、易爆的不安全因素,提高了产量。结果表明:该生产线结构合理,可实现人机隔离,减少操作人员数量及提高产量,消除了安全...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 117,915
精华内容 47,166
关键字:

单元化生产