理級模擬編程
#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度有報警,或者實時監控溫度的大小都可以。如下就是一種簡單的數據處理。而模擬量的輸出處理反過來就行了。