<style id="7i3y3"></style>

      <sub id="7i3y3"><i id="7i3y3"></i></sub>

        午夜精品一区二区三区成人,中文字幕av一区二区,亚洲AVAV天堂AV在线网阿V,肥臀浪妇太爽了快点再快点,国产网友愉拍精品视频手机,国产精品无码a∨麻豆,久久中文字幕一区二区,a级国产乱理伦片在线观看al
        首頁 新聞 工控搜 論壇 廠商論壇 產品 方案 廠商 人才 文摘 下載 展覽
        中華工控網首頁
          P L C | 變頻器與傳動 | 傳感器 | 現場檢測儀表 | 工控軟件 | 人機界面 | 運動控制
          D C S | 工業以太網 | 現場總線 | 顯示調節儀表 | 數據采集 | 數傳測控 | 工業安全
          電 源 | 嵌入式系統 | PC based | 機柜箱體殼體 | 低壓電器 | 機器視覺
        過程控制編程之簡要探討
        深圳市雷賽智能控制股份有限公司
        收藏本文     查看收藏
        抽像一點講,過程控制滲透在生活的各個角落。特別是在數控行業,尤為明顯。早期在PLC時代,幾乎是一統天下。當大小不一的控制卡公司如雨后春筍般成長起來時,控制卡在過程控制逐步體現出強勁優勢。 其編程手段往往邦定非常成熟的編程工具,如:CB,VC,Dephi,CB。故其推廣非常迅速. 很快擁有大量客戶群。
        但是,作為編程者,碰到同一程序需要控制多個同樣設備時(動作不一定同步),往往在Window多任務系統的影響下,很快想到多線程技術,其實多線程編程對系統依賴性較強,不同級別的處理,將導致程序的維護成本增加,并且還需要考慮線程之間的通訊,使編程起來較為麻煩。事實上,依靠過程編程的思想,會使程序獲得更簡單的做法。
        純粹從編程角度來看,過程控制編程應包含幾個要素,下面以C++偽碼方式來表示一個類,較易說明問題:

        /**************************
        一個動作封裝類,包含一個
        設備的所有執行動作
        **************************/
        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: 絕對有一個不斷推動的執行過程(這是整個過程編程的心臟所在)

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

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

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

        int CAction::Control( int nStatus, void *pParam )
        {//
        此處的設計需要一點技巧,當然完全取決程序員的經驗,和對控制的理解
        switch( nStatus ){
        case Inital:
        m_pMemberData = pParam;//
        初始化邦定的用戶數據
        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; //
        正在忙,不執行
        Move(1600); //
        正向移動1600單位
        m_nWorkStep++; //
        跳至下一步
        break;
        case 1:
        if( IsMove() ) break; //
        正在忙,不執行
        Move(-1600); //
        反向移動1600單位
        m_nWorkStep=0; //
        再回至第0
        break;
        case –1000: break;//
        停止
        default: break;//
        此句最好有,以便于理解
        }
        return m_nWorkStep; //
        返回值可自定
        }
        對于Run函數須謹記一點:不要有長時間的循環操作,更不要有死循環,否則另外設備無法正確動作,因為另外的設備Run函數無法被激活執行,心臟無法跳動,只好等死吧!
        當然,還須擔心一點:多個設備同時執行時,其實時性會下降一點,若沒有特別高的要求,在現今CPU狂奔的時代,以上程序框架足已滿足90%的需求,還是有學習和理解的必要吧!


        以上的框架出來了,那么如何操作使設備驅動起來呢,不管在DOS亦或在Window系統環境里,以下的思路都一樣,參見偽代碼如下:

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

        Void OnRunAction()//
        啟動函數
        {
        //
        初始化一下
        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)//
        給予運行時間,即是驅動了
        {
        exeArray[i].Run(( void *)userData); //
        不斷驅動Action設備(即激活心臟)
        DoEvents();//
        做其它事情,如系統消息檢測,以防止死機
        }
        }

        DoEvents
        函數功能的詳解可參見本人的〈〈DMC1000控制卡不能響應系統消息〉〉,上面有不同編程工具下的實現源代碼。

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

        void OnOver()
        {
        bRunning = FALSE;//
        結束驅動
        }

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

        還有一點聲明,多線程技術也不是一無是處,在花費時間較頻繁的通訊編程方面,它的優勢,還是有相當的誘惑力。
         

        狀 態: 離線

        公司簡介
        產品目錄

        公司名稱: 深圳市雷賽智能控制股份有限公司
        聯 系 人: 梁邦敏
        電  話: 755-26401178
        傳  真:
        地  址: 深圳市南山區登良路天安南油工業區2棟3樓
        郵  編: 518000
        主  頁:
         
        該廠商相關技術文摘:
        CNC解釋庫調用接口詳述
        DMC1000控制卡不能響應系統消息
        DMC2000脈沖速度初始化故障
        DMC2000運動控制卡常見軟件問題的解決方案
        DMC2200驅動程序特殊安裝方法
        DMC3000控制卡,與CNC之G代碼的邦定關系
        DMC3000控制卡的多任務編程
        多類型運動控制卡編程方法探討
        多線程與控制卡編程
        發現步進電機定位不準怎么辦
        控制卡應用編程技巧幾招(2)
        更多文摘...
        立即發送詢問信息在線聯系該技術文摘廠商:
        用戶名: 密碼: 免費注冊為中華工控網會員
        請留下您的有效聯系方式,以方便我們及時與您聯絡

        關于我們 | 聯系我們 | 廣告服務 | 本站動態 | 友情鏈接 | 法律聲明 | 不良信息舉報
        工控網客服熱線:0755-86369299
        版權所有 中華工控網 Copyright©2022 Gkong.com, All Rights Reserved

        主站蜘蛛池模板: 精品一区二区不卡无码AV| 久久亚洲国产精品一区二区| 亚洲精品日本一区二区| 欧美色a电影精品aaaa| 精品尤物国产尤物在线看 | 永久免费无码av在线网站| 久久99精品久久久久久青青| 成人免费xxxxx在线观看| 国产精品成人午夜福利| 人妻日韩精品中文字幕| 精品人人妻人人澡人人爽人人牛牛| 妺妺窝人体色WWW看人体| 国产精品一区中文字幕| 你懂的一区二区福利视频| 亚洲一级特黄大片在线播放| 中文字幕成人精品久久不卡| 人妻av无码系列一区二区三区| 国产综合久久99久久| 国产精品二区中文字幕| 久久人妻精品国产| 国产喷白浆精品一区二区| 日韩精品中文字幕有码| 国产深夜福利在线观看网站| 人人妻人人澡人人爽欧美二区| 女人与牲口性恔配视频免费| 精品人妻少妇嫩草av专区| 中文字幕理伦午夜福利片| 久久婷婷五月综合色国产免费观看 | 深夜精品免费在线观看| 青青草国产线观看| 中文一区二区视频| 中文字幕乱码亚洲美女精品| 人妻丰满熟妞av无码区| 成人中文在线| 国产片av在线观看国语| 久久精品国产99国产精品严洲| 影音先锋2020色资源网| Y111111国产精品久久久| 丰满人妻熟妇乱又伦精品app | 中文字幕av无码免费一区| 中文字幕有码免费视频|