[  企業(yè)注冊  登錄  ]

北京新敏興業(yè)環(huán)境科技發(fā)展有限公司

當前位置:首頁

專業(yè)論文

過程控制編程之簡要探討

文件大小:格式:發(fā)布時間:2008-05-12瀏覽次數(shù):
更多
【中文關(guān)鍵詞】過程控制編程之簡要探討        
【摘要】本文探討過程控制編程的相關(guān)內(nèi)容。
【全部正文】

  抽像一點講,過程控制滲透在生活的各個角落。特別是在數(shù)控行業(yè),尤為明顯。早期在PLC時代,幾乎是一統(tǒng)天下。當大小不一的控制卡公司如雨后春筍般成長起來時,控制卡在過程控制逐步體現(xiàn)出強勁優(yōu)勢。 其編程手段往往邦定非常成熟的編程工具,如:CB,VC,Dephi,CB。故其推廣非常迅速. 很快擁有大量客戶群。

  但是,作為編程者,碰到同一程序需要控制多個同樣設(shè)備時(動作不一定同步),往往在Window多任務(wù)系統(tǒng)的影響下,很快想到多線程技術(shù),其實多線程編程對系統(tǒng)依賴性較強,不同級別的處理,將導(dǎo)致程序的維護成本增加,并且還需要考慮線程之間的通訊,使編程起來較為麻煩。事實上,依靠過程編程的思想,會使程序獲得更簡單的做法。

  純粹從編程角度來看,過程控制編程應(yīng)包含幾個要素,下面以C++偽碼方式來表示一個類,較易說明問題:

/**************************
一個動作封裝類,包含一個
設(shè)備的所有執(zhí)行動作
**************************/
class CAction
{
public:
CAction():m_nWorkStep(-1000){}
~CAction(){}
public:
enum{ None, Inital, Start, Stop, Pause, Continue };//部分控制標記

public:
int Control( int nStatus, void *pParam ); //要素2: 一定可以接受外部控制
int Run( void *pParam ); //要素3: 絕對有一個不斷推動的執(zhí)行過程(這是整個過程編程的心臟所在)

public:
int m_nWorkStep; //要素1: 必須有一個工作執(zhí)行步
private:
void * m_pMemberData; //要素4: 可選,邦定被操作的數(shù)據(jù)
// ..其它輔助變量
};

  要素5:可選,為了能與外界用戶進行溝通,Control函數(shù)與Run函數(shù),須選擇一個參數(shù),滿足用戶的輸入輸出。但由于用戶可選項太多,故古人告訴我們,萬事皆空即是成功,對于C++而言,沒有比void *類型更有前途了(若想體會,需搭配類型轉(zhuǎn)換更有潛力)。早在一年前,本人寫過一個過程控制器編程,并有成功實例,但今次版本,更有精裝之特點。

  住下再參見一下Control函數(shù),及Run函數(shù)的一個小樣例,這將是程序員發(fā)揮強勁功能的場地所在。如下:

  int CAction::Control( int nStatus, void *pParam )
{//此處的設(shè)計需要一點技巧,當然完全取決程序員的經(jīng)驗,和對控制的理解
switch( nStatus ){
case Inital:
m_pMemberData = pParam;//初始化邦定的用戶數(shù)據(jù)
break;
case Start:
m_nWorkStep = 0; //一般令第0步作為開始較易理解
break;
case Stop:
m_nWorkStep = -1000;//停止
break;
case …//其它略去
default: break;
}
return m_nWorkStep;//返回值可自定
}

int CAction::Run( void *pParam )
{//以下為一個動作不斷返回,直至接受到停止指令
switch( m_nWorkStep ){
case 0:
if( IsMove() ) break; //正在忙,不執(zhí)行
Move(1600); //正向移動1600單位
m_nWorkStep++; //跳至下一步
break;
case 1:
if( IsMove() ) break; //正在忙,不執(zhí)行
Move(-1600); //反向移動1600單位
m_nWorkStep=0; //再回至第0步
break;
case –1000: break;//停止
default: break;//此句最好有,以便于理解
}
return m_nWorkStep; //返回值可自定
}
  對于Run函數(shù)須謹記一點:不要有長時間的循環(huán)操作,更不要有死循環(huán),否則另外設(shè)備無法正確動作,因為另外的設(shè)備Run函數(shù)無法被激活執(zhí)行,心臟無法跳動,只好等死吧!
當然,還須擔心一點:多個設(shè)備同時執(zhí)行時,其實時性會下降一點,若沒有特別高的要求,在現(xiàn)今CPU狂奔的時代,以上程序框架足已滿足90%的需求,還是有學(xué)習(xí)和理解的必要吧!


  以上的框架出來了,那么如何操作使設(shè)備驅(qū)動起來呢,不管在DOS亦或在Window系統(tǒng)環(huán)境里,以下的思路都一樣,參見偽代碼如下:

const int nSize=10; //定義10臺設(shè)備對象
CAction exeArray[nSize];
BOOL bRunning=FALSE;//控制整個驅(qū)動的標志

Void OnRunAction()//啟動函數(shù)
{
//初始化一下
for( int i(0); i〈nSize; i++)
exeArray[i].Control( CAction::Inital, ( void *)userData );//userData由用戶選擇

bRunning = true;//外部控制變量
for( i=0; bRunning; i=(i+1)%nSize)//給予運行時間,即是驅(qū)動了
{
exeArray[i].Run(( void *)userData); //不斷驅(qū)動Action設(shè)備(即激活心臟)
DoEvents();//做其它事情,如系統(tǒng)消息檢測,以防止死機
}
}

DoEvents函數(shù)功能的詳解可參見本人的〈〈DMC1000控制卡不能響應(yīng)系統(tǒng)消息〉〉,上面有不同編程工具下的實現(xiàn)源代碼。

void OnControlAction()
{
for( int i(0); i〈 nSize; i++)
exeArray[i].Control( Caction::(/*用戶想要的動作*/), ( void *)userData);
}

void OnOver()
{
bRunning = FALSE;//結(jié)束驅(qū)動
}

  注意:有很多程序員在不同編譯器下,需要不同的OnRunAction函數(shù)版本,以上實現(xiàn)最為簡單,但有一些較特殊。比如:在程序啟動時,就驅(qū)動所有設(shè)備,這點本人在VC6.0環(huán)境有過經(jīng)驗,可以分享一下,其它環(huán)境下,還需同胞們一起去努力發(fā)現(xiàn)。

  還有一點聲明,多線程技術(shù)也不是一無是處,在花費時間較頻繁的通訊編程方面,它的優(yōu)勢,還是有相當?shù)恼T惑力。
 

相關(guān)論文

暫無評論信息



相關(guān)論文

打印本頁

聯(lián)系方式

—北京新敏興業(yè)環(huán)境科技發(fā)展有限公司
地址:北京市石景山區(qū)玉泉西里二區(qū)遠洋山水4號樓首層2-102號
郵編:100040
電話:010-88685781 88685782 
傳真:010-88685783
網(wǎng)址:www.bjxmxy.com
*留言類型: 采購咨詢 售后咨詢
*聯(lián)系人:
*聯(lián)系電話:
*電子郵箱:
*單位名稱:
*留言內(nèi)容:
 
1024在线播放| 亚洲国产精品自产在线播放| 中文字幕综合网| 草莓视频在线观看黄| 欧美怡红院在线| 在线观看亚洲av每日更新| 午夜看片在线观看| 久久久综合亚洲色一区二区三区| 韩国理论电影午夜三级717| 欧男同同性videos免费| 国产精品美女乱子伦高| 人妻少妇精品专区性色AV| 丝袜足液精子免费视频| 精品国产v无码大片在线观看| 日本午夜电影院| 国产尤物二区三区在线观看 | 一本大道道无香蕉综合在线| 精品免费人成视频APP| 成人毛片18岁女人毛片免费看| 国产乱弄免费视频| 久久在精品线影院精品国产| 试看60边摸边吃奶边做| 日本免费福利视频| 国产六月婷婷爱在线观看| 久久精品夜色国产亚洲av| 色视频色露露永久免费观看| 日韩精品无码一区二区三区| 国产成人精品无缓存在线播放| 亚洲va成无码人在线观看天堂| 韩国高清在线观看| 日本电影一区二区三区| 国产亚洲欧美日韩亚洲中文色 | 欧美人与性动交α欧美精品 | 波多野结衣种子网盘| 在线免费观看欧美大片| 亚洲毛片无码专区亚洲乱| 91在线激情在线观看| 曰批全过程免费视频免费看| 国产在线视频你懂的| 久久久久成人片免费观看蜜芽| 精品久久久久久无码中文野结衣 |