理级模拟编程
#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");
}
㈡ plc模拟量编程问题
假设模拟量的标准电信号是A0—Am(如:4—20mA), A/D 转换后数值为D0
—Dm(如:6400—32000),设模拟量的标准电信号是A,A/D 转换后的相应数值
为D,由于是线性关系,函数关系A=f(D)可以表示为数学方程:
A=(D-D0)×(Am-A0)/(Dm-D0)+A0。
根据该方程式,可以方便地根据D 值计算出A 值。将该方程式逆变换,得出
函数关系D=f(A)可以表示为数学方程:
D=(A-A0)×(Dm-D0)/(Am-A0)+D0。
具体举一个实例,以S7-200 和4—20mA 为例,经A/D 转换后,我们得到的
数值是6400—32000,即A0=4,Am=20,D0=6400,Dm=32000,代入公式,得
出:
A=(D-6400)×(20-4)/(32000-6400)+4
假设该模拟量与AIW0 对应,则当AIW0 的值为12800 时,相应的模拟电信号
是6400×16/25600+4=8mA。
又如,某温度传感器,-10—60℃与4—20mA 相对应,以T 表示温度值,AIW0
为PLC 模拟量采样值,则根据上式直接代入得出:
T=70×(AIW0-6400)/25600-10
可以用T 直接显示温度值。
模拟量值和A/D 转换值的转换理解起来比较困难,该段多读几遍,结合所举
例子,就会理解。为了让您方便地理解,我们再举一个例子:
某压力变送器,当压力达到满量程5MPa 时,压力变送器的输出电流是20mA,
AIW0 的数值是32000。可见,每毫安对应的A/D 值为32000/20,测得当压力为
0.1MPa 时,压力变送器的电流应为4mA,A/D 值为(32000/20)×4=6400。由
此得出,AIW0 的数值转换为实际压力值(单位为KPa)的计算公式为:
VW0 的值=(AIW0 的值-6400)(5000-100)/(32000-6400)+100(单位:KPa)
㈢ 怎样在PLC理设计编程数字的模拟量,在我们厂里,有三个A系列三菱PLC里,有三个模拟量,
不是这样的 传感器输入的是模拟量信号0—10V电压信号 和4—20毫安电流信号 通过模拟量模块转换成2进制数字供PLC读取 在程序里是把这个模拟量信号存在寄存器里 通过比较指令比较预先设定值和模拟信号值 然后进行输出 像你所说的这个D2 D0 D12就是把模拟量信号的大小先存到D0里面 然后根据在D2 和D12 设定的数值进行比较 比如D0小于D2时M1接通 大于D0但小于D12时M2接通 D2 D12的数值用传送指令进行给定
㈣ 机械专业都用的什么离线编程仿真软件
常用离线编程软件RobotArt、RobotMaster、 RobotoWorks、Robotmove、RobotCAD、DELMIA、RobotStudio、 RoboGuide、KUKA Sim、SprutCAM、RobotSim、川思特、天皇、亚龙、旭上、汇博。
至于谁家的技术做的比较好只能说每个软件都有自己比较擅长的一面,看看具体想在哪方面应用。
1、RobotArt优点:
优点:
1)支持多种格式的三维CAD模型,可导入扩展名为step、igs、stl、x_t、prt(UG)、prt(ProE)、CATPart、sldpart等格式;
2)支持多种品牌工业机器人离线编程操作,如ABB、KUKA、Fanuc、Yaskawa、Staubli、KEBA系列、新时达、广数等);
3)拥有大量航空航天高端应用经验;
4)自动识别与搜索CAD模型的点、线、面信息生成轨迹;
5)轨迹与CAD模型特征关联,模型移动或变形,轨迹自动变化;
6)一键优化轨迹与几何级别的碰撞检测;
7)支持多种工艺包,如切割、焊接、喷涂、去毛刺、数控加工;
8)支持将整个工作站仿真动画发布到网页、手机端;
2、RobotMaster优点:
可以按照产品数模,生成程序,适用于切割、铣削、焊接、喷涂等等。独家的优化功能,运动学规划和碰撞检测非常精确,支持外部轴(直线导轨系统、旋转系统),并支持复合外部轴组合系统。
3、RobotoWorks优点:
优点:生成轨迹方式多样、支持多种机器人、支持外部轴。
4、Robotmove优点:
软件操作自由,功能完善,支持多台机器人仿真。
5、RobotCAD优点:
ROBCAD 软件支持离线点焊、支持多台机器人仿真、支持非机器人运动机构仿真,精确的节拍仿真。
RobotStudio、 RoboGuide、KUKA Sim机器人本体厂家的离线编程软件,与本体厂家的机器人兼容性很好。
㈤ 数学建模需要掌握哪些编程语言和技术
数学建模需要掌握MATLAB、Python、SAS、Lingo等编程语言。
㈥ plc编程方法有几种
1、经验法
即是运用自己的或别人的经验进行设计,设计前选择与设计要求相类似的成功的例子,并进行修改,增删部分功能或运用其中部分程序,直至适合自己的情况。在工作过程中,可收集与积累这样成功的例子,从而可不断丰富自己的经验。
2、解析法
可利用组合逻辑或时序逻辑的理论,并运用相应的解析方法,对其进行逻辑关系的求解,然后再根据求解的结果,画成梯形图或直接写出程序。解析法比较严密,可以运用一定的标准,使程序优化,可避免编程的盲目性,是较有效的方法。
3、图解法
图解法是靠画图进行设计。常用的方法有梯形图法、波形图法及流程法。梯形图法是基本方法,无论是经验法还是解析法,若将PLC程序转化成梯形图后,就要用到梯形图法。
波形图法适合于时间控制电路,将对应信号的波形画出后,再依时间逻辑关系去组合,就可很容易把电路设计出。流程法是用框图表示PL。
(6)理级模拟编程扩展阅读
PLC编程的应用面广、功能强大、使用方便,已经成为当代工业自动化的主要装置之一,在工业生产的所有领域得到了广泛的使用,在其他领域(例如民用和家庭自动化)的应用也得到了迅速的发展。
国际电工委员会(IEC)在1985年的PLC标准草案第3稿中,对PLC作了如下定义:“是一种数字运算操作的电子系统,专为在工业环境下应用而设计。
它采用可编程序的存储器,用来在其内部存储执行逻辑运算、顺序控制、定时、计数和算术运算等操作的指令,并通过数字式、模拟式的输入和输出,控制各种类型的机械或生产过程。可编程序控制器及其有关设备,
都应按易于使工业控制系统形成一个整体,易于扩充其功能的原则设计。”从上述定义可以看出,PLC是一种用程序来改变控制功能的工业控制计算机,除了能完成各种各样的控制功能外,还有与其他计算机通信联网的功能。
㈦ 学C语言现在最好用的编程软件
Turbo C就可以的。编辑文本的时候可以用utraledit
至于vc++之类的我是不推荐初学者使用的
㈧ 西门子PLC模拟量怎么处理的。程序怎么编写的
模拟量输入处理,用mov-w指令,一般plc都自带模拟量输入接口,地址是alw0或者alw2,模块外部输入的是电流或者电压,链接上端口后,模块讲模拟量转换成字符串0-32000,地址还是alw0或alw2(自带的一般就这俩了),然后根据自己的需求对这些数据处理进行监控或者控制就行了。比如模拟量为0-10v,0-200℃,接入模拟量端口后,外部输出为3.1v,内部的数据大概就是11000(程序状态监控可以看到),然后根据自己的需要进行数据处理,温度在140度有报警,或者实时监控温度的大小都可以。如下就是一种简单的数据处理。而模拟量的输出处理反过来就行了。