`

用Java线程协作模拟 - Alice,Bob和Robert博士的协作

阅读更多
1. 问题描述:

   Robert博士要进行一场实验,她需要两个助手Alice和Bob,Alice负责从一箱试管剂中取出优先级最高的试管剂(每个试管剂
都有编号ID,规定ID最小的优先级最高)放到试管剂台容器里,该容器里只能放入一个试管剂;当Alice把试管剂放到容器里后,
就会通知Bob,然后Bob把试管剂送到Rober博士的实验室,然后Robert又会通知Alice, Alice看到容器里空了,就会放入下一个
优先级最高的试管剂并通知Bob...如此循环。

  请用计算机模拟仿真该场景过程。

2. 问题分析:

   这是典型的对象通信问题。即线程间的协作问题。

3. 实现方法

(1) 一箱试管剂中取出优先级最高的试管剂(每个试管剂都有编号ID,规定ID最小的优先级最高)

     用优先级队列来模拟试管剂箱。

package boke.thread4;

/**
 * 基于数组的优先级队列【最小的元素具有最大优先权】
 * 
 * @since jdk1.6
 * @author 毛正吉
 * @version 1.0
 * @date 2010.05.25
 * 
 */
public class PriorityQueue {
	public static void main(String[] args) throws PriorityQueueException {
		PriorityQueue pq = new PriorityQueue();
		pq.enQueue(10);
		pq.enQueue(40);
		pq.enQueue(43);
		pq.enQueue(20);
		pq.enQueue(50);
		pq.enQueue(30);
		pq.enQueue(99);

		while (!pq.isEmpty()) {
			int element = pq.delQueue();
			System.out.print(element + " ");
		}
		System.out.println("");
	}

	private int[] pqElements;
	private int count;
	private static final int MAX_PQ_SIZE = 1000;

	public PriorityQueue() {
		pqElements = new int[MAX_PQ_SIZE];
	}

	public void enQueue(int item) throws PriorityQueueException {
		if (!isFull()) {
			pqElements[count] = item;
			count++;
		} else {
			throw new PriorityQueueException("PriorityQueue is full!");
		}
	}

	public int delQueue() throws PriorityQueueException {
		if (!isEmpty()) {
			int min = pqElements[0];
			int minIndex = 0;

			for (int i = 1; i < count; i++) {
				if (pqElements[i] < min) {
					min = pqElements[i];
					minIndex = i;
				}
			}

			pqElements[minIndex] = pqElements[count - 1];
			count--;
			return min;
		} else {
			throw new PriorityQueueException("PriorityQueue is empty!");
		}
	}

	public void makeEmpty() {
		count = 0;
	}

	public boolean isEmpty() {
		return count == 0;
	}

	public boolean isFull() {
		return count == MAX_PQ_SIZE;
	}

	public int length() {
		return count;
	}
}

---------------------------------------

package boke.thread4;

/**
 * TODO 队列异常
 * 
 * @since jdk1.6
 * @author 毛正吉
 * @version 1.0
 * @date 2010.05.25
 * 
 */
public class PriorityQueueException extends Exception {
	public PriorityQueueException() {
		super("Queue Exception");
	}

	public PriorityQueueException(String msg) {
		super(msg);
	}
}
(2) 试管剂台容器,该容器里只能放入一个试管剂。

package boke.thread4;

/**
 * 试管剂容器
 * 
 * @since jdk1.6
 * @author 毛正吉
 * @version 1.0
 * @date 2010.05.25
 * 
 */
public class Container {
	int tubeID; // 试管剂ID
	boolean isFull = false; // 容器里是否有试管剂

	/**
	 * 容器里放入试管剂
	 * 
	 * @param ID
	 */
	public synchronized void put(int ID) {
		if (!isFull) { // 容器里没有试管剂
			tubeID = ID; // 放入试管剂
			System.out.println("Alice 把试管剂:" + tubeID + " 放入到容器里");
			isFull = true; // 则容器里有试管剂
			notify(); // 通知
		}
		try {
			wait(); // 自己等待
		} catch (InterruptedException e) {
			e.printStackTrace();
		}
	}

	/**
	 * 从容器里取走试管剂
	 * 
	 * @return
	 */
	public synchronized int get() {
		if (!isFull) { // 容器里没有试管剂
			try {
				wait(); // 等待
			} catch (InterruptedException e) {
				e.printStackTrace();
			}
		}
		isFull = false; // 容器里有试管剂

		executeLogic(tubeID); // 执行业务逻辑

		notify();// 通知
		return tubeID; // 返回值
	}

	private void executeLogic(int value) {
		System.out.println("Bob 从容器里取走试管剂:" + value);
	}
}

(3) Alice

package boke.thread4;

/**
 * 模拟Alice
 * 
 * @since jdk1.6
 * @author 毛正吉
 * @version 1.0
 * @date 2010.05.25
 * 
 */
class Alice extends Thread {
	Container c; // 容器
	PriorityQueue pq; // 优先级队列

	/**
	 * 构造方法
	 * 
	 * @param c
	 * @param pq
	 */
	Alice(Container c, PriorityQueue pq) {
		this.c = c;
		this.pq = pq;
	}

	/**
	 * 运行任务
	 */
	public void run() {
		try {
			while (!pq.isEmpty()) {
				int ID = pq.delQueue(); // 拿出优先级最高的试管剂
				c.put(ID); // 放置到容器里
			}
		} catch (PriorityQueueException e) {
			e.printStackTrace();
		}
	}
}

(4) Bob

package boke.thread4;

/**
 * 模拟Bob
 * 
 * @since jdk1.6
 * @author 毛正吉
 * @version 1.0
 * @date 2010.05.25
 * 
 */
class Bob extends Thread {
	Container c; // 容器
	PriorityQueue pq; // 优先级队列

	/**
	 * 构造方法
	 * 
	 * @param c
	 * @param pq
	 */
	Bob(Container c, PriorityQueue pq) {
		this.c = c;
		this.pq = pq;
	}

	/**
	 * 运行任务
	 */
	public void run() {
		while (true) {
			c.get(); // Bob从容器里取出试管剂
		}
	}
}
(5) 场景类Client

package boke.thread4;

import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;

/**
 * 场景类
 * 
 * @since jdk1.6
 * @author 毛正吉
 * @version 1.0
 * @date 2010.05.25
 * 
 */
public class Client {
	/**
	 * 
	 * @param args
	 * @throws PriorityQueueException
	 */
	public static void main(String[] args) throws PriorityQueueException {
		Container c = new Container(); // 容器
		PriorityQueue pq = new PriorityQueue(); // 优先级队列
		for (int i = 19; i < 100; i++) { // 试管剂
			pq.enQueue(i);
		}

		Alice alice = new Alice(c, pq); // Alice
		Bob bob = new Bob(c, pq); // Bob

		ExecutorService exec = Executors.newCachedThreadPool();
		exec.execute(alice);
		exec.execute(bob);
		exec.shutdown();
	}
}

4. 输出结果:

Alice 把试管剂:19 放入到容器里
Bob 从容器里取走试管剂:19
Alice 把试管剂:20 放入到容器里
Bob 从容器里取走试管剂:20
Alice 把试管剂:21 放入到容器里
Bob 从容器里取走试管剂:21
Alice 把试管剂:22 放入到容器里
Bob 从容器里取走试管剂:22
Alice 把试管剂:23 放入到容器里
Bob 从容器里取走试管剂:23
Alice 把试管剂:24 放入到容器里
Bob 从容器里取走试管剂:24
Alice 把试管剂:25 放入到容器里
Bob 从容器里取走试管剂:25
Alice 把试管剂:26 放入到容器里
Bob 从容器里取走试管剂:26
Alice 把试管剂:27 放入到容器里
Bob 从容器里取走试管剂:27
Alice 把试管剂:28 放入到容器里
Bob 从容器里取走试管剂:28
Alice 把试管剂:29 放入到容器里
Bob 从容器里取走试管剂:29
Alice 把试管剂:30 放入到容器里
Bob 从容器里取走试管剂:30
Alice 把试管剂:31 放入到容器里
Bob 从容器里取走试管剂:31
Alice 把试管剂:32 放入到容器里
Bob 从容器里取走试管剂:32
Alice 把试管剂:33 放入到容器里
Bob 从容器里取走试管剂:33
Alice 把试管剂:34 放入到容器里
Bob 从容器里取走试管剂:34
Alice 把试管剂:35 放入到容器里
Bob 从容器里取走试管剂:35
Alice 把试管剂:36 放入到容器里
Bob 从容器里取走试管剂:36
Alice 把试管剂:37 放入到容器里
Bob 从容器里取走试管剂:37
Alice 把试管剂:38 放入到容器里
Bob 从容器里取走试管剂:38
Alice 把试管剂:39 放入到容器里
Bob 从容器里取走试管剂:39
Alice 把试管剂:40 放入到容器里
Bob 从容器里取走试管剂:40
Alice 把试管剂:41 放入到容器里
Bob 从容器里取走试管剂:41
Alice 把试管剂:42 放入到容器里
Bob 从容器里取走试管剂:42
Alice 把试管剂:43 放入到容器里
Bob 从容器里取走试管剂:43
Alice 把试管剂:44 放入到容器里
Bob 从容器里取走试管剂:44
Alice 把试管剂:45 放入到容器里
Bob 从容器里取走试管剂:45
Alice 把试管剂:46 放入到容器里
Bob 从容器里取走试管剂:46
Alice 把试管剂:47 放入到容器里
Bob 从容器里取走试管剂:47
Alice 把试管剂:48 放入到容器里
Bob 从容器里取走试管剂:48
Alice 把试管剂:49 放入到容器里
Bob 从容器里取走试管剂:49
Alice 把试管剂:50 放入到容器里
Bob 从容器里取走试管剂:50
Alice 把试管剂:51 放入到容器里
Bob 从容器里取走试管剂:51
Alice 把试管剂:52 放入到容器里
Bob 从容器里取走试管剂:52
Alice 把试管剂:53 放入到容器里
Bob 从容器里取走试管剂:53
Alice 把试管剂:54 放入到容器里
Bob 从容器里取走试管剂:54
Alice 把试管剂:55 放入到容器里
Bob 从容器里取走试管剂:55
Alice 把试管剂:56 放入到容器里
Bob 从容器里取走试管剂:56
Alice 把试管剂:57 放入到容器里
Bob 从容器里取走试管剂:57
Alice 把试管剂:58 放入到容器里
Bob 从容器里取走试管剂:58
Alice 把试管剂:59 放入到容器里
Bob 从容器里取走试管剂:59
Alice 把试管剂:60 放入到容器里
Bob 从容器里取走试管剂:60
Alice 把试管剂:61 放入到容器里
Bob 从容器里取走试管剂:61
Alice 把试管剂:62 放入到容器里
Bob 从容器里取走试管剂:62
Alice 把试管剂:63 放入到容器里
Bob 从容器里取走试管剂:63
Alice 把试管剂:64 放入到容器里
Bob 从容器里取走试管剂:64
Alice 把试管剂:65 放入到容器里
Bob 从容器里取走试管剂:65
Alice 把试管剂:66 放入到容器里
Bob 从容器里取走试管剂:66
Alice 把试管剂:67 放入到容器里
Bob 从容器里取走试管剂:67
Alice 把试管剂:68 放入到容器里
Bob 从容器里取走试管剂:68
Alice 把试管剂:69 放入到容器里
Bob 从容器里取走试管剂:69
Alice 把试管剂:70 放入到容器里
Bob 从容器里取走试管剂:70
Alice 把试管剂:71 放入到容器里
Bob 从容器里取走试管剂:71
Alice 把试管剂:72 放入到容器里
Bob 从容器里取走试管剂:72
Alice 把试管剂:73 放入到容器里
Bob 从容器里取走试管剂:73
Alice 把试管剂:74 放入到容器里
Bob 从容器里取走试管剂:74
Alice 把试管剂:75 放入到容器里
Bob 从容器里取走试管剂:75
Alice 把试管剂:76 放入到容器里
Bob 从容器里取走试管剂:76
Alice 把试管剂:77 放入到容器里
Bob 从容器里取走试管剂:77
Alice 把试管剂:78 放入到容器里
Bob 从容器里取走试管剂:78
Alice 把试管剂:79 放入到容器里
Bob 从容器里取走试管剂:79
Alice 把试管剂:80 放入到容器里
Bob 从容器里取走试管剂:80
Alice 把试管剂:81 放入到容器里
Bob 从容器里取走试管剂:81
Alice 把试管剂:82 放入到容器里
Bob 从容器里取走试管剂:82
Alice 把试管剂:83 放入到容器里
Bob 从容器里取走试管剂:83
Alice 把试管剂:84 放入到容器里
Bob 从容器里取走试管剂:84
Alice 把试管剂:85 放入到容器里
Bob 从容器里取走试管剂:85
Alice 把试管剂:86 放入到容器里
Bob 从容器里取走试管剂:86
Alice 把试管剂:87 放入到容器里
Bob 从容器里取走试管剂:87
Alice 把试管剂:88 放入到容器里
Bob 从容器里取走试管剂:88
Alice 把试管剂:89 放入到容器里
Bob 从容器里取走试管剂:89
Alice 把试管剂:90 放入到容器里
Bob 从容器里取走试管剂:90
Alice 把试管剂:91 放入到容器里
Bob 从容器里取走试管剂:91
Alice 把试管剂:92 放入到容器里
Bob 从容器里取走试管剂:92
Alice 把试管剂:93 放入到容器里
Bob 从容器里取走试管剂:93
Alice 把试管剂:94 放入到容器里
Bob 从容器里取走试管剂:94
Alice 把试管剂:95 放入到容器里
Bob 从容器里取走试管剂:95
Alice 把试管剂:96 放入到容器里
Bob 从容器里取走试管剂:96
Alice 把试管剂:97 放入到容器里
Bob 从容器里取走试管剂:97
Alice 把试管剂:98 放入到容器里
Bob 从容器里取走试管剂:98
Alice 把试管剂:99 放入到容器里
Bob 从容器里取走试管剂:99

分享到:
评论
11 楼 wfine 2010-06-02  
建议PriorityQueue 用JDK自带PriorityBlockingQueue
10 楼 mathgl 2010-06-01  
producer-consumer model???

9 楼 select*from爱 2010-06-01  
maozj 写道
声明: 本人在javaeye网站上发布的论坛帖子都是原创,有些题目也是原创。。。如果评为新手帖 那说明实力不够 还需自我修养。。。但如果你只是看都没看就评为新手帖,那我只能说 你与技术无缘

+1
8 楼 littleJava 2010-06-01  
应该属于 生产者和消费者模式
7 楼 imhades 2010-06-01  
message queue...
6 楼 maozj 2010-06-01  
amwiacel 写道
对学习线程非常有用.....

呵呵 学习和分享。。。
5 楼 maozj 2010-06-01  
jy1245626 写道
楼主的帖子我觉得挺好,虽然不入高人耳目,但对我来说很有用,工作了四年多了多线程的接触几乎为0。

建议je对评分进行改进

评任何一个级别的帖子都必须回帖说出理由,否则不予评贴


谢谢支持~~ 只要每个人有心 都可以把自己好的想法发布出来 分享才快乐~~
4 楼 amwiacel 2010-06-01  
对学习线程非常有用.....
3 楼 jy1245626 2010-06-01  
楼主的帖子我觉得挺好,虽然不入高人耳目,但对我来说很有用,工作了四年多了多线程的接触几乎为0。

建议je对评分进行改进

评任何一个级别的帖子都必须回帖说出理由,否则不予评贴
2 楼 maozj 2010-06-01  
声明: 本人在javaeye网站上发布的论坛帖子都是原创,有些题目也是原创。。。如果评为新手帖 那说明实力不够 还需自我修养。。。但如果你只是看都没看就评为新手帖,那我只能说 你与技术无缘
1 楼 maozj 2010-06-01  
新手帖? 谁评的 题目都是原创

相关推荐

    Java 8 Pocket Guide

    - **替代旧版日期类**:Java 8引入了一个新的日期和时间API,以解决旧版API中的问题,如`java.util.Date`和`java.util.Calendar`的不可变性和线程安全性问题。 - **核心类**: - **LocalDate**: 代表日期(年、月、...

    li_3ck_02a_1118.pdf

    li_3ck_02a_1118

    基于MATLAB的牛顿迭代法实现

    基于MATLAB的牛顿迭代法实现

    mellitz_3ck_01_0319.pdf

    mellitz_3ck_01_0319

    2025探索银行业人工智能驱动技术转型的投资回报率

    内容概要:文章阐述了银行采用人工智能(AI)技术替代传统系统的紧迫性和收益,讨论了通过构建现代化的数据和技术平台实现效率提升的方法,同时强调实施过程中确保数据质量和建立信任的重要性。文中提及,在金融行业中,若想优化业绩则必须拥抱AI带来的机遇,并为此进行经营模式的革新。根据Workday主办的研讨会内容,PwC金融服务风险与监管领导和Workday金融服务高层指出了大部分银行对AI认知不足的问题,强调AI在金融、人力资源以及IT等领域的广泛应用潜力及具体应用场景,如欺诈检测、技能映射和财务管理方面的作用。并且提到了AI部署过程中可能出现的技术与非技术难题及相应解决办法,鼓励金融机构及时投资建设新型基础设施,以保持竞争力。 适用人群:银行及其他金融机构管理人员;金融科技领域的专业研究人员;对企业数字化和智能化转型感兴趣的商业分析师、投资者;从事信息技术咨询工作的顾问。 使用场景及目标:本文可以帮助金融机构制定合理的技术发展战略规划,评估是否有必要推进AI技术转型,同时也为希望涉足银行科技项目的开发者提供了宝贵的市场洞察,帮助理解行业内普遍存在的困难与潜在的市场需求。此外,对于想要了解银行

    matlab程序代码项目案例论文+程序 基于在线优化的快速模型预测控制Fast model predicitive control with matlab interface.zip

    matlab程序代码项目案例 【备注】 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用!有问题请及时沟通交流。 2、适用人群:计算机相关专业(如计科、信息安全、数据科学与大数据技术、人工智能、通信、物联网、自动化、电子信息等)在校学生、专业老师或者企业员工下载使用。 3、用途:项目具有较高的学习借鉴价值,不仅适用于小白学习入门进阶。也可作为毕设项目、课程设计、大作业、初期项目立项演示等。 4、如果基础还行,或热爱钻研,亦可在此项目代码基础上进行修改添加,实现其他不同功能。 欢迎下载!欢迎交流学习!不清楚的可以私信问我!

    [AB PLC例程源码][MMS_043071]Phase Manager and a Scalable Batching Solution.zip

    AB PLC例程代码项目案例 【备注】 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用!有问题请及时沟通交流。 2、适用人群:计算机相关专业(如计科、信息安全、数据科学与大数据技术、人工智能、通信、物联网、自动化、电子信息等)在校学生、专业老师或者企业员工下载使用。 3、用途:项目具有较高的学习借鉴价值,不仅适用于小白学习入门进阶。也可作为毕设项目、课程设计、大作业、初期项目立项演示等。 4、如果基础还行,或热爱钻研,亦可在此项目代码基础上进行修改添加,实现其他不同功能。 欢迎下载!欢迎交流学习!不清楚的可以私信问我!

    [AB PLC例程源码][MMS_044386]1769-SM2 Compact I-O to DSI Module - Multi Drive Mode Operation - with.zip

    AB PLC例程代码项目案例 【备注】 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用!有问题请及时沟通交流。 2、适用人群:计算机相关专业(如计科、信息安全、数据科学与大数据技术、人工智能、通信、物联网、自动化、电子信息等)在校学生、专业老师或者企业员工下载使用。 3、用途:项目具有较高的学习借鉴价值,不仅适用于小白学习入门进阶。也可作为毕设项目、课程设计、大作业、初期项目立项演示等。 4、如果基础还行,或热爱钻研,亦可在此项目代码基础上进行修改添加,实现其他不同功能。 欢迎下载!欢迎交流学习!不清楚的可以私信问我!

    [AB PLC例程源码][MMS_041232]Monitor I-O Connections in Logix.zip

    AB PLC例程代码项目案例 【备注】 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用!有问题请及时沟通交流。 2、适用人群:计算机相关专业(如计科、信息安全、数据科学与大数据技术、人工智能、通信、物联网、自动化、电子信息等)在校学生、专业老师或者企业员工下载使用。 3、用途:项目具有较高的学习借鉴价值,不仅适用于小白学习入门进阶。也可作为毕设项目、课程设计、大作业、初期项目立项演示等。 4、如果基础还行,或热爱钻研,亦可在此项目代码基础上进行修改添加,实现其他不同功能。 欢迎下载!欢迎交流学习!不清楚的可以私信问我!

    chromedriver-linux64-136.0.7058.0.zip

    chromedriver-linux64-136.0.7058.0.zip

    [AB PLC例程源码][MMS_042504]Logix5000 interface to Atlas-Copco Tool Controller over EtherNet-IP.zip

    AB PLC例程代码项目案例 【备注】 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用!有问题请及时沟通交流。 2、适用人群:计算机相关专业(如计科、信息安全、数据科学与大数据技术、人工智能、通信、物联网、自动化、电子信息等)在校学生、专业老师或者企业员工下载使用。 3、用途:项目具有较高的学习借鉴价值,不仅适用于小白学习入门进阶。也可作为毕设项目、课程设计、大作业、初期项目立项演示等。 4、如果基础还行,或热爱钻研,亦可在此项目代码基础上进行修改添加,实现其他不同功能。 欢迎下载!欢迎交流学习!不清楚的可以私信问我!

    [AB PLC例程源码][MMS_042349]How to read-write data to-from a PLC using OPC in Visual Basic 6.zip

    AB PLC例程代码项目案例 【备注】 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用!有问题请及时沟通交流。 2、适用人群:计算机相关专业(如计科、信息安全、数据科学与大数据技术、人工智能、通信、物联网、自动化、电子信息等)在校学生、专业老师或者企业员工下载使用。 3、用途:项目具有较高的学习借鉴价值,不仅适用于小白学习入门进阶。也可作为毕设项目、课程设计、大作业、初期项目立项演示等。 4、如果基础还行,或热爱钻研,亦可在此项目代码基础上进行修改添加,实现其他不同功能。 欢迎下载!欢迎交流学习!不清楚的可以私信问我!

    电力工程领域中背压热电联产电厂的设计与参数计算

    内容概要:本文档介绍了背压热电联产(CHP)发电厂的详细设计步骤,涵盖确定各状态点的压力、温度、比焓以及质量流率的具体方法。主要内容围绕计算净电功率、燃料消耗及其效率展开,并提供了T-s图绘制的指南。针对每个组件(如蒸汽轮机、冷凝器、除氧器等),都列出了详细的效率假设和压力损失表,为实际工程应用提供了宝贵的参考资料和操作指导。同时,该作业任务要求学生从给定初始值中选择合适的操作条件进行系统模拟,并利用课程讲义和Moodle平台资料完成计算流程。 适用人群:对能源转换和动力设备设计感兴趣的学生或者初涉该领域的工程师。 使用场景及目标:旨在帮助学员深入了解并掌握背压热电联产装置的工作原理和技术指标计算的方法论,通过实践练习提高他们的问题解决能力。 其他说明:文档强调了稳态运行假设的重要性,即物质平衡等于能量输入等于输出的原则,并鼓励参与者借助附录提供的典型操作参数图表来寻找解决问题的方向。此外,它还特别指出对于一些变量值求解可能需要迭代法来进行调整,直至获得稳定结果。提交的报告必须含有一份详细的T-s图和其他必要附件。

    机器学习-市财政收入分析(含数据集)

    机器学习_市财政收入分析(含数据集)

    [AB PLC例程源码][MMS_046989]KAT with Code Sequencer.zip

    AB PLC例程代码项目案例 【备注】 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用!有问题请及时沟通交流。 2、适用人群:计算机相关专业(如计科、信息安全、数据科学与大数据技术、人工智能、通信、物联网、自动化、电子信息等)在校学生、专业老师或者企业员工下载使用。 3、用途:项目具有较高的学习借鉴价值,不仅适用于小白学习入门进阶。也可作为毕设项目、课程设计、大作业、初期项目立项演示等。 4、如果基础还行,或热爱钻研,亦可在此项目代码基础上进行修改添加,实现其他不同功能。 欢迎下载!欢迎交流学习!不清楚的可以私信问我!

    tracy_3cd_01_0318.pdf

    tracy_3cd_01_0318

    lusted_3cd_01_0918.pdf

    lusted_3cd_01_0918

    基于51的自动分拣系统设计20250307

    题目:基于51的自动分拣系统设计 主控:AT89C52 测距模块:超声波测距模块 甲醛传感器(ADC0832+滑动变阻器模拟) 粉尘传感器(PCF8591+滑动变阻器模拟) 净化模块(继电器驱动蓝灯) 排风模块(继电器驱动绿灯) 电源电路(5V降压为3.3V供电) 显示模块(LCD1602) 声光报警 按键(3个,切换阈值选择,阈值加减) 检测物体:开关模拟 电机驱动模块(继电器驱动直流电机转动) 功能: 1.显示屏显示甲醛,粉尘浓度可以切换设置阈值。 2.通过甲醛传感器检测车间环境,大于阈值时声光报警并启动净化模块。 3.通过粉尘传感器检测车间环境,大于阈值时声光报警并启动排风模块。 4.采用超声波传感器进行物体超高监测异常(大于XX距离)时触发声光报警 5.检测到物体(开关闭合)直流电机转动(模拟传送带)

    network-server

    network_server

    [AB PLC例程源码][MMS_046691]Integrated Architecture Foundations of Modular Programming.zip

    AB PLC例程代码项目案例 【备注】 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用!有问题请及时沟通交流。 2、适用人群:计算机相关专业(如计科、信息安全、数据科学与大数据技术、人工智能、通信、物联网、自动化、电子信息等)在校学生、专业老师或者企业员工下载使用。 3、用途:项目具有较高的学习借鉴价值,不仅适用于小白学习入门进阶。也可作为毕设项目、课程设计、大作业、初期项目立项演示等。 4、如果基础还行,或热爱钻研,亦可在此项目代码基础上进行修改添加,实现其他不同功能。 欢迎下载!欢迎交流学习!不清楚的可以私信问我!

Global site tag (gtag.js) - Google Analytics