單片機模塊化編程
『壹』 plc編程高級思路
一、基本的硬體知識編程之前,需要了解一些基本的硬體知識,最好從硬體的選型和畫圖入手,等把輸入輸出的類型,模擬量的選型等搞清楚之後,再開始編程會簡單點。熟悉基本的硬體電路,你就會發現原來梯形圖和這些硬體電路是可以很好對應起來的。
二、了解PLC編程的方式線性編程、模塊化編程、結構化編程。對於西門子plc,以結構化編程為主,但可以使用線性編程和模塊化編程,對於結構化編程,需要有一定的結構化編程思想。
?
如果你想比較快學習西門子PLC,建議首先學習線性編程或模塊化編程。在學習過程中慢慢體會結構化編程方式。
三、實踐多學多練習,有人指導或昌虛進修學習會比自己學習相對快一些,但不是絕對。首先,買本關於PLC的書,然後手上有一個PLC,根據書上的例子,自己琢磨個小項目,實現一個功能,自己獨立做個PLC項目,西門子200系列的小PLC很適合新手學習,比較容易上手。
現在的PLC軟體也設計的非常好,如果有硬體配合更好,沒有的話安裝一個軟體,安裝一個模擬器,基本的操作熟悉起來,然後觀察PLC的輸入輸出變化情況。在程序沒有充分驗證之前,建議先斷開負載,等所有的IO,模擬量測試完成後,再帶負載運行。
四、工藝PLC編程的重點是模擬原有的作業流程,將控制過程由程序運行來完成。所以核心內容就是對工藝的程序描述。因此需要熟練掌握PLC程序語言和基本的功能實現。PLc語言分梯形圖和語句及功能圖三種。
常用的是梯形圖,這個適合用於基本邏輯描述,語句表適合對數據加工用,相對難理解些。功能圖的適合步進類型的狀態功能描述,用的不多。自學的話需要安裝相應的軟體,各個廠家的有很多不同點,但是都類似。
設備怎麼動作,需要讀取什麼信息,如何控制現場的設備,如何實現最好的控制效果,要密切了解現場的工藝。
五、基本的自動化相關知識1、過程儀表的硬體知識,包括感測器、變送器(二次儀表)和PLC本身,這是構建控制系統的基礎;比如兩線制,四線制,電流,電壓,PT100,對應的物理范圍,真空度換算等。
?
2、過程式控制制理論,包括各種控制模型的原理和應用,其中最重要的是二位調節和PID調節模型。PID調節是目前用得最廣泛的過程式控制制手段,且變化多端。需要弄清楚原理,知道如何調節參數即可。
六、良好的編程習慣1、變數命名,功能塊命名,定時器命名,最好遵循一定的原則,可讀性好;
2、熟悉軟體的基本命令的使用;
3、編寫公共的程序塊,比如閥門,電機的公用塊等;
4、合理分配主程序、子程序和定時中斷程序等;
5、合理分配數據塊,定時器,計數器,存儲器變數等,注意變數位置不能重疊。
七、軟體內部機理每個軟體都各有不同,但是基本的東西應該備迅悶都包括的:
1、了解指令的累加器,狀態字等內容。
?
2、指令的組成以及各部分的含義,無論是高級語言的ifthenelse,還是PLC的AANJNB,指令的組成部分以及表示的含義需要搞仿彎清楚;
3、了解幾種定址方式。單片機非常講究這個,對於PLC來說,多了解對於復雜的編程有幫助。
4、了解數據格式,注意高低位分布,這個太重要了,尤其是和第三方通訊的時候。
5、了解幾個常用的寄存器和存儲區域。比如DB,M,I,Q等。
『貳』 c++是哪個公司出的
C++,這個詞在中國大陸的程序員圈子中通常被讀做「C加加」,而西方的程序員通常讀做「C plus plus」,它是一種使用非常廣泛的計算機編程語言。C++是一種靜態數據類型檢查的,支持多重編程範式的通用程序設計語言。它支持過程化程序設計、數據抽象、面向對象程序設計、製作圖標等等泛型程序設計等多種程序設計風格。
美國AT&T貝爾實驗室的本賈尼·斯特勞斯特盧普(Bjarne Stroustrup)博士在20世紀80年代初期發明並實現了C++(最初這種語言被稱作「C with Classes」)。一開始C++是作為C語言的增強版出現的,從給C語言增加類開始,不斷的增加新特性。虛函數(virtual function)、運算符重載(operator overloading)、多重繼承(multiple inheritance)、模板(template)、異常(exception)、RTTI、名字空間(name space)逐漸被加入標准。1998年國際標准組織(ISO)頒布了C++程序設計語言的國際標准ISO/IEC 14882-1998。C++是具有國際標準的編程語言,通常稱作 ANSI/ISO C++。1998年是C++標准委員會成立的第一年,以後每5年視實際需要更新一次標准,下一次標准更新將是在2009年,目前我們一般稱該標准C++0x。遺憾的是,由於C++語言過於復雜,以及他經歷了長年的演變,直到現在(2004年)只有少數幾個編譯器完全符合這個標准(這么說也是不完全正確的,事實上,至今為止沒有任何一款編譯器完全支持ISO C++)。
另外,就目前學習C++而言,可以認為他是一門獨立的語言;他並不依賴C語言,我們可以完全不學C語言,而直接學習C++。根據《C++編程思想》(Thinking in C++)一書所評述的,C++與C的效率往往相差在正負5%之間。所以有人認為在大多數場合C++ 完全可以取代C語言(然而我們在單片機等需要謹慎利用空間、直接操作硬體的地方還是要使用C語言)。
『叄』 在51單片機中,定時器0中斷用模塊化方法編程
#include<reg51.h>
#defineu16unsignedint
#defineu8unsignedchar
codeu16sj_tab[]={800,400,200,100};//每個檔位對應的時間
u8setsj=0;//檔位
u16jsflag;
#defineLEDP2
codeu8led_tab[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f,};//LED亮的方式
u8ledflag=0;
/****************************************/
voidinit() //初始化函數
{TMOD=0x01;
TH0=(65536-1000)/256;
TL0=(65536-1000)%256;
EA=1;
ET0=1;
}
/*********按鍵掃描******/
sbitk=P3^2;
u8key(){
staticu8ms;
if(k==0){//檢測到0
if(ms<10)ms++;
if(ms==5)return0;//連續5次掃描都為0,
}
elsems=0;
return1;
}
/***********************************/
u8count=0; //計數
voidmain()//主函數
{
init();//系統初始化
jsflag=sj_tab[setsj];//初始載入時間
TR0=1;//定時器開始計時
while(1){
if(key()==0){//按鍵按下
if(++setsj>=4)setsj=0;//檔位+1,加到最大後歸0
}
LED=led_tab[ledflag];
}
}
/****************************/
voidtimer0()interrupt1//1ms定時器
{
TH0=(65536-1000)/256;//重載初值
TL0=(65536-1000)%256;
if(jsflag>0)jsflag--;//1ms減1
if(jsflag==0){//減到0
jsflag=sj_tab[setsj];//重載時間
if(++ledflag>=8)ledflag=0;
}
}
『肆』 單片機c語言模塊化編程,如何定義全局變數。
1.使用關鍵字extern修飾申明。
例如:
主文件中定義 int g_ival = 0;
別的文件裡面用 extern int g_ival;申明一下就可以用了。
2.模塊化編程是指將一個龐大的程序劃分為若干個功能獨立的模塊,對各個模塊進行獨立開發,然後再將這些模塊統一合並為一個完整的程序。這是C語言面向過程的編程方法,可以縮短開發周期,提高程序的可讀性和可維護性。
3.在單片機程序里,程序比較小或者功能比較簡單的時候,我們不需要採用模塊化編程,但是,當程序功能復雜、涉及的資源較多的時候,模塊化編程就能體現它的優越性了。如前面我們寫過的HT1380驅動程序、獨立按鍵掃描程序和12864程序,每一個程序都是只用一個源文件編寫就能完成,但是,當您製作一個12864液晶日歷的時候,需要用到HT1380驅動程序、獨立按鍵掃描程序和12864顯示程序,如果把這三個程序全部集中在一個源文件里,將導致主體程序臃腫且雜亂,這樣做並非不可取,只是降低了程序可讀性、可維護性和代碼的重用率。如果把這三個程序當做三個獨立的模塊放到你的主體工程進行模塊化編程,效果就不一樣了。實際上,模塊化編程就是模塊合並的過程,就是建立每個模塊的頭文件和源文件並將其加入到主體程序的過程。主體程序調用模塊的函數是通過包含模塊的頭文件來實現,模塊的頭文件和源文件是模塊密不可分的兩個部分,缺一不可。所以,模塊化編程必須提供每個模塊的頭文件和源文件。