子程序范文
時間:2023-04-09 08:11:39
導語:如何才能寫好一篇子程序,這就需要搜集整理更多的資料和文獻,歡迎閱讀由公務員之家整理的十篇范文,供你借鑒。
篇1
本文簡介了子程序編程的基礎知識,以實例形式論述了子程序在模具平面、凸模和多腔銑削加工編程中的具體應用。實踐表明,使用子程序編程解決了因平面銑削走刀次數多、分層銑削層數多、多腔銑削腔數多而導致的無法進行的手工編程的問題,并能夠克服數控自動編程程序可讀性差、柔性差的缺點,縮短編程時間和工作量。
數控編程是模具加工的關鍵環節,編制高質量的加工程序對工件質量、效率和成本有重要的影響。在模具加工中,經常會遇到平面銑削走刀次數多、分層銑削層數多、多腔銑削腔數多而導致的手工編程繁瑣問題,甚至若不采用子程序無法進行手工編程的問題。因此,本文探討利用子程序以簡化模具加工手工編程具有重要的意義。
一、FNUAC 0i 系統子程序編程基礎
1. 子程序的概念
數控機床的加工程序分為主程序和子程序兩種。主程序是一個完整的零件加工程序,或是零件加工程序的主體部分,它和加工零件是一一對應的關系。在編制零件加工程序中,如果其中有些加工內容完全相同或相似,為了簡化程序,可以把程序中某些重復出現的程序單獨抽出來,按一定格式編成一個單獨的程序,以供調用,這個程序即是子程序。
2. 子程序的調用
在FANUC 0i 系統中,子程序的調用可通過M98 指令進行,且在調用格式中將子程序的程序號地址O 改為P,其常用的子程序調用格式為:M98 P L。
其中地址P 后面的四位數字為子程序號,地址L 的數字表示重復調用的次數。若只調用1 次子程序,在地址L及其后的數字可省略不寫。
3. 子程序的嵌套
在編程時讓程序調用另一個子程序,這一功能稱為子程序的嵌套。當主程序調用子程序時,該子程序被認為是一級子程序,為一級嵌套,一級子程序再調用子程序時,該子程序被認為是二級子程序,為二級嵌套,依次類推,FANUC 0i 系統中,子程序可以嵌套4 級。
主程序在運行過程中若需要執行某一級子程序,通過M98 調用指令來調用該一級子程序,如果該一級子程序需要執行某二級子程序,也是通過M98 指令來調用該二級子程序,依次類推。子程序返回時與調用次序相反,最終一級子程序運行結束后又返回到主程序調用程序段處,繼續執行下面的程序段。
二、子程序的編程應用
1. 模具平面的編程
模具主要是由板類零件組成的,平面是典型加工表面,下面以某模板平面長、寬尺寸為300×250為例進行銑削編程。
(1)編程分析。
刀具選用直徑為30mm 的平底立銑刀,以刀位點進行編程,銑削平面走刀路線由單向行切和雙向行切,為保證加工表面質量采用單向不對稱逆銑行切,步距一般為刀具直徑的0.85 倍,故步距取26mm,工件寬度為250 除以步距26,得循環次數為9.6 次,而次數須為整數,因此,循環走刀次數確定為10 次。
(2)確定編程原點,設計走刀路線。
編程零點確定在工件上表面中心,所設計的每次走刀路線如圖1 所示,即P1 P2 P3。
(3)確定基點坐標值。
考慮刀具半徑15mm、刀具X 軸方向讓刀距離3mm和步距26mm,采用CAD 尺寸標注法確定P1 點絕對坐標為P1(-18,11),P2、P3 點增量坐標為P1(336,0)、P2(-336,26)。
(4)編寫加工程序源代碼。
綜合上述分析及設計,編寫參考子程序如O6001 所示,編寫主程序如O1 所示,根據加工平面尺寸只需修改所編程序中基點P1、P2、P3 坐標值,即可用于加工。
O6001;(子程序名)
G90G00Z5;(切換為絕對編程,刀具快速下降到Z坐標值5mm 處)
G01Z-1.5F50;(刀具切削進給至Z 值-1.5mm 處)
G91G01X336Y0F120;( 切換為增量編程,刀具切削進給從P1 到P2 點)
G90G00Z50;(切換為絕對編程,刀具快速抬刀至Z坐標值為50mm 處)
G91G00X-336Y26;(切換為增量編程,刀具快速至下一個下刀點)
M99;( 子程序結束)
O1;( 主程序名)
G91G28Z0;(刀具Z 軸回零)
G54G90G00X-18Y11S600M03;(建立XY 工件系,刀具快速至下刀點,主軸正轉,轉速600r/min)
G00Z50;(刀具快速至Z 坐標值50mm 處)
M98P6001L10;(調用O6001 子程序10 次)
G00Z200;(刀具快速至Z 坐標值200mm 處)
M30;(主程序結束)
2. 模具零件的分層銑削編程
某模具零件圖如圖2 所示,毛坯長、寬、高尺寸為:100×100×110。
(1)編程分析。
在模具實際加工中,特別高速加工,為減小切削抗力,避免機床負載的劇烈變化,刀具每次的切削深度必須限定在一定范圍內。使用子程序編程可實現刀具Z 向的分層加工。一般要求加工高度和每層切削深度為整數倍關系,該沖模型芯高80mm,確定每層切削深度2mm,則需調用子程序40 次。刀具選用直徑16mm 的合金刀具。
(2)確定編程零點,設計走刀路線。
編程零點確定在工件上表面中心,設計走刀路線時注意以下4 點:①走刀路線下刀點和返回點盡量重合,以簡化編程;②精加工刀具要切向切入切出工件,防止接刀痕; ③ 刀具XY 下刀點盡量在工件以外, 必要時預加工工藝孔, 保護刀具; ④ 走刀路線盡量短, 有利于基點坐標計算。所設計的每層走刀路線如圖3 所示,即P P1 P2 P3 P4 P5 P6 P2 P7 P。
(3)確定基點坐標值。
圖3 中的刀具每層走刀路線圖為精確設計,使用CAD軟件查詢法順次確定基點坐標為:P(0,-60)、P1 (12,-52)、P2(0,-40)、P3(-30,-40)、P4(-30,10)、P5(30,10)、P6(30,-40)、P7(-12,-52)。
(4)編寫加工程序源代碼。
基于上述分析及設計,編寫參考子程序如O6002 所示,編寫主程序如O2 所示,以供參考。值得注意的是:①分層銑削子程序編程Z 向須用G91 編程;②主程序中程序段G01Z0F20,刀具須切削進給至Z 坐標值0 處,才能保證工件的加工高度尺寸。
O6002;(子程序名)
G91G01Z-2F20;(刀具每次切削深度-2mm)
G90G41G01X12Y-52D01F200;( 刀具從P 點切削進給到P1 點,建立刀具半徑左補償)
G03X0Y-40R12;( 刀具從P1 點切削進給到P2 點,圓弧切向切入工件)
G01X-30;( 刀具從P2 點切削進給到P3 點)
G01Y10;( 刀具從P3 點切削進給到P4 點)
G03X30R30; ( 刀具從P4 點切削進給到P5 點)
G01Y-40; ( 刀具從P5 點切削進給到P6 點)
G01X0; ( 刀具從P6 點切削進給到P2 點)
G03X-12Y-52R12;( 刀具從P3 點切削進給到P7 點,圓弧切向切出工件)
G40G01X0Y-60F1000;( 刀具從P7 點切削進給到P 點,取消刀具半徑左補償)
M99; ( 子程序結束)
O2;( 主程序名)
G91G28Z0;( 刀具Z 軸回零)
G54G90G00X0Y0S2000M03;( 建立工件系,刀具快速至下刀點P,主軸正轉,轉速2000r/min)
G00Z50;( 刀具快速下降到離工件頂面50mm)
G00Z5;( 刀具快速下降到離工件頂面5mm)
G01Z0F20;( 刀具切削進給到Z 坐標值0 處)
M98P6002L40;( 調用O6002 子程序40 次)
G00Z50;( 刀具快速抬刀至離工件頂面50mm)
G00Z200;( 刀具快速抬刀至離工件頂面200mm)
M30;( 主程序結束)
3. 模具的多腔銑削編程
假設刀具一次能加工深度為10mm,對圖4 所示零件各腔進行精銑編程。
(1)編程分析。
刀具選用直徑8mm 的鍵槽銑刀,零件各腔為精加工,為避免刀痕,設計走刀路線時,刀具圓弧切向切入切出工件,編寫輪廓子程序使用G91 增量編程,實現工件輪廓形狀編程與位置的無關。
(2)確定編程零點,設計走刀路線。
編程零點確定在工件上表面中心, 所設計的走刀路線如圖5 所示, 各腔的加工順序為①②③④⑥⑦⑧⑨,所設計的每腔走刀路線為O A1 A2 A3 A4 A5 A6 A2 A7 O。
(3)確定基點坐標值。
為使刀具加工形狀與其位置無關,需采用G91 方式編程,因此,使用CAD 尺寸標注法確定各基點坐標增量坐標為:O(0,0)、A1(5,5)、A2(-5,5)、A3(-15,0)、A4(0,-20)、A5(30,0)、A6(0,20)、A7(-5,-5)、O(5,-5)。
(4)編寫加工程序源代碼。
根據以上分析及設計,編寫子程序如O6003 所示,編寫主程序如O3 所示,以供參考。
O6003;(子程序名)
G00Z5;(刀具快速下降到離工件頂面5mm 處)
G01Z-10F20;(刀具切削進給到切削深度-10mm)
G91G41G01X5Y5D01F60;( 切換為增量編程,建立刀具半徑補償左刀補,刀具從O 點進給到A1 點)
G03X-5Y5R5; ( 刀具從A1 點進給到A2 點)
G01X-15Y0,R5; ( 刀具從A2 點進給到A3 點)
G01X0Y-20,R5; ( 刀具從A3 點進給到A4)
G01X30Y0,R5; ( 刀具從A4 點進給到A5 點)
G01X0Y20,R5; ( 刀具從A5 點進給到A6 點)
G01X-15Y0;( 刀具從A6 點到進給A2 點)
G03X-5Y-5R5; ( 刀具從A2 點到進給A7 點)
G40G01X5Y-5F500;( 取消左刀補,刀具從A7 點進給到O 點)
G90G00Z50;( 切換為絕對編程,刀具快速抬刀至離工件頂面50mm)
M99;( 子程序結束)
O3;( 主程序)
G91G28Z0;(刀具Z 軸回零)
G54G90G00X0Y0S800M03;(建立工件坐標系,刀具快速定位至第1 個腔體中心)
G00Z50;( 刀具快速下降到離工件頂面50mm)
M98P6003L1;( 調用O6003 子程序1 次)
G00X35Y0;( 刀具快速至第2 個腔體中心)
M98 P6003L1; ( 調用O6003 子程序1 次)
……(刀具順次定位至腔中心,調用子程序加工)
G00X35Y-25; ( 刀具快速至第9 個腔體中心)
M98 P6003L1;( 調用O6003 子程序1 次)
G00Z200;( 刀具快速抬刀至離工件頂面200mm)
M30;( 主程序結束)
篇2
關鍵詞:子程序調用 M98、M99指令 簡化編程
中圖分類號:TG519.1 文獻標識碼:A 文章編號:1007-9416(2014)02-0014-01
Abstract:the numerical control lathe in guangzhou M98instructions for subroutine calls,and from the subroutine return instructions M99(end with M99)come in pairs. Through examples on how to use programming subroutineM98,M99.
Key Words:Subroutine call M98,M99instruction Simplify programming
數控車床的編程方法有自動編程和手動編程,而手動編程用得比較多。手動編程時有很多方法和技巧,其中運用子程序來編程就是一種方法。在數控車床的加工編程中利用子程序編程可以簡化編程、節約數控統內部資源、提高加工效率、降低生產成本。具有很靈活實用的特點,在實際的加工生產中具有重要的意義。
1 子程序的定義與作用
在編制加工程序時,如果需要加工的零件有些加工部位完全相同或相似,為了簡化程序,可以把這些重復的程序段單獨列出,并按一定的格式編寫成子程序。主程序在執行過程中如果需要某一子程序,通過調用指令來調用該子程序,子程序執行完后又返回到主程序,繼續執行后面的程序段。另外在一次定位裝夾中需要加工多個相同的零件時,也可以利用子程序來編程實現循環加工,以達到節省加工時間和提高加工效率的目的。
廣州數控車床系統的M98指令用于子程序調用,通常與從子程序返回指令M99(以M99結束)成對出現。
M98指令格式:
M98 P
被調用的子程序號(0000~9999)。當調用次數未輸入時,子程序號的前導0可省略;當輸入調用次數時,子程序號必須為4位數;調用次數(1-999),調用1時,可不輸入。指令功能:當前程序段的其它指令執行完成后,系統不執行下一程序段,而是去執行P指定的子程序,子程序最多可執行999次。
從子程序返回M99
指令格式:M99 P
返回主程序執行的程序段號(0000~9999),前導0可以省略。
2 利用子程序指令M98、M99編程加工實例
采用廣州GSK980TB數控系統車床加工零件(如圖1所示)。該零件的毛坯材料采用φ20的PVC棒料。
2.1 對該零件進行加工工藝分析
由于該零件結構比較簡單,尺寸精度要求不高,所以加工時只需要兩把車刀,一把外圓車刀,一把切斷刀(刀寬為2mm)。如果采用單件加工的方法編程加工,用于對刀和裝夾、換刀的輔助加工時間大大增加,降低生產效率;如果采取夾位不變,一次裝夾就可以加工多個零件。這樣,我們可以利用子程序指令來編程進行加工,既節省時間、材料,又提高了加工效率。
2.2 利用子程序指令M98、M99編制該零件的加工程序
O0001(主程序)
M03 S1
GOO X100 Z50
T0101(外圓車刀)
G00 X22 Z2
GO1 X18 F0.2 G99
Z-81
G00 X20
Z0
M98 P80002
G00 X100 Z50
M30
O0002(子程序)
G01 X18 F0.2 G99
G02 W-8 R10
G00 X100 W58
T0202 (切斷刀,刀寬2mm)
G00 X20 W-60
G01 X0 F0.1
X20 F0.2
G00 X100 W50
T0101
G00 X20 W-50
M99
3 子程序在數控車床實訓課中的應用
學生在課室上編程課時總會覺得枯燥乏味,很難理解和掌握子程序的編制及運用。因此我們要充分利用實訓課的時間讓學生自己動手編程和操作,進一步加深了解子程序的作用。由于學校的設備有限,在上數車實訓課時,我們可以把學生分為兩組。一組學生用單件加工的方法編程加工(上圖所示的零件);另一組學生用子程序指令來編程加工(上圖所示的零件)。兩組同一時間開始,每組加工8件。加工完畢后,通過比較,看看哪一組做得更快、更好。讓學生們自己作對比和總結,這樣做不但使他們對M98、M99指令有更深刻的認識和理解,而且能夠提高他們學習數控編程的興趣,進一步提高他們手工編程的能力和動手操作的能力。
4 結語
綜上所述,利用子程序編程加工在實際應用中,執行一次加工程序可以加工多個零件,這樣既節省了系統資源,又節省了每個零件的加工時間,提高了加工效率。而且在數控車床實訓教學中,通過這樣簡單實用的例子,讓學生在“做中學,學中做”,最大限度地激發學生的學習主動性、積極性和創新意識,把實際的工作狀態和課堂教學融為一體,從而加強了實訓效果,提高了學生的綜合素質。
參考文獻
[1]GSK980TB車床數控系統.使用手冊(第一版),2006.
篇3
引言
“匯編語言與微機原理”是計算機科學與技術專業的必修基礎課程。該課程融合了匯編語言程序設計和微機原理與接口技術兩門課程的內容,要求學生重點掌握匯編語言程序設計的方法和微型計算機系統各個部件的工作原理。掌握匯編語言是掌握微機原理的基礎,因為實現和驗證微機系統各個部件的工作過程需要用到匯編語言,并且更高層次的綜合系統設計也離不開匯編語言。
匯編語言與微機原理課程中,匯編語言子程序設計這部分內容的知識掌握起到承上啟下的作用。其“承上”的作用體現在:作為一個獨立的模塊,子程序設計涵蓋之前所學的匯編語言的指令系統、偽指令、數據類型及三種基本控制結構(順序結構、分支結構和循環結構)。其“啟下”的作用體現在:①后續接口芯片的功能應用基本上都是以子程序的形式實現;②中斷系統中的中斷服務程序就是一種子程序,中斷系統是微機系統中非常重要的組成部分,可以說不理解中斷系統就不能理解計算機的工作原理[1],而掌握子程序設計是本文由收集整理理解和應用中斷系統的基礎之一;③子程序設計是開發大型程序的基礎,對于培養編程能力十分重要[1]。因此,匯編語言子程序設計這部分內容無論在教學上還是在實驗中都必須給予足夠的重視。但目前鮮有文獻涉及這方面的問題,本文針對目前匯編語言與微機原理課程中匯編語言子程序實驗設計中普遍存在的問題給出相應的對策,并給出一個實驗設計實例。lw881.com
1 實驗設計存在的問題及對策
⑴ 實驗學時安排不夠。據粗略調查,大多數院校匯編語言與微機原理課程的實驗學時為18個學時[1],有一些院校還附加一個課程設計。對于這18個實驗學時普遍的分配方式如表1所示。
表1 匯編語言與微機原理實驗項目及學時安排表
[類別\&項目\&學時\&匯編語言程序設計部分
(12學時)\&匯編語言上機過程及debug的使用\&2\&dos系統功能調用\&2\&三種基本程序結構\&6\&子程序\&2\&接口芯片部分
(6學時)\&可編程中斷控制器8259\&2\&并行接口芯片8255\&2\&可編程定時/計數器8253\&2\&]
從表1可以看出,子程序實驗僅安排了2個學時,學時太少,難以取得良好的訓練效果,可以考慮將實驗“dos系統功能調用”融合到“三種基本程序結構”中,騰出2個學時給子程序實驗,有助于學生深刻全面的理解子程序的相關知識。
⑵ 實驗內容“片面”。對于匯編語言子程序實驗,大多數院校的實驗內容只涉及到兩方面的知識:①子程序的類型(近子程序和遠子程序);②三種參數傳遞方式(寄存器傳遞、內存單元傳遞、堆棧傳遞)[2]。這并不全面,與子程序密切相關的知識應該還包含宏和中斷服務程序,所以有必要在實驗中安排相應的內容讓學生理解子程序與宏的區別,以及如何把一個子程序“注冊”為中斷服務程序,然后通過軟中斷指令(int n)調用該程序的過程,這樣做有助于后面對中斷系統的學習。中斷是學習匯編語言的重點、難點部分,能否真正掌握匯編語言對中斷的理解和掌握至關重要,中斷也是匯編語言的魅力所在[3]。
2 實驗設計的一個實例
針對前面提到的問題,在此給出一個匯編語言子程序實驗設計實例,主要內容如下:
⑴ 實驗學時:4學時。
⑵ 實驗目的:
① 掌握子程序的編寫及調用方法;
② 掌握近子程序和遠子程序的區別;
③ 掌握三種參數傳遞方式的差別;
④ 掌握子程序與宏的區別;
⑤ 掌握編寫中斷服務程序的方法以及通過軟中斷指令。
⑶ 實驗內容:
① 編寫一個近子程序實現將一個字節的數據以十六進制的形式輸出,采用寄存器參數傳遞方式;
② 編寫一個遠子程序,功能與①相同,采用堆棧參數傳遞方式;
③ 變量str中存有一個以’$’作為結束符的字符串,編寫一個子程序實現將str中所有的大寫字母全部改為小寫字母,采用內存單元參數傳遞方式;
④ 用宏實現①中的功能;
⑤ 編寫一中斷服務程序實現①中功能。提示:利用dos系統功能調用的35h號功能和25h號功能提取和設置中斷向量,具體如表2所示。
表2 dos系統功能調用的35h號和25h號功能說明[4]
[功能號\&功能\&入口參數\&出口參數\&25h\&設置中斷向量\&ds:dx=所設置中斷向量的段基址:偏移量al=欲設置中斷向量所對應的中斷號\&無\&35h\&取中斷向量\&al=欲取中斷向量所對應的中斷類型號\&es:bx=取得的中斷向量的段基址:偏移量\&]
該實驗設計實例特點鮮明,首先實驗所要求完成的功能都是匯編語言中簡單而又常用的功能,這一方面可以使學生不必花太多功夫在算法實現上,而把主要精力集中在子程序本身的語法上,另一方面實驗中所完成的程序在后續的實驗中可以直接調用,減輕了學生在后續實驗中的負擔,同時加強了各實驗之間的有機聯系。我們的實驗內容涵蓋了與子程序相關的各種知識,特別是子程序與中斷服務程序的關系,這也是本實驗設計的創新之處。
篇4
關鍵詞:PLC;順序控制;SFC;梯形圖
中圖分類號:TP312文獻標識碼:A文章編號:16727800(2012)007002601
作者簡介:劉景東(1980-),男,山東菏澤人,鄂東職業技術學院機電工程系教師,研究方向為計算機控制技術、電氣自動化生產線安裝與調試;張蓮花(1982-),女,山東菏澤人,鄂東職業技術學院機電工程系教師,研究方向為計算機控制技術、PLC教學;孫寶蘭(1982-),男,山東菏澤人,鄂東職業技術學院機械工程系教師,研究方向為數控加工技術。
0引言
PLC編程語言很多,其中梯形圖是PLC的一種主要編程語言,設計好梯形圖程序是用好PLC的關鍵。對于一些簡單的程序,許多人采用經驗法,這種方法沒有普遍的規律可循,具有很大的試探性和隨意性。對于復雜的控制系統, 需要大量的中間單元來完成記憶、互鎖、聯鎖等功能。由于要考慮的因素很多,它們往往又交織在一起,分析起來非常困難, 并且容易遺漏掉一些應加以考慮的問題。修改某一局部電路時, 可能對系統產生意想不到的影響。另外,用經驗法設計程序較為復雜,同行也難以讀懂,更不用說維修人員了, 這給PLC控制系統的維護和改進帶來了很大的困難。本文采用SFC圖進行PLC編程來解決以上問題。
1順序功能圖的基本約定
順序功能圖簡稱SFC圖。所謂順序控制設計就是按照生產工藝預先規定的順序,在各個輸入信號的作用下,根據內部狀態和時間順序,在生產過程中各個執行機構自動有順序地進行操作。
SFC圖主要包含3要素:狀態、動作和切換。在畫SFC圖時,一定體現出這3個要素,這樣才是一個完整的系統流程圖,如圖1所示。
說明:①SFC圖的初始步用雙方框來表示;②在SFC圖中,步0狀態S0.0轉換步1狀態S0.1時,必須保證T100成立,才能轉移S0.1,同時必須保證S0.0狀態復位,也就是說對下步狀態轉換時,不僅保證它們之間的切換條件成立,而且必須保證上一步的狀態為開啟狀態,才允許切換;③每步的動作必須有當前步作為驅動條件,即S0.1—Q0.1、T101動作的輸入條件。
2基于SFC圖的二種編程方法
2. 1S/R切換編程法
案例一:設計3盞燈的依次循環閃爍控制,要求每盞燈亮1秒。根據控制要求,繪出本程序的SFC圖,并用“切換編程法”編寫梯形圖程序。設計思路是建立子程序的設計方法,把單獨具有某一功能的程序塊放在一起,作為一個子程序來處理,分別建立SBR_0初始化、SBR_1步切換//定時、SBR_3步定時3個子程序,如圖2所示。
2.2步進編程法
利用步進開始指令SCR、步進轉移指令SCRT和步進結束指令SCRE,讓每一步的負載驅動、轉換條件和轉換目標均在一步之內完成。針對案例一的控制要求,采用步進編程,如圖3所示。
在使用順序控制指令時應注意:①步進控制指令SCR只對狀態元件S有效,為了保證程序的可靠運行,驅動狀態元件S的信號應采用短脈沖;②當輸出需要保持時,可使用S/R指令;③不能把同一編號的狀態元件用在不同的程序中,例如,如果在主程序中使用了S0.1,則不能在子程序中再使用S0.1;④在SCR段中不能使用JMP和LBL指令,即不允許跳入或跳出SCR段,也不允許在SCR段內跳轉,可以使用跳轉和標號指令在SCR段周圍跳轉;⑤不能在SCR段中使用FOR、NEXT和END指令。
3結語
PLC作為工業自動化的首選控制工具已廣泛應用于各種場合。PLC控制設計的主要問題是編程,采用子程序設計思路,在主程序完成調用后,SFC流程圖使程序結構清晰,易于閱讀與維護,尤其是SFC 的使用可以大大減輕編程的工作量,縮短系統設計時間。
總之,我們在熟練掌握以上兩種方法的基礎上,應根據不同的順序控制系統,并結合PLC的響應速度,系統的復雜程度以及設計的效率等因素,來選擇合適的設計方法。
參考文獻:
\[1\]胡漢文,丁如春.電氣控制與PLC應用[M].北京:人民郵電出版社,2009.
\[2\]呂景泉.自動化生產線安裝與調試[M].北京:中國鐵道出版社,2011.
\[3\]冀建平.PLC原理與應用[M].北京:清華大學出版社,2010.
\[4\]周萬珍,高鴻斌.PLC分析與設計應用[M].北京:電子工業出版社,2004.
\[5\]廖常初.PLC基礎及應用[M].北京:機械工業出版社,2006.
篇5
【關鍵詞】自編測井繪圖程序 地質報告 應用
中圖分類號: P24文獻標識碼:A 文章編號:
CorelDRAWGraphicsSuite是加拿大Corel公司的平面設計軟件;該軟件是Corel公司出品的矢量圖形制作工具軟件,這個圖形工具給設計師提供了矢量動畫、頁面設計、網站制作、位圖編輯和網頁動畫等多種功能。
該軟件圖像軟件是一套屢獲殊榮的圖形、圖像編輯軟件,它包含兩個繪圖應用程序:一個用于矢量圖及頁面設計,一個用于圖像編輯。這套繪圖軟件組合帶給用戶強大的交互式工具,使用戶可創作出多種富于動感的特殊效果及點陣圖像即時效果在簡單的操作中就可得到實現——而不會丟失當前的工作。通過Coreldraw的全方位的設計及網頁功能可以融合到用戶現有的設計方案中,靈活性十足。
該軟件套裝更為專業設計師及繪圖愛好者提供簡報、彩頁、手冊、產品包裝、標識、網頁及其它;該軟件提供的智慧型繪圖工具以及新的動態向導可以充分降低用戶的操控難度,允許用戶更加容易精確地創建物體的尺寸和位置,減少點擊步驟,節省設計時間。
一CorelDRAW12使用技巧
1、快速拷貝色彩和屬性。在CorelDraw軟件中,給其群組中的單個對象著色的最快捷的方法是把屏幕調色板上的顏色直接拖拉到對象上。同樣地道理,拷貝屬性到群組中的單個對象的捷徑是在用戶拖拉對象時按住鼠標右鍵,而此對象的屬性正是用戶想要拷到目標對象中去的。當用戶釋放按鈕時,程序會彈出一個右鍵顯示菜單,在菜單中用戶可以選擇自己想要拷貝的屬性命令。
2、讓漸變效果更平滑。漸變效果是圖象制作過程中常用的一種效果,如何把這種效果的漸變層次處理得更平滑、更自然一點,就變得非常重要了。在CorelDraw中,獲得平滑的中間形狀的最好方法是以漸變控制物件作為開始,此漸變控制物件使用相同節點數量,并且是在相同的繪圖順序(順時針或者逆時針方向)下建立的。這樣做的話,需要通過修改第一個物件的拷貝來建立你的第二個物件。在第一個物件被選擇后,在數字鍵盤上按+鍵來復制它。把復制件放在一邊,選擇Shape工具,并且開始重新安排節點。如果你需要在這兒或那兒添加額外的節點來制造第二個物件(在CorelDraw中,你能在曲線上雙擊以添加節點),請同時在第一物件中添加相對應的節點。如果你的形狀有許多節點,你可以放置一個臨時性如圓圈一樣的標識器在第一物件中鄰近節點的地方,也放置另一個標識器在第二物件中鄰近對應的節點的地方。
3、快速輸出結果。有人說,輸出結果不就是單擊一下“打印”按鈕就可以了,其輸出速度是不由人控制的。這話沒錯,不過在使用CorelDraw制作圖象,在列印輸出之前最好先檢查一下頁面,在非列印區的頁面上是否存放了很多暫存的物件,這些物件在列印輸出時,雖然沒有實際被列印出來,但依舊會被計算處理,這樣計算機就要多花時間來處理,為此我們只要刪除掉這些暫存的物件,就能大大提高輸出的速度了。
二、技術方案
1、數據庫轉換。“CLGIS煤田測井綜舍解釋程序“所生成的DAT數據文件,包含有涮井參數曲線、砂泥孔隙百分比曲線、巖性柱狀等數據信息。經過加密處理,只能由該系統讀取。CLGIS的DAT文件具有特廉的數據存儲方式及繁雜的數據結構。據有關資料和實際操作可知,該文侔阻字節方式展開有以下特點:(1)按結構可分為兩大部分,第一部分為數據頭部分,定長數據,主要存放數據庫名稱、曲線條數、各曲線名稱,曲線采樣開始結束潦度、數據存放起始指針等。第二部分為數據存放區,該部分字節數由數據量的多少來確定。(2)按存取方式分類,為順序文件。以ASCII碼儲存文本。同時用二進制形式、壓縮格式存儲教據。(3)數據依照深度順序連續存儲。沒有深度數據和分隔標志。不論其文件類型,結構如何,如果我們知道其每一我們所需信息,在文件中確切的儲存位置、存儲形式,可以用控制二進制文件的方法,將其轉換為可供任意誦用的文車格式。
2、砂泥孔隙百分比含量繪圖。砂、泥、孔隙數據是百分比數據,只需繪出砂泥曲線即可。泥曲線的橫向幅值應為*.DAT數據文件中砂與泥幅值之和。由于砂泥含量圖形是不規則圖形,砂泥符號須用充填方法,曲線繪圖設計要將起止點閉合才能充填砂或泥符號。
測井巖性柱狀繪圖CI GIS解釋系統所生成的巖性文件(LYER),依次包含有柱狀起止深度、總層數;每層的起止深度、巖性代碼(阿拉伯數字)。每一層數據用“0”隔開。每種巖性用VBA語言代碼編寫成子程序,以在繪制柱狀巖性時調用。
自編數字測井繪圖程序在地質報告中的應用
我們還編寫了“編制測井曲線柱狀圖”、“繪制測井曲線對比圖”;“繪制測井曲線煤層成果圖”;“繪制地質、測井綜合柱狀圖”等程序。其中“繪制地質、測井綜合柱狀圖”,是直接調用地質野外記錄的電子文檔數據,繪制地質部分的巖芯描述,深度厚度,巖性名稱等。本程序人機交流界面方便靈活、繪制的圖件美觀,繪圖效率高,簡單易學,實用性強,有一定的推廣和實用價值。下圖是“繪制地質、測井綜合柱狀圖”程序在《紅陽三礦深部勘探地質報告》中繪制的“紅陽三礦深部1505號鉆孔綜合柱狀圖”的頭尾部分圖形。
四、以繪測井曲線成果圖”程序為例,簡介繪圖程序結構
1、主控窗體。“繪測井曲線成果圖”程序由兩級窗體組成,第一級為主控窗,可分別點擊“數據庫文件轉換”,“繪測井曲線”“繪砂泥孔隙百分比”、“繪測井柱狀”按鈕,就可顯示第二級窗體,(圖略)若需終止程序運行,點擊“退出”按鈕。
2、數據庫轉換程序窗體。當點擊主控窗體“數據庫文件轉換”按鈕時,則顯示相應窗體,本程序設計每次可選擇轉換1~ 10 條曲線,“數據庫文件路徑”、“文本文件保存目錄”等文本框輸入的參數均可按所需改寫。轉換*.DAT 文件時,如果庫中文件曾有被刪除,則必須用CLGIS 系統的PACK 命令壓縮數據文件后再轉換。
測井曲線繪圖窗體。當點擊主控窗體“繪測井曲線”按鈕時,則顯示相應窗體。測井曲線繪圖是整個繪圖的關鍵,為適應對比圖煤層成果圖,等不同圖件的需要,對曲線繪圖控制比較細致。繪制靈活方便,基本能滿足多種圖件的繪制需求。
砂泥孔隙百分比繪圖程序窗體。當點擊主控窗體“繪砂泥孔隙百分比”按鈕時,則顯示相應窗體。同樣,窗體文本框輸入的參數可根據需要更改。程序運行結束后,將砂泥區分別用作好的砂、泥圖形充填。
繪成果柱狀圖窗體。當點擊控窗體“繪測井柱狀”按鈕時,則顯示相應窗體。文本框內容修改完畢,點擊“開始”按鈕,程序將調用設計好的各種巖性子程序,按數據庫解釋時輸入的巖性代碼、繪制巖性柱狀;巖性名稱;底板深度;厚度。
參考文獻:
[1] 孫宏利.測井曲線繪制系統[J]. 油氣田地面工程. 2007(03)
[2] 楊克敬,毛寶安,劉軍祥.自編測井繪圖程序在地質報告中的應用[J]. 地下水. 2007(05)
[3] 胡菊艷,郭鴻.測井曲線在許疃井田煤巖層對比中的應用[J]. 中國煤炭地質. 2008(12)
[4] 常東,高占華,彭鴻鵠,張景考,靳彥彬.測井曲線在準東煤田大井礦區一井田煤層對比中的應用[J]. 中國煤炭地質. 2008(12)
篇6
辦公室里,小宇耷拉著腦袋站在我面前。我歷數他的不是。為什么不聽話?小宇一句話也不說。這時,班長舉著一件作品趕來:“快看,這是在小宇書包里找到的,這哪算書法作品?簡直就是垃圾!”我一愣。“既然有作品,那為何不按時交上來?”我疑惑地問。“我,我怕,怕同學們笑話――”他的聲音在喉嚨里打轉。可不是嗎?字大小不一、歪歪扭扭的,筆畫也很不到位。我翻開欣怡的書法作品,我說:“你和欣怡是好朋友,仔細瞧瞧吧!為何人家的作品能獲得第一名,而你卻把字寫成這個樣子?這就叫差距!”“因為,因為他的字是家長幫他寫的――”小宇漲紅了臉。我愕然了。“他的字是家長幫他寫的,這是我親眼看到的。欣怡還說讓家長也給我寫一幅,保證能得獎的,我沒有要――”小宇慢慢地說。我疑惑地望著他。“我實在不想撒謊拿別人的作品冒充是自己的,那樣即使得了獎我心里也不踏實的!老師,您不是經常教導我們要做一個誠實的人嗎?我做到了……”我沒想到會這樣。我呆呆地望著小宇,心中五味雜陳。
我想起當初捧著作品時的贊不絕口,我說:“同學們真是太厲害了,恐怕老師也要苦練好多年才能達到這種水平呢!”我問,“是自己寫的嗎?”他們作謙虛狀:是別人指導的!其實我心里明白:三年級軟筆書法剛剛起步,在很多同學甚至連握筆姿勢都成問題的情況下,別人又該如何“指導”呢――關于這一點,不光我明白,所有老師,包括作品展的組織者們也心中有數,可是大家都默許這么做。組織領導們愿意這樣,因為屆時可以向社會、向上級展示,這就是我校藝術教育成果,連小學三年級的軟筆也有書法家的樣兒;老師們愿意這樣,別人都這樣,如果你不這樣,到時候眼瞅著大摞大摞的獲獎都流向別的班級,那豈不是自討沒趣;家長們也愿意這樣,別的孩子在“指導”后都拿出了像樣的作品,那自己也得跟上,哪怕是讓它變成“家長作業”又何妨;當然,孩子們更愿意這樣,如果能輕輕松松得個獎,何樂而不為呢?于是,一年又一年,作品展上的軟筆精品數不勝數。我想起上午作品展上,別說三年級,就連小學二年級,甚至一年級學生不是都有絕妙的書法作品展示嗎?
可是,就偏偏有一個人不愿意這樣――小宇。“對了,家長讓我把這個交給您――”小宇說著,從衣兜里摸出一張小紙條――
老師,首先我替小宇向您表達深深的歉意――他總是與這個班級格格不入,以至于給您帶來了不少麻煩。這次軟筆書法作品展可能又讓您不愉快。本來,我是可以承擔責任幫助他的,可是他太固執,說什么也不讓,還說如果拿著家長的作品參展那是欺騙老師。我一再勸他別人都是這么做的,可他就是聽不進去,他一定要自己完成。他的作品完成得太辛苦,每寫好一幅,他總是不滿意,于是又重寫一次,反反復復,他一連寫了幾十幅。昨天,他一直寫到深夜,可是,早晨他還是沒有勇氣交上去……他一直都是這么特別,就說平時的家庭作業吧!有時候我們不在家,我們無法給作業簽名。我們叮囑他,讓他代替我們簽一下,可是他說那是欺騙老師,他不愿意那樣,他要做誠實的孩子;還有前幾天搜集花的事,我們一家人打著手電筒到小區里找花,結果一無所獲。最后我們說去花店買幾株花,可是他不愿意。他說寧可被老師批評,也不愿意欺騙老師……唉,他就是這樣一個孩子,真拿他沒辦法!
篇7
充分賞識孩子的優點和進步
成就感是怎樣形成的呢?人要看清楚自己,必須有一面鏡子。而孩子也一樣,他們需要一面鏡子及時將自己的狀況清楚準確地反饋給他們,即獲得評價。積極的評價讓他們充滿自信,獲得成就感,消極的評價讓他們形成壓力,喪失成就感。
父母需要做一個有心人,注意觀察孩子在學習過程中的每一個進步,小進步小激勵,大進步大獎勵,并及時作出表示,或者是一個眼神,一句贊揚的話,一張表揚性質的紙條,等等。
為孩子提供充分的展現機會
個體的成就感,最根本的還是來自于對自我能力的認識。當孩子從實際活動中感受到自己能夠很好地完成任務時,就能真切體會到一種”我能”的感覺。這種積極、愉悅的感受,即是獲得成就感,父母可以通過組織一些戶外活動,或者鼓勵孩子適當參加社區活動等方式,為孩子提供展現自己能力的機會。另外,在孩子展現自己能力的過程中,也要善于引導他認識到自己努力的方向,避免演變為“傷仲永”式的炫耀。
對兒童的評價,要依據兒童的標準
對孩子的要求和給予孩子完成的任務要符合孩子的發展水平,循序漸進。例如,雖然孩子的曲目彈得不夠流暢,但對于一個7歲的孩子來說,已經是很不錯了。如果家長用成人的標準去評價、要求孩子,就必然導致指責多于表揚,并最終導致孩子的退縮甚至放棄。只有每次給予的任務都是孩子有所準備的,讓孩子“跳一跳就能摘到蘋果”,這樣,孩子才會有信心。
注重過程,淡化結果,努力為孩子減少消極壓力
篇8
對不起。我不能再保護你們了。
因為,我是冰族的二皇子。
我是櫻空釋。
夢魘•星舊•星移
當我來到刃雪城下時,王和一個擁有很長的紅頭發的人,已經倒在了地上。他們的身邊,開滿了紅蓮。 溫暖如春。
我明白了。
那個人就是那個勇猛的火族皇子。
就是櫻空釋。
王把他所有的靈力都給了櫻空釋。他只剩下短短的,可憐的頭發。櫻空釋的紅頭發間,也摻雜著一些銀發。
可是沒用了。他們都死了。
我絕望地走到他們面前。卻驚人地發現,櫻空釋,他還沒死,他還擁有微弱的生命。
火族精靈已經攻進了刃雪城。可是他們,望著倒下的櫻空釋,他們的首領,呆住了。沒有了櫻空釋,他 們就沒有了一切。
刃雪城內只剩下可憐的幾個弱小的巫師和劍士。可在現在卻是如此強大。因為沒有了櫻空釋。火族精靈 們一個個倒下,倒下。我也用我所學會的最厲害的幻術,對抗他們。
他們馬上就被我們消滅了。因為沒有了櫻空釋。
誰都不會想到,是這些微不足道的巫師劍士,擊退了火族的攻擊。而靈力高強的月神、皇柝、潮涯、蝶澈,還有離鏡和剪瞳,卻全部滅亡。
多么可笑。就因為沒有了櫻空釋。
我把王的遺體安葬在了皇宮的最底層。
望著此時的刃雪城,我想起了他的名字,黑色之城。
櫻空釋被我帶到了雪霧森林里。
櫻空釋依然昏迷不醒。現在已經是圣戰后的第三年了。
為什么會這樣?難道,櫻空釋就跟凡世里的人們說的,植物人一樣了嗎?
我登上了祭星臺。舉起我的落星杖。
星象混亂,混亂。我用我所有的靈力去解答這個問題。
占星中,我不斷地吐血,直到祭星臺上濺滿了我的血跡。
三天三夜的占星后,我終于知道了櫻空釋昏迷不醒的原因。
用隱蓮復活的人,見到把他復活的人時,就會昏迷,昏迷。一直昏迷十年。十年之后,他將醒來。這時,他就會忘記他今生所經歷的一切,只記得他的前世所發生的事情。
刃雪城里,現在已經沒有了王。雖然它只是一個水晶宮殿,淵祭的玩具,但也不能沒有人來管。這是王說的。在照顧櫻空釋的同時,我管理著這個幾乎已經破滅的帝國。我告訴臣民們,他們的王已經死去。不過,王的弟弟,櫻空釋,在幾年之后,便會回來,繼承王位,管理這個帝國。他就是我們新的王。在他沒有回來之前,請讓我暫時管理。請讓我做個暫時的王。
我統領著全城人們,指揮他們重建自己的家園。刃雪城一天天回復原來的樣子……
在雪霧森林的一天天里,櫻空釋的紅頭發漸漸掉落。他的銀白色頭發漸漸露出來。他的瞳仁顏色漸漸變淡。
我知道,這意味著他的火系幻術正在漸漸消失。他的記憶正在漸漸消退。
他那精純的幻術,就這樣一點點不見。不見。多么的悲哀。
十年終于過去了。櫻空釋已經只剩下了銀白色的頭發,長長的,非常純凈。只有我知道,這是他的哥哥 ,王留下的。他的瞳仁也變得像王一樣的清澈。像極了他的前世。沒有人會相信,他是火族的人。他是冰族 的幻術師。本來就是。
我知道,他現在只記得,他是櫻空釋,幻雪帝國的二皇子。他只會用那些冰族的幻術,和 一點點火族的幻術。這個秘密只有我知道。
而這時,刃雪城已經如大戰之前,一樣的宏偉,壯觀。人們也恢復了平靜的生活,一切像什么都沒發生過。
櫻空釋蘇醒的那一天終于到了。
篇9
關鍵詞: 病毒 進程間通信 程序自我保護
1.引言
在計算機和網絡技術日益發展的今天,病毒這個字眼越來越多地出現在了媒體和人們的言論中。計算機病毒的發展必然會促進計算機反病毒技術的發展,新型病毒的出現向以行為規則判定病毒的預防產品、以病毒特征為基礎的檢測產品,以及根據計算機病毒傳染宿主程序的方法而消除病毒的產品提出了挑戰,致使原有的反病毒技術和產品在新型的計算機病毒面前無能為力。這樣,勢必使人們認識到現有反病毒產品在對抗新型的計算機病毒方面的局限性,迫使人們在反病毒的技術和產品上進行新的更新和換代。要打敗對手,就要從了解對手開始,本文從模擬病毒隱藏性和寄生性的角度出發,以進程通信、進程快照、多線程等技術基礎,利用Visual C++的MFC窗口界面設計了一組程序自我保護軟件,經過測試實現了程序的穩定運行。
2.進程的概念
當一個程序開始運行時,它就是一個進程,進程所指包括運行中的程序和程序所使用到的內存和系統資源。因此定義進程(Process)是具有一定獨立功能的程序關于某個數據集合上的一次運行活動,是系統進行資源分配和調度的一個獨立單位。程序只是一組指令的有序集合,它本身沒有任何運行的含義,只是一個靜態實體。而進程則不同,它是程序在某個數據集上的執行,是一個動態實體。它因創建而產生,因調度而運行,因等待資源或事件而被處于等待狀態,因完成任務而被撤銷,反映了一個程序在一定的數據集上運行的全部動態過程。
進程由兩個部分組成:
(1)操作系統用來管理進程的內核對象。內核對象也是系統用來存放關于進程的統計信息的地方。
(2)地址空間。它包含所有可執行模塊或DLL模塊的代碼和數據。它還包含動態內存分配的空間,如線程堆棧和堆分配空間。
目前常用的操作系統都是并行的,就是多個進程可以同步運行,這時就會牽扯到進程間通信這個概念。所謂進程通信,就是不同進程之間進行一些“接觸”,這種接觸有簡單,也有復雜。機制不同,復雜度也不一樣。通信是一個廣義上的意義,不僅僅指傳遞一些信息。舉個例子來說明:比如說在使用IE上網時,你想將網頁上的一段文字保存至你的電腦上,這時有一種簡單的方法,就是復制粘貼。將你想保存的文字選中,然后將其復制,接下來將所復制的文字粘貼到.TXT文檔中,這時就形成了兩個進程之間的通信,這里的通信媒介是剪貼板。
3.線程的概念
為了對線程模式有一定的理解,我們可以將其想象為把一所屋子里的東西搬到另一所屋子。如果采用單線程方法,則需要自己完成從打包到扛箱子再到拆包的所有工作。如果使用單元線程模式,則表示邀請了好朋友來幫忙。每個朋友在一個單獨的房間里工作,并且不能幫助在其他房間工作的人。他們各自負責自己的空間和空間內的物品搬運。如果采用自由線程方法,仍然邀請相同的朋友來幫忙,但是所有朋友可以隨時在任何一個房間工作,共同打包物品。與此類似,房子就是運行所有線程的進程,每個朋友都是一個代碼實例,搬運的物品為應用程序的資源和變量。
有了上面的例子,便能容易理解線程(Thread)是一個能獨立于程序的其他部分運行的作業,是進程的一個實體,是CPU調度和分派的基本單位。線程不能夠獨立執行,必須依存在應用程序中,由應用程序提供多個線程執行控制。線程是程序中的一個執行流,每個線程都有自己的專有寄存器(棧指針、程序計數器等),但代碼區是共享的,即不同的線程可以執行同樣的函數。一個線程可以執行應用程序代碼的任一部分,包括正在由另一線程執行的代碼。
線程由兩個部分組成:
(1)線程的內核對象,操作系統用它來對線程實施管理。內核對象也是系統用來存放線程統計信息的地方。
(2)線程堆棧,它用于維護線程在執行代碼時需要的所有參數和局部變量。
線程屬于一個過程,操作系統為每一個運行線程安排一定的CPU時間――時間片,線程是操作系統分配CPU時間的基本單位。系統通過一種循環的方式為線程提供時間片,線程在自己的時間內運行,因時間片相當短,因此,給用戶的感覺,就好像線程是同時運行的一樣。如果計算機擁有多個CPU,線程就能真正意義上同時運行了。
4.進程與線程的關系
根據操作系統的定義,進程是系統資源管理的最小單位,線程是程序執行的最小單位。進程是不活潑的,進程可以理解為是線程的容器。若要使進程完成某項操作,它必須擁有一個在它的環境中運行的線程,此線程負責執行包含在進程的地址空間中的代碼。單個進程可能包含若干個線程,這些線程都“同時”執行進程地址空間中的代碼。每個進程至少擁有一個線程,來執行進程的地址空間中的代碼。當創建一個進程時,操作系統會自動創建這個進程的第一個線程,稱為主線程。此后,該線程可以創建其他的線程。
線程是屬于進程的,它沒有自己的獨立的數據地址空間,線程運行在進程空間內,因此線程的切換速度比較快。同一進程所產生的線程共享同一內存空間,而這些線程的執行由系統調度程序控制,調度程序決定哪個線程可執行以及什么時候執行線程。線程有優先級別,優先權較低的線程必須等到優先權較高的線程執行完后再執行。當進程退出時該進程所產生的線程都會被強制退出并清除。線程可與屬于同一進程的其他線程共享虛地址空間、全局變量,以及該進程所擁有的全部資源,包括打開的文件、信號標志及動態分配的內存等。但是其本身基本上不擁有系統資源,只擁有一點在運行中必不可少的信息(如程序計數器、一組寄存器和棧)。
線程有點像進程身體內的細胞,我們通常聽過多進程多線程,單進程多線程。這就是說,一個系統內有幾個進程,如果進程是多個,就是多進程的,如果進程內有多個線程,那就是多線程的,多進程多線程的系統比單進程多線程的系統速度慢,但是可靠性高。
5.程序的設計與實現
程序的自我保護是一個大的概念,其中有多種方式和手段來實現自身的保護。比如隱藏、自我復制、注冊為服務,等等。我們實現的程序自我保護實際上是一個相互監督的過程。其中包括了程序之間的監督和報警,監聽程序的隱藏與保護。
5.1監督
所謂監督,是利用進程枚舉的方法,讓所有程序在運行同時不停地對進程列表進行快照,并檢查目標進程是否存在的過程。
在Windows環境下可以通過調用ToolHelp API函數來達到枚舉系統進程的目的。微軟的Windows NT開發小組因為不喜歡ToolHelp函數,所以沒有將這些函數添加給Windows NT,所以開發了自己的Process Status函數,就是PSAPI。但是后來微軟已經將ToolHelp函數添加給了Windows 2000。ToolHelp32庫函數在KERNEL32.dll中,它們都是標準的API函數。
ToolHelp32庫中有各種各樣的函數可以用來枚舉系統中的進程、線程,以及獲取內存和模塊信息。其中枚舉進程只需用如下三個的函數:CreateToolhelp32Snapshot()、Process32First()和Process32Next()。
使用ToolHelp32函數的第一步是用CreateToolhelp32Snapshot()函數創建系統信息“快照”。這個函數可讓你選擇存儲在快照中的信息類型。如果你只是對進程信息感興趣,那么只要包含TH32CS_SNAPPROCESS標志即可。CreateToolhelp32Snapshot()函數返回一個HANDLE,完成調用之后,必須將此HANDLE傳給CloseHandle()。
接下來是調用一次Process32First函數,從快照中獲取進程列表,然后重復調用Process32Next,直到函數返回FALSE為止。這樣將遍歷快照中進程列表。這兩個函數都帶兩個參數,它們分別是快照句柄和一個PROCESSENTRY32結構。
調用完Process32First或Process32Next之后,PROCESSENTRY32中將包含系統中某個進程的關鍵信息。它的具體內容如下:
typedef struct tagPROCESSENTRY32{
DWORD dwSize;
DWORD cntUsage;
DWORD th32ProcessID;
DWORD th32DefaultHeapID;
DWORD th32ModuleID;
DWORD cntThreads;
DWORD th32ParentProcessID;
LONG pcPriClassBase;
DWORD dwFlags;
TCHAR szExeFile;
DWORD th32MemoryBase;
DWORD th32AccessKey;
}PROCESSENTRY32;
其中進程ID就存儲在此結構的th32ProcessID。此ID可以被傳給OpenProcess()API以獲得該進程的句柄。對應的可執行文件名及其存放路徑存放在szExeFile結構成員中。在該結構中還可以找到其他一些有用的信息。
5.2報警
這里的報警就涉及了進程間通信的概念。本文中涉及的進程間通信是用剪貼板的方法,剪貼板在我們實際應用中是用得比較多的,它實際上是系統維護管理的一個內存區域,當我們在一個程序中復制數據的時候,實際上是將這些數據放入了內存,相反,當我們在另一個程序中粘貼數據時實際上是從內存取出數據。下面介紹一下使用剪貼板時的主要函數:打開剪貼板OpenClipboard(),不管是對剪貼板的讀還是寫,都要首先調用此函數,以判斷是否可以對剪貼板進行操作。此函數是BOOL型的,如果調用成功就返回非零,否則返回零。清空剪貼板EmptyClipborad(),每次對剪貼板的寫入操作之前,都應該調用此函數,這個函數的作用不僅是清空剪貼板,而且起到獲得剪貼板的使用權的作用。同樣,這個函數也是BOOL型的,如果調用成功就返回非零,否則返回零。對剪貼板寫入SetClipboardData(UINT uFormat,HANDLE hMem),這個函數有兩個參數,第一個參數用來表示寫入剪貼板數據的格式,第二個參數接收一個句柄值,在這里它接收一個指向內存對象的句柄,這個內存對象中存放著準備寫入剪貼板的數據內容。在調用SetClipboardData(UINT uFormat,HANDLE hMem)之前還需要調用GlobalAlloc(UINT uFlags,SIZE_T dwSytes)這樣一個函數,它專門用來為將要寫入的數據分配一塊內存空間。這個函數接收兩個參數,第一個參數表示如何來分配內存空間,這里我們將它設置為GMEM_MOVEABLE,表示動態分配內存。第二個參數是表示分配內存空間的大小。GlobalAlloc(UINT uFlags,SIZE_T dwSytes)返回一個句柄,我們無法使用句柄來間接的將數據放入內存,這時就需要調用另一個函數GlobalLock(HGLOBAL hMem),這個函數獲得一個內存對象的句柄,將這塊內存加鎖,返回一個指針,這時我們就可以給指針所指向的這塊內存寫入數據了。這個函數使用一個內存計數,計數器基數為零,每調用一次計數器加一,所以每調用一次的同時還需要調用另外一個函數GlobalUnlock(HGLOBAL hMem)來給計數器減一,相當于取消對這塊內存的鎖定。本文設計的程序實現報警功能就是在枚舉進程之后發現目標進程被終止,從而在剪貼板中寫入信息的過程。
5.3監聽
所謂監聽,就是報警的反方向,即從剪貼板中讀出信息。從剪貼板讀取數據的函數GetClipboardData(UINT uFormat)。這個函數只接收一個參數,參數指定讀取的格式。讀取信息之后,我們還要對信息進行if判斷,如果信息是我們預留的某個進程被結束的話,我們就啟動保護措施。
5.4保護和隱藏
這里的保護是指監聽程序對其他程序的保護,方法非常簡單,只需要利用WinExec函數來實現目標進程的啟動就可以。而隱藏是指監聽程序自身的隱藏,只要在OnPaint()函數里調用ShowWindow(SW_HIDE)函數就可以了,同時將監聽程序命名為smss,就可以避免其被強行終止。
6.結語
本文中程序的設計是模仿病毒的一些特性而做成的。它實現了程序的隱藏,并且利用了系統的漏洞實現了不被終止。對我們了解病毒的特征提供了良好平臺,同時對一般程序自我保護的設計有很好的現實意義。
參考文獻:
[1]吳倩.一種進程通信劫持技術的實現與應用研究[J]中央民族大學學報(自然科學版),2007,(1).
[2]徐江峰,張戰輝,楊有.基于VC~(++)的進程通信技術研究[J]計算機科學,2007,(9).
[3]郭江平.Windows進程通信技術分類[J]電腦編程技巧與維護,2010,(2).
[4]馮德旺,蘭建容,寧正元.基于VC的剪貼板應用程序[J]計算機應用研究,2002,(7).
篇10
摘 要:針對地方院校程序設計課程存在的問題,在廣泛評估學生差異的基礎上,闡述該課程常規教學模式的缺陷,提出具有多個教學目標的“自分類教學”教改方案。目前該課程被設置成雙平臺教學系統,其教學效果經權威考試評價,都要優于同期未試系統,教學對一部分學生無效的狀況得到改善。
關鍵詞:自分類教學;差異;平臺
作者簡介:朱騏,男,副教授,研究方向為計算應用與教學;陳瑾,女,講師,研究方向為計算應用與教學;張宏,男,講師,研究方向為計算應用與教學。
程序設計課程是我國高校理工科專業普遍開設的一門公共基礎課程,在經歷二十多年的發展后,課程的模式已經基本固定,但課程的魅力反而正在失去。近年各種質疑接踵而來,如該課程“學以致用”嗎?“學而能用”嗎?鹽城工學院計算中心關于“大學計算機”課程的畢業調查顯示,這些質疑來自各方,有畢業生,也有其他學科教師,另外,在校學生學習熱情普遍降低,這些情況在地方院校表現得非常明顯。
筆者認為要挽回目前的頹勢,必須重新認識該課程,引入更符合學生實際、操作性更強的自分類教學模式。自分類教學與在特殊教育中經常采用的分類教學相似,但它更尊重學生的自主性。
1 自分類教學的科學依據
分類教學源于學生差異,自分類教學同樣如此。
1.1 學生差異的普遍性及評估
1.1.1 在校生的差異
資料顯示,目前人們討論學生差異,多針對于基礎教育和職業教育。而對于高等教育中的學生差異,比較完善的論述很少,局部性的討論偶見,且多著眼于人格、人生觀、城鄉等方面差異[1-2]。可是,筆者在教學實踐中強烈地感受到高等教育大眾化以來,地方院校普通本科生的差異正在逐年擴大,這深刻地影響著教學活動與教學效果。
在學習程序設計課程時,學生表現得最強烈的差異可以歸納為以下幾方面。
第一,能力差異。程序設計課程有三個特點。其一,邏輯性強,需要數學知識和各種常識支持;其二,實踐性強,需要高強度的上機練習;其三,語法性強,需要在理解基礎上強化記憶。因此邏輯能力、實踐能力、記憶能力俱佳的學生在學習這門課程時將會得心應手。可是客觀上學生的能力發展并不一致,能力差異既反映在能力綜合水平上,也反映在能力結構上;隨著進入高校就讀的學生一年年地增加,他們的能力綜合水平整體呈下降趨勢,能力結構存在缺陷的學生也越來越多。
第二,興趣差異。“程序設計”是一件新事物,開始學習時,多數學生對它都有一定興趣。可是從教育心理學來理解,這種興趣屬于間接興趣,即對學習結果有所期待,它需要轉化為直接興趣才有意義。而直接興趣是在教學過程中產生的,是對所學材料的興趣;隨著其他差異造成學習效果的不同,一個人的直接興趣會朝著兩個方向變化:一個方向是激發、維持、增長;另一個方向是未產生、或無法維持、衰退;直接興趣差異因此出現,反過來它再影響學習效果,形成循環。
第三,目標差異。地方院校學生學習目標差異近年來也在擴大,一方面一部分學生積極進取,學習上有所追求;另一方面校園內廣泛存在“心不在焉一族”,課堂教學對之沒有效果。從宏觀來看,目標差異是當前地方院校教學活動大環境的構成因素之一,從中觀、微觀來看,它又是一門具體課程間接興趣差異的主要來源。
面對較大差異而無對策,最終必然造成優生、中等生和差生的全面分化。NCRE①二級是一種比較權威的考試,難度適中,可借用它來評估學生的分化。評估標準不妨設定為:首次參加考試即取得注有“優秀”字樣合格證書的是優生,取得一般合格證書的是中等生,而沒有取得合格證書的是差生。如果一個地方院校NCRE二級通過率位于同類院校上游水平,一般首次通過率會在60%~70%,按照上面的設定標準,差生比例將高達30%~40%!可見在差異背景下常規教學模式效率不理想。
1.1.2 畢業生的差異
筆者曾經對70位從事技術工作的畢業生進行問卷調查,考察程序設計知識的應用情況,調查顯示畢業生可以分成三種人群。
第一類人群:由需要應用并能應用的人組成;
第二類人群:由有機會應用但沒有能力應用的人組成;
第三類人群:由沒有機會應用的人組成。
三類人群數量比例大約是5:8:7,能夠做到學以致用的只占25%,如果再考慮應用的程度,則能做到深度應用的畢業生將少之又少。這一比例也說明了:常規教學模式存在缺陷。
1.2 常規教學模式的缺陷
綜上所述,常規教學模式對地方院校普通本科學生存在著不適用性,追根溯源,它的缺陷有兩個。
第一,程序設計課程多年來一直都采用合班教學,一個教師面對的學生通常有幾十到一百多個。如果集體中只有個別差生,教師會有精力依靠因材施教來解決他們的問題,但是實際情況并非如此,差生人數往往很多,在學進度下,差生群體問題根本無法通過因材施教來解決。因材施教在合班教學中缺乏可操作性。
第二,長期以來,理工科專業程序設計課程的教學目標是培養(業余)程序員,教學活動一廂情愿地追求編程能力的培育。由于沒有考慮學生的客觀差異和主觀需求,因此也就沒有區別教學,結果欲高而不就,反而落得許多學生在該課程學習上一無所成。一方面,差生和部分中等生由于技術領悟力不足而未能登堂入室;另一方面,該課程在思維方式上對其他課程、學生未來也沒有任何給予。單一教學目標與分化的學生之間存在著矛盾。
1.3 教學目標需要多元化
從尊重學生主體地位出發,解決問題必須從改革教學目標入手。
首先,應該改變觀念,承認學生差異的普遍性及客觀存在性;承認了這一點,就意味著差異教學的必要性;否認這一點,則有效教學可能淪為空談。多種多樣的差異造就教學的生態環境,差異具有潛在性、不確定性和豐富性[3],這些特征保障了教師開展創造性教學活動所必須的可用資源[3]。
其次,加強學生的主體地位,溶入多元理念。常規教學目標適用于綜合能力較強、興趣較大的學生,但是如果學生的某些能力不足、或學習目標未及、或學習興趣未至,教學目標可以退一步,把課程作為通識教育的一個平臺,致力于使學生利用不同的思維方式發展思辨能力。課程擁有多個教學平臺,對應于不同教學目標,讓學生自由選擇,這就是自分類教學。因為學生擁有了相當的自,自分類教學相比特殊教育中的分類教學有更大的靈活性;與分層教學(分層操作通常采取學習水平分層,而不是自愿,因此對學生心理易造成不良影響[1])也完全不同。自分類教學不是在課堂教學中才承認差異,而是在課堂教學前就承認差異,預見性、針對性比自然分材教學也要高。
2 自分類教學的操作思路
2.1 雙平臺教學系統
程序設計課程擁有三到五個教學平臺,因材施教的可行性將極大提升,可取得非常好的教學效果;但是兼顧資源配置,并考慮積累經驗也是實驗的目的之一,所以為課程設置下面兩個教學平臺是比較合適的:能力型平臺、通識型平臺。
教學平臺不同,價值取向、內容重點隨之不同。能力型平臺的算法邏輯性特征明顯,以求得對實際問題的技術性解決能力;而通識型平臺的基礎邏輯性特征明顯,立足于掌握編程知識內含的思維方式。
2.2 學生擁有自
人才培養是高校與學生在充分溝通的基礎上雙向選擇、共同適應、雙向努力的過程,學生在教學中必須擁有一定的自,即對教學過程中那些事關自己成長過程、職業基礎、前途命運的教學要素享有一定程度的知情權、參與權、選擇權。程序設計課程改革中學生“三權”應有如下含義。
知情權:學生首先應該了解課程的基礎價值、職業價值;其次應該知道為什么要設立兩個教學平臺,以及它們在教學目標、內容特征、教學方式上的差異。教師有義務告知學生課程的這些基本信息。
參與權:學生在學習過程中的要求、學習結束后的意見應被尊重并處理。
選擇權:在知情權得到保障情況下,學生根據自己意愿自由選擇平臺,在教學過程中可以調換平臺。
2.3 能力型平臺方案
在教學目標上追求應用能力發展、培養業余程序員。能力的核心是“四會”,所謂“四會”就是:會思考、會運用、會借鑒、會查資料。會思考就是掌握分析方法,能夠舉一反三;會運用則是掌握實現方法,通過學習與模仿,能夠創新;會借鑒指的是有能力利用一切已有的、成熟的或不成熟的設計成果,來構建自己的系統;會查資料指的是有能力通過查閱各種資料來解決實際問題,并且查閱資料成為一種工作習慣。
在教學內容上強調算法邏輯性特征,圍繞實際問題開展教學。這是因為:實際問題往往規模大,需要多方把握,能拓寬視野,提高掌控全局的能力;實際問題也比較真實、直觀,學生能找到應用價值,易產生興趣和成就感;實際問題伸縮性強、挖掘潛力大,能鍛煉學生的創新能力。
教學方式采用任務驅動。在計算機領域的一些課程教學中,任務驅動方式的教學實驗已進行了十余年,不乏成功的案例[4]。“四會”能力培育必須依賴實踐,教學內容與實踐內容是同一的。任務驅動尤其適用于實踐途徑的能力型教學目標,每一個實際問題都通過任務驅動方式在實踐中加以解決。任務驅動的教學必須達到:第一,合理設計任務,激發學生興趣,將驅動學生的外動力轉變成學生自己內在的求知欲望;第二,細節因問題而存在,無關當前問題的細節可以暫時忽略,這樣抓大放小的策略有利于學生快速入門,也能保護學生的初始興趣;第三,通過閱讀程序逐步進入了發現問題、解決問題的學習模式。
開卷考試。考試內容同樣也立足于實際問題,是設計型的;考試用時要寬松,讓學生有充裕的時間思考、規劃、設計與調試;在考試中,允許查閱資料和借鑒已有成果;在評分上向創新傾斜,讓考試更像是一場創新競賽。
2.4 通識型平臺方案
教學的主要目標是讓學生掌握課程特有的思維方式。“在通識教育模式下,學生需要綜合、全面地了解人類知識的總體狀況(包括主要知識領域的基本觀點、思維方式和歷史發展趨勢)[5]。”計算機科學是新興科學,其知識堪稱人類最新思維成果。作為計算機科學最重要的基本課程,程序設計思維方式內涵豐富,向學生介紹這些思維方式,并不直接為學生將來的職業活動做準備,只是要提高科學素養。
教學內容強調基礎性邏輯特征。旨在宏觀把握課程的基礎原理、中觀掌握課程的基本方法,至于微觀的技術細節則適當了解。因此理論教學只求邏輯通曉,不求技術深入;實驗教學只求簡單驗證,不求復雜應用。
在教學方式上,以概念為中心開設專題,強調討論。具體做法是:第一,將課程分解成若干專題,每一專題針對于一個或一組宏觀或中觀問題,專題之間通過邏輯演進;專題不是任務,任務是實際案例的分解,而專題是概念體系的分解。第二,采用“征引加討論”的教學手段,即通過與日常生活中的事理進行類比,把抽象的邏輯搞清楚,它應該由教師先做,然后再交給學生討論,集思廣益。第三,可廣泛采用觀摩方法實施案例教學,這樣既能深化理解,又能激發興趣。但是觀摩一定要控制細節講解,否則便會陷入技術的泥流之中,違背教學目標。第四,在各專題的實驗教學中,驗證也應該圍繞邏輯,技術細節的展開要適可而止。
考試內容要體現基礎邏輯性高這一特征。
3 自分類教學實驗
3.1 實驗步驟
以我校化生學院2008級5個班為實驗班級,參與學生155人,任課教師3人。工作周期分為五個階段:宣講、試聽、選擇、教學、評價。
宣講:教師告知學生關于課程的基本信息;試聽:提供10節課的時間讓學生試聽,權衡比較,分析自己的趣向和適應性,教師也根據實際情況提供參考意見;宣講、試聽都是學生知情權的落實。選擇:讓學生選擇一個平臺;教學:開展教學活動,此時學生依然能夠重新選擇平臺;選擇與教學都是學生選擇權、參與權的落實。評價:分為二步,首先,組織校內考試,檢驗教學效果;其次,與校外考試接軌,組織能力型平臺的學生參加NIT②C類模塊考試、通識型平臺的學生參加NCRE二級考試,通過與未實驗教學系統的對比,取得教學效果的權威評價。
3.2 實驗情況及效果
兩個平臺實驗情況見表1。綜述如下:第一,能力型平臺“最終人數”比“選擇人數”減少8人,退出的原因是不適應該平臺的學習強度與節奏。第二,能力型平臺NIT(C類VB模塊)考試成績優異,為省內歷年罕見,有關學生普遍反映收獲大、信心足。第三,通識型平臺NCRE二級考試一次通過率較高,優于同期未試教學系統(同期全體普通本科生一次通過率為63.1%)。第四,筆者必須提示:通識型平臺促進貫通,只能依靠潛移默化,遠期成果更具有價值,但考試不能反映出這一點。第五,在各平臺的實驗教學中,都廣泛開展了互助學習,能力型平臺還開展了研究性學習活動,“共振效應”普遍顯現,有力地推動了教學。
4 結語
在學生差異較大的背景下,地方院校程序設計課程常規教學模式已經暴露出不適用性,從尊重學生的主體地位出發,多個教學目標的自分類教學模式勢在必行。經權威考試評價,雙平臺教學系統的各平臺教學效果都要優于同期未試系統,教學對一部分學生無效的狀況得到了改善。
參考文獻:
[1] 周光明,彭. 尊重差異因材施教構建“和諧”教學新模式[J]. 中國大學教學,2007(6):69-71.
[2] 錢軍平. 論基于生源差異的高等教育有效質量保障策略[J]. 河北科技大學學報:社會科學版,2009(1):89-95.
[3] 程向陽. 論學生差異資源的教育學價值[J]. 當代教育科學,2005(15):14-17.
[4] 祁云嵩,華偉. 任務驅動式教學方法應用研究[J]. 教材與教法研究,2008(12):119-120.
[5] 陳向明. 對通識教育有關概念的辨析[J]. 高等教育研究,2006(3):64-68.
The Self-Assorting Teaching of the Programming Course
ZHU Qi, CHEN Jin, ZHANG Hong
(Computer Center, Yancheng Institute of Technology, Yancheng 224002, China)