编程模拟实现
❶ 三菱plc编程软件如何实现模拟,你知道吗
GX Works2在菜单-调试-模拟运行,或者主工具栏中
。就可可以在电脑在模拟运行你的程序,
❷ 数控机床的自动编程是怎么实现的
原理
自动编程是借助计算机及其外围设备装置自动完成从零件图构造、零件加工程序编制到控制介质制
作等工作的一种编程方法。它的一般过程:首先将被加工零件的几何图形及有关工艺过程用计算机能够识别的形式输入计算机,利用计算机内的数控编程系统对输入信息进行翻译,形成机内零件的几何数据与拓扑数据;然后进行工艺处理,确定加工方法、加工路线和工艺参数。
通过数学处理计算刀具的运动轨迹,并将其离散成为一系列的刀位数据;根据某一具体数控系统所要求的指令格式,将生成的刀位数据通过后置处理生成最终加工所需的NC指令集;对NC指令集进行校验及修改;通过通讯接口将计算机内的NC指令集送入机床的控制系统。整个数控自动编程系统分为前置处理和后置处理两大模块。
实现自动编程的CAM软件常用的有UG,PRO/E,MASTERCAM,Powermill,CAXA制造工程师等,可以实现多轴联动的自动编程并进行仿真模拟。
(2)编程模拟实现扩展阅读
我国数控加工及编程技术的研究起步较晚,其研究始于航空工业的PCL数控加工自动编程系统SKC一1。在此基础上,以后又发展了SKC-2、SKC-3和CAM251数控加工绘图语言,这些系统没有图形功能,并且以2坐标和2.5坐标加工为主。
我国从“七五”开始有计划有组织地研究和应用CAD/CAM技术,引进成套的CAD/CAM系统,首先应用在大型军工企业,航天航空领域也开始应用,虽然这些软件功能很强,但价格昂贵,难以在我国推广普及。
“八五”又引进了大量的CAD/CAM软件,如:EUCLID-15、UG、CADDS、I-DEAS等,以这些软件为基础,进行了一些二次开发工作,也取得了一些应用成功,但进展比较缓慢。
我国在引用CAD/CAM系统的同时,也开展了自行研制工作。20世纪80年代以后,首先在航空工业开始集成化的数控编程系统的研究和开发工作,如西北工业大学成功研制成功的能进行曲面的3~5轴加工的PNU/GNC图形编程系统。
北京航空航天大学与第二汽车制造厂合作完成的汽车模具、气道内复杂型腔模具的三轴加工软件,与331厂合作进行了发动机叶轮的加工;华中理工大学1989年在微机上开发完成的适用于三维NC加工的软件HZAPT;中京公司和北京航空航天大学合作研制的唐龙CAD/CAM系统,以北京机床所为核心的JCS机床开发的CKT815车削CAD/CAM一体化系统等。
到了20世纪90年代,响应国家开发自主产权的CAD/CAM的号召,开始了自行研制CAD/CAM软件的工作,并取得了一些成果,如:
由北京由清华大学和广东科龙(容声)集团联合研制的高华CAD、由北京北航海尔软件有限公司(原北京航空航天大学华正软件研究所)研制的CAXA电子图板和CAXAME制造工程师、由浙江大天电子信息工程有限公司开发的基于特征的参数化造型系统GSCAD98、由广州红地技术有限公司和北京航空航天大学联合开发的基于STEP标准的CAD/CAM系统金银花。
由华中理工大学机械学院开发的具有自主版权的基于微机平台的CAD和图纸管理软件开目CAD、南京航空航天大学自行研制开发的超人2000CAD/CAM系统等,其中有一些系统已经接近世界水平。虽然我国的数控技术己开展多年,并取得了一定的成效,但始终未取得较大的突破。
从总体来看,先进的是点,落后的是面,我国的数控加工及数控编程与世界先进水平相比,约有10一15年的差距,差距主要包涵以下几个方面:数控技术的硬件基础落后,CAD/CAM支撑的软件体系尚未形成,CAD/CAM软件关键技术落后。
参考资料来源:网络-自动编程
参考资料来源:网络-自动编程技术
❸ 用C语言编程模拟处理机调度(实现一种算法)
#include <stdlib.h>
#include <conio.h>
#define getpch(type) (type*)malloc(sizeof(type))
#define NULL 0
struct pcb { /* 定义进程控制块PCB */
char name[10];
char state;
int super;
int ntime;
int rtime;
struct pcb* link;
}*ready=NULL,*p;
typedef struct pcb PCB;
void sort() /* 建立对进程进行优先级排列函数*/
{
PCB *first, *second;
int insert=0;
if((ready==NULL)||((p->super)>(ready->super))) /*优先级最大者,插入队首*/
{
p->link=ready;
ready=p;
}
else /* 进程比较优先级,插入适当的位置中*/
{
first=ready;
second=first->link;
while(second!=NULL)
{
if((p->super)>(second->super)) /*若插入进程比当前进程优先数大,*/
{ /*插入到当前进程前面*/
p->link=second;
first->link=p;
second=NULL;
insert=1;
}
else /* 插入进程优先数最低,则插入到队尾*/
{
first=first->link;
second=second->link;
}
}
if(insert==0) first->link=p;
}
}
void input() /* 建立进程控制块函数*/
{
int i,num;
system("cls"); /*清屏*/
printf("\n 请输入进程数: ");
scanf("%d",&num);
for(i=1;i<=num;i++)
{
printf("\n 进程号No.%d:\n",i);
p=getpch(PCB);
printf("\n 输入进程名:");
scanf("%s",p->name);
printf("\n 输入进程优先数:");
scanf("%d",&p->super);
printf("\n 输入进程运行时间:");
scanf("%d",&p->ntime);
printf("\n");
p->rtime=0;p->state='W';
p->link=NULL;
sort(); /* 调用sort函数*/
}
}
int space()
{
int l=0;
PCB* pr=ready;
while(pr!=NULL)
{
l++;
pr=pr->link;
}
return(l);
}
void disp(PCB * pr) /*建立进程显示函数,用于显示当前进程*/
{
printf("\n 进程名\t 状态\t 优先数\t 需要运行时间\t 已经运行时间\n");
printf("|%s\t",pr->name);
printf("|%c\t",pr->state);
printf("|%d\t",pr->super);
printf("|%d\t\t",pr->ntime);
printf("|%d\t",pr->rtime);
printf("\n");
}
void check() /* 建立进程查看函数 */
{
PCB* pr;
printf("\n **** 当前正在运行的进程是:\n"); /*显示当前运行进程*/
disp(p);
pr=ready;
printf("\n **** 当前就绪队列状态为:\n"); /*显示就绪队列状态*/
while(pr!=NULL)
{
disp(pr);
pr=pr->link;
}
}
void destroy() /*建立进程撤消函数(进程运行结束,撤消进程)*/
{
printf("\n 进程 [%s] 已完成.\n",p->name);
free(p);
}
void running() /* 建立进程就绪函数(进程运行时间到,置就绪状态*/
{
(p->rtime)++;
if(p->rtime==p->ntime)
destroy(); /* 调用destroy函数*/
else
{
(p->super)--;
p->state='W';
sort(); /*调用sort函数*/
}
}
void main() /*主函数*/
{
int len,h=0;
char ch;
input();
len=space();
while((len!=0)&&(ready!=NULL))
{
ch=getchar();
h++;
printf("-----------------------------------------------------");
printf("\n 现在是第%d次运行: \n",h);
p=ready;
ready=p->link;
p->link=NULL;
p->state='R';
check();
running();
printf("\n 按任意键继续......\n");
}
printf("\n\n 进程已经完成.\n");
}
❹ java编程实现程序用于模拟ATM取款机。
package demo;
import java.util.Scanner;
public class Test3 {
public static void main(String[] args) {
Scanner scanner =new Scanner(System.in);
int cnt=3;
String username = null;
String password = null;
double money = 1000;
String targetName = "admin33";
double targetMoney = 1000;
while(true){
if(username!=null&&password!=null){
if("admin".equals(username) && "123".equals(password)){
System.out.println("欢迎光临");
while(true){
System.out.println("请选择您的操作 1 取钱 2 存钱 3 转账 4 查询 5 退出 ");
int n = scanner.nextInt();
if(n==1){//取钱
System.out.println("请输入金额");
int getter = scanner.nextInt();
if(getter>=0){
if(getter<=5000){
if(getter<=money){
money-=getter;
}else{
System.out.println("余额不足");
}
}else{
System.out.println("单笔只能取5000及以下");
}
}else{
System.out.println("银行不到给");
}
}else if(n==2){//存钱
System.out.println("请输入金额");
int save = scanner.nextInt();
if(save>=0){
money+=save;
}
}else if(n==3){//转账
System.out.println("请输入目标账户");
String target = scanner.next();
if(target.equals(targetName)){
System.out.println("请输入金额");
int getter = scanner.nextInt();
if(getter>=0){
if(getter<=5000){
if(getter<=money){
money-=getter;
targetMoney+=getter;
}else{
System.out.println("余额不足");
}
}else{
System.out.println("单笔只能取5000及以下");
}
}else{
System.out.println("银行不到给");
}
}
}else if(n==4){//查询
System.out.println(money);
}else if(n==5){//退出
System.exit(0);
}else{
System.out.println("没有该项服务");
}
}
}else{
cnt--;
System.out.println("输入错误,您还有"+cnt+"次机会");
username=null;
password=null;
if(cnt<=0){
System.out.println("对不起,您的账号被冻结,请到最近的营业厅解除冻结");
System.exit(0);
}
}
}else{
System.out.println("请输入您的账号");
username = scanner.next();
System.out.println("请输入您的密码");
password = scanner.next();
}
}
}
}
