① 什麼是編程如何編寫一個程序
設計環境 程序也就是指令的集合,它告訴計算機如何執行特殊的任務。
編寫設計環境 程序是一項系統而繁瑣的工作,它不僅需要程序設計人員具有一定的功底,更需要有良好的編程習慣和風格。良好的編程習慣和風格不僅可以使程序代碼更易於讀懂和修改,更重要的是,它可以使程序的結構更加合理,有助於提高程序的執行效率。
對我們要使用程序設計手段去解決的問題進行系統地分析,了解程序是做什麼的,要達到一種什麼樣的效果等。 結構設計:也就是對程序的整體框架進行設計,設計出我們需要使用的模塊等等,並畫出流程圖。
用戶界面設計:在此,我們要設計出用於與用戶交互的輸入輸出界面。
代碼設計:在這個步驟中,我們要進行代碼的編寫。
調試:對程序中正在發生或可能發生的各種錯誤進行處理。
維護:通俗地說,維護就是對程序進行升級,對原有錯誤進行修改。
② C#程序。功能:實現網路連接的實時監控,可是加入while循環後出現程序無法響應,「卡」的現象。
private void Form1_Load(object sender, EventArgs e)
{
var tsk = System.Threading.Tasks.Task.Factory.StartNew(() =>
{
CheckInternet();
});
}
private void CheckInternet()
{
while (true)
{
//此處加上你的邏輯
System.Threading.Thread.Sleep(1000);
}
}
這樣處理一下,不可能再卡死。
啟動一個任務,用匿名委託去跑,需要.net 4.0框架才可以,這是.net 4.0以上新特性,.net多核編程入門,任務式編程。
③ 計算機編程分為哪幾類
⑴BASIC語言
BASIC語言全稱是Beginner』s all Purpose Symbolic Instruction Code,意為「初學者通用符號指令代碼「。1964年由美國達爾摩斯學院的基米尼和科茨完成設計並提出了BASIC語言的第一個版本,經過不斷豐富和發展,現已成為一種功能全面的中小型計算機語言。BASIC易學、易懂、易記、易用,是初學者的入門語言,也可以作為學習其他高級語言的基礎。BASIC有解釋方式和編譯方式兩種翻譯程序。
⑵PASCAL語言
PASCAL是一種結構程序設計語言,由瑞士蘇黎世聯邦工業大學的沃斯(N.Wirth)教授研製,於1971年正式發表。是從ALGOL60衍生的,但功能更強且容易使用。如今,作為一個能高效率實現的實用語言和一個極好的教學工具,PASCAL語言在高校計算機軟體教學中一直處於主導地位。Pascal(B.Pascal)是十七世紀法國著名數學家,他於1642年曾發明現代台式計算機的雛型機—加減法計算機。
PASCAL具有大量的控制結構,充分反映了結構化程序設計的思想和要求,直觀易懂,使用靈活,既可用於科學計算,又能用來編寫系統軟體,應用范圍日益廣泛。
⑶通用編程語言C
C語言是美國AT&T(電報與電話)公司為了實現UNIX系統的設計思想而發展起來的語言工具。C語言的主要特色是兼顧了高級語言和匯編語言的特點,簡潔、豐富、可移植。相當於其他高級語言子程序的函數是C語言的補充,每一個函數解決一個大問題中的小任務,函數使程序模塊化。C語言提供了結構式編程所需要的各種現代化的控制結構。
C語言是一種通用編程語言,正被越來越多的計算機用戶所推崇。使用C語言編寫程序,既感覺到使用高級語言的自然,也體會到利用計算機硬體指令的直接,而程序員卻無需捲入匯編語言的繁瑣。
⑷COBOL語言
COBOL的全稱是Common Business Oriented Language,意即:通用商業語言。
在企業管理中,數值計算並不復雜,但數據處理信息量卻很大。為專門解決經企管理問題,於1959年,由美國的一些計算機用戶組織設計了專用於商務處理的計算機語言COBOL,並於1961年美國數據系統語言協會公布。經不斷修改、豐富完善和標准化,已發展為多種版本。
COBOL語言使用了300多個英語保留字,大量採用普通英語詞彙和句型,COBOL程序通俗易懂,素有「英語語言」之稱。
COBOL語言語法規則嚴格。用COBOL語言編寫的任一源程序,都要依次按標識部、環境部、數據部和過程部四部分書寫,COBOL程序結構的「部」 內包含「節」,「節」內包含「段」,段內包含語句,語句由字或字元串組成,整個源程序象一棵由根到干,由干到枝,由枝到葉的樹,習慣上稱之為樹型結構。
如今COBOL語言主要應用於情報檢索、商業數據處理等管理領域。
常用的高級程序設計語言,除了上述的幾種之外,還有很多,如以英國著名詩人拜倫(G.N.G.Byron)的獨生女艾達·拜倫(Ada Byron)的名字命名的軍用語言Ada,深受中、小學生歡迎的語言LOGO等等。
④ 對於一個較為復雜的自動化任務,PLC編程的思路是什麼,應該怎樣考慮
根軟體設計一樣
根據需要硬體配置(plc點數,IO餘量)
程序設計需要先要規劃(數據寄存器,中間繼電器分配,IO分配),程序結構框架,單元功能實現,整體程序調試,關鍵是形成統一的編程風格,
觸摸屏程序設計同上(做到功能和結構明了,界面簡潔,操作方便)
程序做大了,程序有條理對你和維護人員都方便,PLC程序超過5K,就很少人有耐性看下去了(除非帶註解,功能分塊實現等)
⑤ 機器人的主要編程方式有哪些
焊接機器人作為一種可編程裝置,按照其編程方式可分為示
教編程、離線編程和自主編程三種。
(1)示教編程
示教編程是指操作人員通過人工手動的方式,利用示教板移動機器人末端焊槍跟蹤焊縫,適時記錄焊件焊縫軌跡和焊接工藝參數,機器人根據記錄信息採用逐點示教的方式再現焊接過程。這種逐點記錄焊槍姿態再重現的方法需要操作人員充當外部感測的角色,機器人自身缺乏外部信息感測,靈活性較差,而且對於結構復雜的焊件,需要操作人員花費大量的時間進行示教,編程效率低。當焊接環境參數發生變化時,需要重新示教焊接過程,不能適應焊接對象和任務變化的場合,焊接精度差
(2)離線編程
離線編程採用部分感測技術,主要依靠計算機圖形學技術,建立機器人工作模型,對編程結果進行三維圖形學動畫模擬以檢測編程可靠性,最後將生成的代碼傳遞給機器人控制櫃控制機器人運行。與示教編程相比,離線編程可以減少機器人工作時間,結合CAD技術,簡化編程。國外機器人離線編程技術研究成熟,各工業機器人產商都配有各自機器人專用的離線編程軟體系統。比如ABB的Robot studio模擬編程軟體,既可以做模擬分析又可以離線編程。離線編程能夠構造模擬的焊接環境,依據工況條件,應用CAD技術構造相應的夾具、零件和工具的幾何模型。但缺乏真實焊接環境的感測數據,所構造的幾何模型對真實焊接目標也只是部分的描述,在焊接過程中必須做出偏差調節,因此離線編程難以描述真實的三維運動,不是特別可靠,在焊接過程中必須進行實時的偏差控制以滿足焊接工藝的要求
(3)自主編程
自主編程技術是實現機器人智能化的基礎。自主編程技術應用各種外部感測器使得機器人能夠全方位感知真實焊接環境,識別焊接工作台信息,確定工藝參數。
自主編程技術無需繁重的示教,減少了機器人的工作時間和工人的勞動時間,也無需根據工作台信息實時對焊接過程中的偏差進行糾正,大大提高了機器人的自主性和適應性而成為未來機器人發展的趨勢。
目前,常用的感測器有視覺感測器、超聲波感測器、電弧感測器、接觸式感測器等使機器人具備視覺、聽覺和觸覺等。
機器人的視覺感測器主要應用電荷藕合器件(CCD一一Charged Coupled Device)攝像機模擬人眼獲取外部信息,具備與工件無接觸、抗電磁干擾、檢測精度高、獲取信息豐富等優點。超聲波感測器價格低廉、測距方向性好,但是超聲波易受焊接雜訊、保護氣流因素的干擾而衰減,影響測量精度。電弧感測器則充分利用焊接過程的電弧參數對焊縫進行測量,不需要附加其他感測器就可以計算出焊槍與工件之間的距離,廣泛應用於對稱坡口焊縫如V型焊縫的焊接,對於復雜焊縫無良好檢測能力。接觸式感測器依靠探針沿焊縫運動,檢測探針的偏移得到焊槍與焊縫之間的偏差,感測器價格低廉、原理簡單、方便實現。但是隨著探針磨損和變形的加劇,檢測精度逐步降低,對於復雜焊縫以及高速焊接場合檢測能力一般。
對比而言,視覺感測器採集自然光焊縫圖像、激光結構光圖像和電弧光圖像,激光感測器單色性好、亮度高,對焊接過程的視覺採集起到很好的輔助作用,對復雜焊縫檢測能力良好。因此,具有視覺檢測能力的焊接機器人更能適應環境變化,實現機器人智能化。
⑥ 為什麼說 Thinkphp 不是純面向對象的框架
面向對象是一種思想,而不只是單純對類的實例化。
ThinkPHP屬於輕量型的任務式框架,相對於函數式編程有更易於維護的過程封裝,可以很好地把很多任務進行分解分類存放於Model、Controller、View以及擴展Library當中,但它還是不是屬於一個有機體,只是對函數式編程的一種優化
⑦ 為什麼thinkphp不是面向對象
面向對象是一種思想,而不只是單純對類的實例化。
ThinkPHP跟Codeigniter在我看來都是屬於輕量型的任務式框架,相對於函數式編
程有更易於維護的過程封裝,可以很好地把很多任務進行分解分類存放於Model、Controller、View以及擴展Library當中,但它還是不
是屬於一個有機體,只是對函數式編程的一種優化。
你問我滋不滋池呢,我當然滋池啦!這類框架非常適合初學者入門,同時也可以很快速地完成我們的開發任務。
⑧ 如何編寫一個最簡單的嵌入式操作系統簡單任務調度
最簡單的任務調度
以現代觀點而言,一個標准個人電腦的OS應該提供以下的功能:
進程管理(Processing management)
內存管理(Memory management)
文件系統(File system)
網路通訊(Networking)
安全機制(Security)
用戶界面(User interface)
驅動程序(Device drivers)
但一個最簡易的嵌入式操作系統,所包含的可以少很多。最簡單的操作系統,通常都是圍繞著進程管理展開的。所以,現在可以嘗試下一個最簡單的「操作系統」,只能做簡單地進行人工任務調度。為了簡單起見,使用最簡單的AT89S52運行程序:內存小的數的清位元組數,外設只有幾個IO,結構簡單,很方便操作系統的編寫。
1.裸跑的任務和操作系統中的任務
相信大家都很熟悉,用單片機裸跑,程序一般都寫成如下一個大的while死循環:
void main (void)
{
while (1) /* repeat forever */
{
do_something();
}
}
或者又像:
void main (void)
{
while (1) /* repeat forever */
{
do_something1();
do_something2(); //Catch data input
do_something3();
.
.
.
}
}
這里每一個函數完成一個獨立的操作或者任務,這些函數(也可以叫任務)以一定的順序執行,一個接著一個。這里的任務切換,單純就是執行完一個,再執行另一個。不斷循環。
但是,一旦增加更多的任務,那麼執行的順序就變成了一個問題。在以上的例子中,一旦函數do_something1()運行了太長的時間,那麼主循環就需要很長的時間才可以執行到do_something2()。如果do_something2()是接收輸入數據的函數,數據就很有可能丟失。當然,我們也可以在循環中插入更多的do_something2()函數調用,或者把do_something1()拆分成幾個比較小的部分。但這就比較考驗編程者功力了,如果任務太多,編寫程序將成為一個相當復雜的問題。
這時,一個幫助你分配各個任務運行時間的操作系統就很有必要了。在操作系統中,任務一般形如:
void check_serial_io_task (void) _task_ 1
{
/* This task checks for serial I/O */
}
void process_serial_cmds_task (void) _task_ 2
{
/* This task processes serial commands */
}
void check_kbd_io_task (void) _task_ 3
{
/* This task checks for keyboard I/O */
}
任務之間的切換已經交給操作系統完成了,熟悉的main函數和while(1)一般已經隱去不見了。
2.如何做任務切換
還是說單片機裸跑,裸跑時,把C語言文件編譯成匯編,可以看到,是用CALL指令去調一個任務函數,執行完畢後,用RET退出。但是這樣的方法用在切換頻繁的操作系統中,就無疑不適合了,因為我們無法做到預知什麼時候退出,即調用RET。
任務切換,看起來很玄,實際上說白了,就是改變程序指針PC的值。前邊寫的_task_ 1,_task_ 2,編譯以後,都存儲在ROM中。把PC指向這段ROM,他就執行了,想切換另一個任務,就用PC指向那個任務。就這么簡單。這樣說,是不是就是PC=一個地址就可以了?不行,因為絕大多數單片機,是不允許給PC寄存器直接賦值的。那樣寫,編譯器會報錯的。一般操作系統,都用以下方法改變PC的值:
unsigned char Task_Stack1[3];
Task_Stack1[1] = (uint16) Task_1;
Task_Stack1[2] = (uint16) Task_1 >> 8;
SP = Task_Stack1+2;
}//編譯成RET
PC的值不能直接改變,但是可以變通,通過其他方式改變PC的值。一個函數執行完畢,總是要改變PC的。這是,PC是如何改變的呢?函數執行前,PC被壓入了堆棧中。函數結束,要調用的是RET指令,也就是PC出棧。壓在堆棧中的原始PC值,這時從堆棧中彈出,程序又回到了原來的位置。這里就是模仿這一過程:模擬一個堆棧的結構,把要執行的函數入口地址(C語言中的函數名)裝入其中,把SP指向這個自己創建的堆棧棧頂。一個RET指令,就將[SP]和[SP-1]彈到PC中了。就這樣,PC改變到了要執行的函數入口地址,開始執行目標函數。(AT89s52的PC為16位,壓到堆棧中是兩個位元組)
3.一個最簡單的人工調度系統
應用上面的思想,寫一個最簡單的3任務人工調度系統。代碼如下:
typedef unsigned char uint8;
typedef unsigned int uint16;
#include
sbit led0 = P0^0;
sbit led1 = P0^1;
sbit led2 = P0^2;
uint8 Cur_TaskID; //當前運行的任務號
uint8 Task_Stack0[10]; //0號任務的堆棧
uint8 Task_Stack1[10];
uint8 Task_Stack2[10];
uint8 Task_StackSP[3]; //3個堆棧的棧頂指針
//Task_StackSP[0] -> Task_Stack0
//Task_StackSP[1] -> Task_Stack1
//Task_StackSP[2] -> Task_Stack2
void Task_0(); //任務0
void Task_1(); //任務1
void Task_2(); //任務2
void Task_Scheling(uint8 Task_ID); //任務調度
void main (void)
{
Task_Stack0[1] = (uint16) Task_0; //按照小端模式,任務函數入口地址裝入任務堆棧
Task_Stack0[2] = (uint16) Task_0 >> 8;
Task_Stack1[1] = (uint16) Task_1;
Task_Stack1[2] = (uint16) Task_1 >> 8;
Task_Stack2[1] = (uint16) Task_2;
Task_Stack2[2] = (uint16) Task_2 >> 8;
Task_StackSP[0] = Task_Stack0;
Task_StackSP[0] += 2; //剛入棧兩個元素。這里取得棧頂地址,即Task_Stack0[2]
Task_StackSP[1] = Task_Stack1;
Task_StackSP[1] += 2;
Task_StackSP[2] = Task_Stack2;
Task_StackSP[2] += 2;
Cur_TaskID = 0;
SP = Task_StackSP[0]; //SP取得0號任務的棧頂地址
}//利用main的返回指令RET,使PC取得0號任務入口地址
//任務調度函數
void Task_Scheling(uint8 Task_ID)
{
Task_StackSP[Cur_TaskID] = SP;
Cur_TaskID = Task_ID;
SP = Task_StackSP[Cur_TaskID];
}
//0號任務函數
void Task_0()
{
while(1)
{
led0 = 0;
Task_Scheling(1);
}
}
//1號任務函數
void Task_1()
{
while(1)
{
led1 = 0;
Task_Scheling(2);
}
}
//2號任務函數
void Task_2()
{
while(1)
{
led2 = 0;
Task_Scheling(0);
}
}
代碼要做的,就是3個任務的順序執行。任務調度函數Task_Scheling的思想也即如前面所述。在Keil中可以運行代碼,可以看到,程序在3個任務中順序執行了。
⑨ 面向任務開發
面向任務開發(Task-Oriented Development)是繼面向對象和基於構件開發後,又一軟體開發新范型。由道侖軟體公司的熊軍民於2007年首次提出,並成功在該公司的道侖數字神經系統平台ROAD上實現。
面向任務開發主要用於業務領域的應用開發。
面向任務開發的核心理念是以業務為中心,將所有的業務活動用普通用戶能理解的方式包裝成任務。任務是一個自包含的對象,任務既包含業務邏輯,同時又是業務邏輯的組成單元,也是可單獨執行和管理的業務單元。企業以任務為中心組織完成任務所需的各種資源。
相對於基於構件開發(CBD),面向任務開發(TOD)具有如下優勢:
1.任務直接反映和表達業務需求,一般用戶都可以理解和操作,不需要技術人員的參與,這就消除了業務需求與軟體實現之間的鴻溝,能更快更好地滿足用戶的需求。
2.任務比目前業界流行的「基於構件開發」中的構件更「軟」和更「輕」。構件是物理上存在的程序代碼,需要軟體開發人員編程實現,而任務是用戶就可以定義的對象,因此更容易改變,改變花費的代價更小,更能適應業務的變化。
3.由於任務封裝了業務活動的所有細節,大大簡化了業務建模的復雜度。
4.業務層面的可重用性強。定義好的任務可以很容易地放到別的任務中,就象搭積木一樣。
5.由於任務可調用或引用Web服務,用戶可以透明地訪問網路上的Web服務,不管它們位於何處,任務將網路上的資源無縫地集成起來了。
6.由於各種業務都是基於相同的單元(任務)構建並在同一種平台上運行,它們之間的「集成」將不會有任何障礙,業務流程的集成問題將成為歷史。
7.用戶使用TOD開發業務應用比使用CBD開發所需的成本和費用要小得多。
8.由於用戶可自行建立、改變和管理業務流程,信息系統的建設完全由用戶所掌控。
面向任務開發將把信息系統的建設帶入一個用戶主導的時代。