⑴ plc與C語言有什麼關系啊!
PLC與C語言一點關系都沒有
PLC是一種專門為在工業環境下應用而設計的數字運算操作的電子裝置。它採用可以編製程序的存儲器,用來在其內部存儲執行邏輯運算、順序運算、計時、計 數和算術運算等操作的指令,並能通過數字式或模擬式的輸入和輸出,控制各種類型的機械或生產過程。PLC及其有關的外圍設備都應該按易於與工業控制系統形 成一個整體,易於擴展其功能的原則而設計。
目前,PLC在國內外已廣泛應用於鋼鐵、石油、化工、電力、建材、機械製造、汽車、輕紡、交通運輸、環保及文化娛樂等各個行業,使用情況大致可歸納為如下幾類。
3.1開關量的邏輯控制
這是PLC最基本、最廣泛的應用領域,它取代傳統的繼電器電路,實現邏輯控制、順序控制,既可用於單台設備的控制,也可用於多機群控及自動化流水線。如注塑機、印刷機、訂書機械、組合機床、磨床、包裝生產線、電鍍流水線等。
3.2模擬量控制
在工業生產過程當中,有許多連續變化的量,如溫度、壓力、流量、液位和速度等都是模擬量。為了使可編程控制器處理模擬量,必須實現模擬量(Analog) 和數字量(Digital)之間的A/D轉換及D/A轉換。PLC廠家都生產配套的A/D和D/A轉換模塊,使可編程式控制制器用於模擬量控制。
3.3運動控制
PLC可以用於圓周運動或直線運動的控制。從控制機構配置來說,早期直接用於開關量I/O模塊連接位置感測器和執行機構,現在一般使用專用的運動控制模 塊。如可驅動步進電機或伺服電機的單軸或多軸位置控制模塊。世界上各主要PLC廠家的產品幾乎都有運動控制功能,廣泛用於各種機械、機床、機器人、電梯等 場合。
3.4過程式控制制
過程式控制制是指對溫度、壓力、流量等模擬量的閉環控制。作為工業控制計算機,PLC能編制各種各樣的控制演算法程序,完成閉環控制。PID調節是一般閉環控制 系統中用得較多的調節方法。大中型PLC都有PID模塊,目前許多小型PLC也具有此功能模塊。PID處理一般是運行專用的PID子程序。過程式控制制在冶 金、化工、熱處理、鍋爐控制等場合有非常廣泛的應用。
3.5數據處理
現代PLC具有數學運算(含矩陣運算、函數運算、邏輯運算)、數據傳送、數據轉換、排序、查表、位操作等功能,可以完成數據的採集、分析及處理。這些數據 可以與存儲在存儲器中的參考值比較,完成一定的控制操作,也可以利用通信功能傳送到別的智能裝置,或將它們列印製表。數據處理一般用於大型控制系統,如無 人控制的柔性製造系統;也可用於過程式控制制系統,如造紙、冶金、食品工業中的一些大型控制系統。
3.6通信及聯網
PLC通信含PLC間的通信及PLC與其它智能設備間的通信。隨著計算機控制的發展,工廠自動化網路發展得很快,各PLC廠商都十分重視PLC的通信功能,紛紛推出各自的網路系統。新近生產的PLC都具有通信介面,通信非常方便。
PLC軟體系統由系統程序和用戶程序兩部分組成。系統程序包括監控程序、編譯程序、診斷程序等,主要用於管理全機、將程序語言翻譯成機器語言,診斷機器故 障。系統軟體由PLC廠家提供並已固化在EPROM中,不能直接存取和干預。用戶程序是用戶根據現場控制要求,用PLC的程序語言編制的應用程序(也就是 邏輯控制)用來實現各種控制。STEP7是用於SIMATIC可編程邏輯控制器組態和編程的標准軟體包,也就是用戶程序,我們就是使用STEP7來進行硬 件組態和邏輯程序編制,以及邏輯程序執行結果的在線監視。
3.2 PLC提供的編程語言
3.2.1 標准語言梯形圖語言也是我們最常用的一種語言,它有以下特點
3.2.1.1 它是一種圖形語言,沿用傳統控制圖中的繼電器觸點、線圈、串聯等術語和一些圖形符號構成,左右的豎線稱為左右母線。
3.2.1.2 梯形圖中接點(觸點)只有常開和常閉,接點可以是PLC輸入點接的開關也可以是PLC內部繼電器的接點或內部寄存器、計數器等的狀態。
3.2.1.3 梯形圖中的接點可以任意串、並聯,但線圈只能並聯不能串聯。
3.2.1.4 內部繼電器、計數器、寄存器等均不能直接控制外部負載,只能做中間結果供CPU內部使用。
3.2.1.5 PLC是按循環掃描事件,沿梯形圖先後順序執行,在同一掃描周期中的結果留在輸出狀態暫存器中所以輸出點的值在用戶程序中可以當做條件使用。
3.2.2 語句表語言,類似於匯編語言。
3.2.3 邏輯功能圖語言,沿用半導體邏輯框圖來表達,一般一個運算框表示一個功能左邊畫輸入、右邊畫輸出。
⑵ arino舵機控制問題
舵機是一種位置伺服的驅動器,主要是由外殼、電路板、無核心馬達、齒輪與位置檢測器所構成。其工作原理是由接收機或者單片機發出信號給舵機,其內部有一個基準電路,產生周期為20ms,寬度為1.5ms 的基準信號,將獲得的直流偏置電壓與電位器的電壓比較,獲得電壓差輸出。經由電路板上的IC 判斷轉動方向,再驅動無核心馬達開始轉動,透過減速齒輪將動力傳至擺臂,同時由位置檢測器送回信號,判斷是否已經到達定位。適用於那些需要角度不斷變化並可以保持的控制系統。當電機轉速一定時,通過級聯減速齒輪帶動電位器旋轉,使得電壓差為0,電機停止轉動。一般舵機旋轉的角度范圍是0 度到180 度。
舵機有很多規格,但所有的舵機都有外接三根線,分別用棕、紅、橙三種顏色進行區分,由於舵機品牌不同,顏色也會有所差異,棕色為接地線,紅色為電源正極線,橙色為信號線。
舵機的轉動的角度是通過調節PWM(脈沖寬度調制)信號的占空比來實現的,標准PWM(脈沖寬度調制)信號的周期固定為20ms(50Hz),理論上脈寬分布應在1ms到2ms 之間,但是,事實上脈寬可由0.5ms 到2.5ms 之間,脈寬和舵機的轉角0°~180°相對應。有一點值得注意的地方,由於舵機牌子不同,對於同一信號,不同牌子的舵機旋轉的角度也會有所不同。
用Arino 控制舵機的方法有兩種,一種是通過Arino 的普通數字感測器介面產生占空比不同的方波,模擬產生PWM 信號進行舵機定位,第二種是直接利用Arino 自帶的Servo 函數進行舵機的控制,這種控制方法的優點在於程序編寫,缺點是只能控制2 路舵機,因為Arino 自帶函數只能利用數字9、10 介面。Arino 的驅動能力有限,所以當需要控制1 個以上的舵機時需要外接電源。
方法一:
將舵機接數字 9 介面上。
編寫一個程序讓舵機轉動到用戶輸入數字所對應的角度數的位置,並將角度列印顯示到屏幕上。
int servopin=9;//定義數字介面9 連接伺服舵機信號線
int myangle;//定義角度變數
int pulsewidth;//定義脈寬變數
int val;
void servopulse(int servopin,int myangle)//定義一個脈沖函數
{
pulsewidth=(myangle*11)+500;//將角度轉化為500-2480 的脈寬值
digitalWrite(servopin,HIGH);//將舵機介面電平至高
delayMicroseconds(pulsewidth);//延時脈寬值的微秒數
digitalWrite(servopin,LOW);//將舵機介面電平至低
delay(20-pulsewidth/1000);
}
void setup()
{
pinMode(servopin,OUTPUT);//設定舵機介面為輸出介面
Serial.begin(9600);//連接到串列埠,波特率為9600
Serial.println("servo=o_seral_simple ready" ) ;
}
void loop()//將0 到9 的數轉化為0 到180 角度,並讓LED 閃爍相應數的次數
{
val=Serial.read();//讀取串列埠的值
if(val>'0'&&val<='9')
{
val=val-'0';//將特徵量轉化為數值變數
val=val*(180/9);//將數字轉化為角度
Serial.print("moving servo to ");
Serial.print(val,DEC);
Serial.println();
for(int i=0;i<=50;i++) //給予舵機足夠的時間讓它轉到指定角度
{
servopulse(servopin,val);//引用脈沖函數
}
}
}
方法二
先具體分析一下 Arino 自帶的Servo 函數及其語句,來介紹一下舵機函數的幾個常用語句吧。
1、attach(介面)——設定舵機的介面,只有數字9 或10 介面可利用。
2、write(角度)——用於設定舵機旋轉角度的語句,可設定的角度范圍是0°到180°。
3、read()——用於讀取舵機角度的語句,可理解為讀取最後一條write()命令中
的值。
4、attached()——判斷舵機參數是否已發送到舵機所在介面。
5、detach()——使舵機與其介面分離,該介面(數字9 或10 介面)可繼續被用作PWM 介面。
註:以上語句的書寫格式均為「舵機變數名.具體語句()」例如:myservo.attach(9)。
仍然將舵機接在數字9 介面上即可。
參考源程序B:
#include <Servo.h>//定義頭文件,這里有一點要注意,可以直接在Arino 軟體菜單欄單擊Sketch>Importlibrary>Servo,調用Servo 函數,也可以直接輸入#include <Servo.h>,但是在輸入時要注意在#include 與<Servo.h>之間要有空格,否則編譯時會報錯。
Servo myservo;//定義舵機變數名
void setup()
{
myservo.attach(9);//定義舵機介面(9、10 都可以,缺點只能控制2 個)
}
void loop()
{
myservo.write(90);//設置舵機旋轉的角度
}
⑶ 在proteus中,用80C51單片機怎麼控制四線二相步進電機每個脈沖信號走1.8度
1、在proteus中需要修改步進電機的屬性,將step angle 改成1.8,它默認是90的。
2、Proteus軟體是英國Lab Center Electronics公司出版的EDA工具軟體(該軟體中國總代理為廣州風標電子技術有限公司)。它不僅具有其它EDA工具軟體的模擬功能,還能模擬單片機及外圍器件。它是目前比較好的模擬單片機及外圍器件的工具。雖然目前國內推廣剛起步,但已受到單片機愛好者、從事單片機教學的教師、致力於單片機開發應用的科技工作者的青睞。
Proteus是世界上著名的EDA工具(模擬軟體),從原理圖布圖、代碼調試到單片機與外圍電路協同模擬,一鍵切換到PCB設計,真正實現了從概念到產品的完整設計。是目前世界上唯一將電路模擬軟體、PCB設計軟體和虛擬模型模擬軟體三合一的設計平台,其處理器模型支持8051、HC11、PIC10/12/16/18/24/30/DsPIC33、AVR、ARM、8086和MSP430等,2010年又增加了Cortex和DSP系列處理器,並持續增加其他系列處理器模型。在編譯方面,它也支持IAR、Keil和MATLAB等多種編譯器。
⑷ 步進電機怎樣跟隨解碼器動作
用彈性聯軸器把步進電機和編碼器連起來,編碼器就能測出步進電機的動作了。
⑸ 機器人控制器的選擇方法有哪些
在選購機器人微控制器時候,最先要考慮的一個是速度問題,主要的一個指標就是運行速度MHz,這個計算機的評價指標是一樣的,越高的MHz意味著越快的執行速度和你付出越多的錢。這第二個存儲容量的指標是決定你的控制器可以實現的功能的多少和復雜程度,越多的存儲空間可以讓你存儲更多的程序代碼,從而實現更多,更復雜的功能。編程語言是一個控制器能夠接受的語言類型,一般有C語言,匯編語言或者basic語言,這些通常能被高級一點的控制器直接執行,因為在高級控制器裡面內置了編譯器能夠直接把一些高級語言翻譯成機器碼,建議想玩機器人的人們都學一點C,畢竟這個是目前被絕大多數編譯器或者控制器所接受的語言。
最後一個要考慮的是,如何考慮功耗的問題,由於機器人不太好拖一根長長的電源線在屁股上,所以,除了考慮執行電機的功耗以外,另外一個耗電大戶就是控制器了。數控的控制系統可以完全實現機器人的功能,但是他沒有機器人的手臂,機器人也可以完成數控系統同的工作,看看5軸數銑中心,與你說的機器人差不多。對於PLC的功能就單一一些,屬於直接控制到電機了,按照設定好的步驟進行,能夠完成簡單一些的工作,雖然沒有數控系統那麼多功能,但是可以說是簡化版本的數控系統。
⑹ 基於51單片機控制的繞線機系統 望高手幫忙!!!
ycu.e.cn/zzz/jdsyzx/view.asp?id=8918" target="_blank">http://autoweb.ycu.e.cn/zzz/jdsyzx/view.asp?id=8918
masm是微軟出的匯編編譯器,支持8088/8086架構的匯編語言,在DOS下運行,需要下載。masm包括:
(1)編輯程序edit.exe
(2)匯編程序masm.exe
(3)連接程序link.exe
(3)調試程序debug.exe
基本使用方法如下,僅供參考:
用之前最好把上面的幾個文件保存到盤符下的文件夾里,文件夾名字盡量簡單明了,一切為了操作簡單。
(1)最好不要用edit.exe,而用記事本編輯匯編程序,這樣操作比較方便。保存時,文件類型選為所有文件,再在文件名後面加上.asm,保存即可。
(2)打開命令提示行(運行-->輸入cmd-->確定),敲命令進入masm所在文件夾,輸入masm *.asm(*表示文件名)回車。
這時會提示
Object filename [*.OBJ]:
表示要生成的目標文件名稱,必須填,然後回車。提示
Source listing [NUL.LST]:
表示是否要生成列表文件,填寫這生成.lst文件,不填則放棄生成.lst文件。.lst文件用記事本打開能看到源代碼的語法錯誤,查錯想當方便,****強烈建議生成****。回車後提示
Cross-reference [NUL.CRF]:
表示生成交叉引用文件.crf,如果有多個.obj文件參與連接就要生成,回車後顯示錯誤數量等信息,編譯完成。
(3)輸入link *(.obj文件名)
一路回車,返回時已經生成了*.exe。
(4)debug使用比較復雜,不多介紹
⑺ 你好,有C語言寫的STM32 搖桿電位器控制步進電機程序嗎
C語言之所以命名為C,是因為 C語言源自Ken Thompson發明的B語言,而 B語言則源自BCPL語言。
1967年,劍橋大學的Martin Richards對CPL語言進行了簡化,於是產生了BCPL(Basic Combined Programming Language)語言。
20世紀60年代,美國AT&T公司貝爾實驗室(AT&T Bell Laboratory)的研究員Ken Thompson閑來無事,手癢難耐,想玩一個他自己編的,模擬在太陽系航行的電子游戲--Space Travel。他背著老闆,找到了台空閑的機器--PDP-7。但這台機器沒有操作系統,而游戲必須使用操作系統的一些功能,於是他著手為PDP-7開發操作系統。後來,這個操作系統被命名為--UNIX。
1970年,美國貝爾實驗室的 Ken Thompson,以BCPL語言為基礎,設計出很簡單且很接近硬體的B語言(取BCPL的首字母)。並且他用B語言寫了第一個UNIX操作系統。
1971年,同樣酷愛Space Travel的Dennis M.Ritchie為了能早點兒玩上游戲,加入了Thompson的開發項目,合作開發UNIX。他的主要工作是改造B語言,使其更成熟。
1972年,美國貝爾實驗室的 D.M.Ritchie 在B語言的基礎上最終設計出了一種新的語言,他取了BCPL的第二個字母作為這種語言的名字,這就是C語言。
1973年初,C語言的主體完成。Thompson和Ritchie迫不及待地開始用它完全重寫了UNIX。此時,編程的樂趣使他們已經完全忘記了那個"Space Travel",一門心思地投入到了UNIX和C語言的開發中。隨著UNIX的發展,C語言自身也在不斷地完善。直到今天,各種版本的UNIX內核和周邊工具仍然使用C語言作為最主要的開發語言,其中還有不少繼承Thompson和Ritchie之手的代碼。
在開發中,他們還考慮把UNIX移植到其他類型的計算機上使用。C語言強大的移植性(Portability)在此顯現。機器語言和匯編語言都不具有移植性,為x86開發的程序,不可能在Alpha,SPARC和ARM等機器上運行。而C語言程序則可以使用在任意架構的處理器上,只要那種架構的處理器具有對應的C語言編譯器和庫,然後將C源代碼編譯、連接成目標二進制文件之後即可運行。
1977年,Dennis M.Ritchie發表了不依賴於具體機器系統的C語言編譯文本《可移植的C語言編譯程序》。
C語言繼續發展,在1982年,很多有識之士和美國國家標准協會為了使這個語言健康地發展下去,決定成立C標准委員會,建立C語言的標准。委員會由硬體廠商,編譯器及其他軟體工具生產商,軟體設計師,顧問,學術界人士,C語言作者和應用程序員組成。1989年,ANSI發布了第一個完整的C語言標准--ANSI X3.159-1989,簡稱"C89",不過人們也習慣稱其為"ANSI C"。C89在1990年被國際標准組織ISO(International Standard Organization)一字不改地採納,ISO官方給予的名稱為:ISO/IEC 9899,所以ISO/IEC9899: 1990也通常被簡稱為"C90"。1999年,在做了一些必要的修正和完善後,ISO發布了新的C語言標准,命名為ISO/IEC 9899:1999,簡稱"C99"。 在2011年12月8日,ISO又正式發布了新的標准,稱為ISO/IEC9899: 2011,簡稱為"C11"。
⑻ 如何用樹莓派驅動一個馬達
第一步,我先將樹莓派的系統安裝好, 確定gcc編譯器,GPIO口都能正常使用.這些操作大家都可以在design spark中搜到,此處就不細講.
圖2
第二步,准備一個小的馬達,再到買一個L298N 電機驅動板. L298N是ST公司生產的一種高電壓、大電流電機驅動晶元。該晶元採用15腳封裝。主要特點是:工作電壓高,最高工作電壓可達46V;輸出電流大,瞬間峰值電流可達3A,持續工作電流為2A;額定功率25W。
圖3
將樹莓派上的GPIO 0 1 2 3 分別接到電機驅動板上的IN1、IN2、IN3、IN4口.我們使用的馬達連接驅動板後,IN1 IN2 是控制底盤左邊的馬達, IN3 IN4是控制底盤右邊的馬達. 控制的原理拿左邊的電機來講: 依次把驅動板的IN1~IN2置為高電平,就可以驅動馬達,也就是說,要把樹莓派的2個GPIO輸出口依次置為高電平。例如,假設用0代表低電平,1代表高電平的話,GPIO 0、1口的電平第一次被置為1、0,第二次被置為0、1,持續下去,電機就會運作。
我修改好的代碼如下:
#include
#include
#include
#include
#define CLOCKWISE 1
#define COUNTER_CLOCKWISE 2
void delayMS(int x);
void rotate(int* pins, int direction);
int main(int argc,char* argv[]) {
if (argc < 4) {
printf("Usage example: ./motor 0 1 2 3 \n");
return 1;
}
/* number of the pins which connected to the stepper motor driver board */
int pinA = atoi(argv[1]);
int pinB = atoi(argv[2]);
int pinC = atoi(argv[3]);
int pinD = atoi(argv[4]);
int pins[4] = {pinA, pinB, pinC, pinD};
if (-1 == wiringPiSetup()) {
printf("Setup wiringPi failed!");
return 1;
}
/* set mode to output */
pinMode(pinA, OUTPUT);
pinMode(pinB, OUTPUT);
pinMode(pinC, OUTPUT);
pinMode(pinD, OUTPUT);
int i;
delayMS(50); // wait for a stable status
for (i = 0; i < 500; i++) {
rotate(pins, CLOCKWISE);
}
return 0;
}
/* Suspend execution for x milliseconds intervals.
* @param ms Milliseconds to sleep.
*/
void delayMS(int x) {
usleep(x * 1000);
}
/* Rotate the motor.
* @param pins A pointer which points to the pins number array.
* @param direction CLOCKWISE for clockwise rotation, COUNTER_CLOCKWISE for counter clockwise rotation.
*/
void rotate(int* pins, int direction) {
int i=0;
int j=0;
for (i = 0; i < 2; i++) {
if (CLOCKWISE == direction) {
for (j = 0; j < 2; j++) {
if (j == i) {
digitalWrite(pins[3 - j], 1); // 控制GPIO 2 3為高電平
digitalWrite(pins[1 - j], 1); // 控制GPIO 0 1為高電平
} else {
digitalWrite(pins[3 - j], 0); // 控制GPIO 2 3為低電平
digitalWrite(pins[1 - j], 0 );// 控制GPIO 0 1為低電平
}
}
} else if (COUNTER_CLOCKWISE == direction) {
for (j = 0; j < 2; j++) {
if (j == i) {
digitalWrite(pins[j+2], 1); // 控制GPIO 2 3為高電平
digitalWrite(pins[j], 1); // 控制GPIO 0 1為高電平
} else {
digitalWrite(pins[j+2], 0); // 控制GPIO 2 3為低電平
digitalWrite(pins[j], 0); // 控制GPIO 0 1為低電平
}
}
}
delayMS(4);
}
⑼ 89c51單片機最多能控制幾個二相四線步進電機需要同時控制
理論上不添加外設,可以像樓上說的,32個IO口接8個電機,如果接外設,可以和2樓說的一樣,接滿地球,因為有專用的控制步進電機的晶元,單片機控制電機就非常方便了,不過這樣可能就沒體會到提問者的意思。我們僅就不添加外設進行討論。
但是除了IO口的限制,還有單片機的限制,由於單片機運行指令是一條一條執行的,沒有並發機制,所以如果對多個步進電機進行同時操作,如果操作頻率並不高,可以做到幾乎同時(不是嚴格意義上的完全同時,因為指令一次只執行一條,當然兩個電機同步操作同步運轉不在討論范圍之內)。但如果接上比較精密的高速度高頻率操作的步進電機時,可能就會有問題。
通俗的說,你給步進電機發一個指令,電機會運動一個步距,在電機運動到下一個步距之後,單片機再發送下一個指令,在這兩個指令之間單片機可以去做別的事情,比如去控制另一個電機。如果電機操控精細,在最極端的情況下,兩個指令之間的間隔,還不足以執行額外的一條指令,那麼單片機就只能控制一個電機了。即使用中斷也是沒用的,第一個電機的運轉會受到影響。
所以可以控制多少個電機,要參考你單片機的晶振,和你電機到底需要什麼樣的控制,如果需要的操作並不太精細,在第一個電機的兩條指令間隔能夠有時間發送多條指令,那麼就能夠增加控制電機的數量,這個數量需要根據實際情況來看。
⑽ 數控g代碼控制機床 和 plc 控制的關系
數控機床中G代表是一種文本格式的代碼,數控系統中G格式不能夠直接被PLC辨別的,一般需要另外轉換工具或者通過I/O等方式實現與PLC的對接,而PLC本身就是用普通的PLC指令,伺服電機接受的信號有些是PLC給的,有些是數控系統給的(一般是通過G代碼控制運控卡來實現)