无码中文字幕色专区_91av俱乐部_无码人妻h动漫_26uuu成人_91九色丨porny丨国产jk_青青视频在线播放_国内自拍第二页_国产又粗又长又爽又黄的视频_色哟哟免费网站_久久出品必属精品_a级黄色一级片_99日在线视频

首頁 新聞 工控搜 論壇 廠商論壇 產(chǎn)品 方案 廠商 人才 文摘 下載 展覽
中華工控網(wǎng)首頁
  P L C | 變頻器與傳動 | 傳感器 | 現(xiàn)場檢測儀表 | 工控軟件 | 人機界面 | 運動控制
  D C S | 工業(yè)以太網(wǎng) | 現(xiàn)場總線 | 顯示調(diào)節(jié)儀表 | 數(shù)據(jù)采集 | 數(shù)傳測控 | 工業(yè)安全
  電 源 | 嵌入式系統(tǒng) | PC based | 機柜箱體殼體 | 低壓電器 | 機器視覺
多類型運動控制卡編程方法探討
深圳市雷賽智能控制股份有限公司
收藏本文     查看收藏
運動控制卡發(fā)展越來越訊速,不同類型的控制卡亦多種多樣,使軟件項目經(jīng)理具備越來越靈活的方案選擇。而對于軟件開人員,對不同的類型卡的性能測試工作無疑也越來越麻煩,通常各類型的控制卡其驅(qū)動庫函數(shù)各不一樣,都需要用戶自己進行整理封裝。本文的目的就是通過C++方式編程,探討一下實現(xiàn)多類型卡編程方式,以供開發(fā)人員參考。

一、利用C++虛擬函數(shù)機制
除了手動去單個修改替換以前卡的驅(qū)動函數(shù)之外,此方法最易被C++程序員所想起,其方法是,首先需要建立一個通用的基類(父),然后不同卡封裝的類通過重寫基類的虛擬函數(shù)來實現(xiàn),代碼看上去大致如下:
class CDviece//
用戶根據(jù)自己的設(shè)置建立的基類
{
public:
virtual int InitBoard(); //
在此僅以初始化函數(shù)為例
… (
)
};

class CDmc1000Card: public CDviece //
設(shè)該卡為雷賽的DMC1000
{
public:
virtual int InitBoard()
{
return dmc1000_init_board();
}//
改進基類的InitBoard函數(shù)
…(
其它改寫略去)
}

class COMS: public CDviece //
設(shè)該卡為美國的OMS
{
public:
virtual int InitBoard()
{

}
…(
其它改寫略去)
}

在程序中,若想設(shè)備使用DMC1000控制卡,可定義如下:
CDviece *pMineDviece = new CDmc1000Card;
改為OMS控制卡則一樣:
CDviece *pMineDviece = new COMS;
而其它代碼調(diào)用InitBoard函數(shù)可以不去改動,照常使用:
if( pMineDviece->InitBoard() )
{
…(Do s.th)
}

使用此方法,需要根據(jù)當前設(shè)備配置情況,完整的寫好CDviece的所有函數(shù),同樣,從CDviece派生的控制卡類,也需要將父類虛擬函數(shù)全部改寫完畢,對函數(shù)返回值,參數(shù)都需要進行規(guī)范,同時,修改完成之后,將整個軟件工程全部編譯一次。
利用虛擬函數(shù)方法,會帶來虛擬函數(shù)表的成本開銷,隨著CDivece需要的函數(shù)增加,其成本會相應(yīng)的增加,事實上,MFC的消息機制就是以代碼的方法實現(xiàn)了虛擬函數(shù)的機制,只不過虛擬函數(shù)的處理是通過C++編譯器來完成的。
并且,CDviece的需求發(fā)生變化時,其派生類的函數(shù)相應(yīng)的也要發(fā)生變化,這一點是程序員需要注意的。

二、利用DLL動態(tài)庫實現(xiàn)
COM組件編程過來的人,很容易想到DLL的實現(xiàn)方案。看重這一點是的只要主程序框架寫得正確,改變DLL即可實現(xiàn)主程序不編譯,即可獲得不同類型卡的選擇。
事實上,這是一種美好的愿望,要實現(xiàn)起來并不容易,而且很需要程序員有熬夜的精神。大致偽代碼實現(xiàn)如下:

class CDviece
{
private:
HANDLE dllHandle;
public:
typedef int( *P_InitBoard)(void );
P_InitBoard InitBoard;
…(
其它所有定義及聲明略去)

int InitFunction( char *dllFileName )//
調(diào)用DLL文件
{
dllHandle = LoadLibaray( dllFileName );
InitBoard = (P_InitBoard)FindFunction(dllHandle, “Init_Board”);
… (
其它略去)
}
}
由于不同卡的函數(shù)名都不一樣,故需要程序員按照CDviece所需函數(shù)進行另一DLL的編寫,若需要DMC1000控制卡時,則需要生成一個MDMC1000.dll如下:

int InitBoard()
{
return dmc1000_board_init();
}
…(
其它略去)

生成OMS控制卡的MOMS.dll如法炮制:
int InitBoard()
{
}
…(
其它略去)

在代碼中調(diào)用DMC1000控制卡,使用如下:
CDviece mineDviece;
mineDviece.LoadLibaray(“Mdmc1000.dll”);
if( mineDviece.InitBoard() )
{
…(Do s.th)
}
使用OMS控制卡如下:
mineDviece.LoadLibaray(“Moms.dll”);
…(
其它略去)

看似簡單,實質(zhì)上略去的部分將是程序員的一場惡夢,想一想那一大堆的定義和聲明,一碰到CDviece的變動,哪怕是最小的函數(shù)返回值或參數(shù)變動,則其它相應(yīng)的所有DLL都需跟全部編譯。這無疑給軟件項目的整個維護帶來極大的難度。

三、利用模板類實現(xiàn)
探討到現(xiàn)在,本人比較推薦的就是使用此方法,它較虛擬函數(shù)相比無額外成本的開銷,更不有因為虛擬函數(shù)帶來的效率問題。
DLL方法相比,定義聲明,及變動性都非常良好,整個維護的成本也較低。
其編程特點即是,通過模板定義一個空殼類,然后根據(jù)需要可以邦定不同類型的控制卡。其偽代碼實現(xiàn)方法如下:

//
定義一個空殼類
template
class CDviece: public CARD
{
public:
CDviece(){}
~CDviece(){}
}//
簡單吧,了無秘密可言

以下定義DMC1000封裝類:
class CDmc1000Card //
無需繼承
{
public:
int InitBoard( void )
{
return dmc1000_board_init();
}
…(
其它略去)
}

以下定義OMS封裝類:
class COMS
{
public:
int InitBoard( void )
{
}
}

在程序中應(yīng)用時,調(diào)用DMC1000控制卡如下:

typedef CDviece DEVIECE;
DEVIECE mineDviece;
if( mineDviece.InitBoard() )
{
…(Do s.th)
}
當然,DEVIECE的定義也可以如下形式:
class DEVIECE: public CDviece
{
public:
DEVIECE(){}
~DEVIECE(){}
}
調(diào)用OMS控制卡如下:
typedef CDvieceDEVIECE;
…(
其它同上)

可以看到,此方法還是讓人感到興奮的。即使參數(shù)或聲明發(fā)生變化或忘記定義,那就讓編譯器來查錯吧!
順帶提一下,由于控制卡封裝時,總有一些數(shù)據(jù)結(jié)構(gòu)是通用的,對此解決方法也很簡單,實現(xiàn)如下:
struct tag_CARD
{
…(
定義通用數(shù)據(jù),如每轉(zhuǎn)脈沖數(shù),最大速度值,行程范圍等等之類)
}
再改變一下CDmc1000Card如下形式:
class CDmc1000Card: public tag_CARD //
其它不變,OMS的定義同理

四、設(shè)立一個卡類型變量
此方法最為簡單,缺點是需要同時鏈接全部的控制卡驅(qū)動庫函數(shù),且在程序安裝時,還需要考慮各種控制卡的驅(qū)動程序或其相應(yīng)的動態(tài)庫是否存在。其偽代碼形式下如:
enum{ NOCARD=0,DMC1000=1, OMS=2 …};
class CCtrlCard
{
public:
int m_nCardType;//
記錄控制卡類型變量

CCtrlCard():NOCARD(0){}
~CCtrlCard(){}

int InitBoard( int nCardType )
{
m_nCardType = nCardType;
switch( nCardType ){
case DMC1000:
if( d1000_board_init() <= 0 )
m_nCardType = NOCARD;//
初始化失敗
else{
}
break;
case OMS:

break;
default:
m_nCardType = NOCARD;
}
return m_nCardType;
}
//
其它省略
};

調(diào)用時偽代碼形式如下:
CCtrlCard card;
if( card.InitBoard( DMC1000 ) != DMC1000 )
//
初始化失敗
else
//
找到控制卡
 

狀 態(tài): 離線

公司簡介
產(chǎn)品目錄

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

關(guān)于我們 | 聯(lián)系我們 | 廣告服務(wù) | 本站動態(tài) | 友情鏈接 | 法律聲明 | 不良信息舉報
工控網(wǎng)客服熱線:0755-86369299
版權(quán)所有 中華工控網(wǎng) Copyright©2022 Gkong.com, All Rights Reserved

无码中文字幕色专区_91av俱乐部_无码人妻h动漫_26uuu成人_91九色丨porny丨国产jk_青青视频在线播放_国内自拍第二页_国产又粗又长又爽又黄的视频_色哟哟免费网站_久久出品必属精品_a级黄色一级片_99日在线视频
国产精品呻吟| 午夜亚洲福利在线老司机| 日韩福利一区| 欧美一区网站| 日本欧洲一区二区| 91精品韩国| 国产成人免费精品| 国产欧美三级| 日本欧美韩国一区三区| 丝袜a∨在线一区二区三区不卡| 久久国产中文字幕| 日本免费久久| 91精品韩国| 久久精品1区| 99久久99视频只有精品| av亚洲一区二区三区| 久久人人97超碰国产公开结果| 成人亚洲一区二区| 国产精品99视频| 98精品视频| 日韩大片在线播放| 热三久草你在线| 香蕉成人av| 日韩中文在线播放| 亚洲高清影视| 午夜日本精品| 亚洲欧美久久久| 一区二区日韩免费看| 日韩精品免费观看视频| 亚洲精品123区| 国产亚洲精品久久久久婷婷瑜伽| 日韩午夜黄色| 免费精品国产的网站免费观看| 国产尤物精品| 亚洲人成在线网站| 亚洲激情国产| 欧美国产另类| 日韩久久精品| 伊人成人在线视频| 日韩一区二区三区精品| 免费视频一区二区三区在线观看 | 午夜精品婷婷| 亚洲欧美在线专区| 欧美啪啪一区| 日韩中文在线播放| 国产精品美女| 久久av免费| 黄色不卡一区| 国产日韩精品视频一区二区三区| 日韩毛片视频| 日韩视频一二区| 久久久久久夜| 丝袜美腿亚洲一区二区图片| 丝袜亚洲另类欧美| 国产成人精品免费视| 国产二区精品| 国产精品久久久一区二区| 亚洲成人av观看| 视频福利一区| 欧美视频一区| 不卡在线一区二区| 久久麻豆视频| 亚洲免费毛片| 欧美va天堂| 国产精品久久免费视频| 99国产精品久久久久久久成人热| 国产一区二区三区国产精品| 蜜桃免费网站一区二区三区| 激情综合婷婷| 日韩精品一二区| 视频二区不卡| 青草综合视频| 亚洲一级在线| 日本а中文在线天堂| 日韩精品一区第一页| 欧美成人日韩| 国产亚洲一区二区手机在线观看 | 国产精品91一区二区三区| 国产精品中文| 免费国产亚洲视频| 久久青草久久| 精品视频在线观看网站| 免费在线看一区| 99精品在线观看| 麻豆视频在线观看免费网站黄| 日韩av在线免费观看不卡| 国产视频一区欧美| 欧美性感美女一区二区 | 美国av一区二区| 神马午夜在线视频| 久久中文欧美| 欧美日韩黄网站| 日本欧美韩国一区三区| 四虎精品永久免费| 日本欧洲一区二区| 亚洲主播在线| 亚洲神马久久| 91精品91| 好吊视频一区二区三区四区| 精品视频网站| 久久免费福利| 国产成人精品亚洲线观看 | 蜜乳av另类精品一区二区| 亚洲成人一区在线观看| 精品国产不卡一区二区| 奇米色欧美一区二区三区| 日韩三级一区| 日韩av成人高清| 久久国内精品视频| 综合一区在线| 日本在线不卡视频一二三区| 亚洲三级av| 日韩久久99| 国产精品日韩精品中文字幕| 国产美女久久| 精品国产乱码久久久| 91视频精品| 99久久激情| 红桃视频国产精品| 国产农村妇女精品一区二区| 快she精品国产999| 日韩激情一二三区| 国产精品a久久久久| 国产aⅴ精品一区二区三区久久 | 色婷婷色综合| 午夜精品久久久久久久久久蜜桃| 久久中文字幕av| 久久成人亚洲| 日韩美女国产精品| 日本免费一区二区视频| 日韩精品亚洲一区二区三区免费| 美女视频黄久久| 欧美+亚洲+精品+三区| 久久亚洲风情| 精品视频在线观看网站| 国产真实久久| 日本三级亚洲精品| 欧美天堂视频| 国内精品伊人| 99热精品在线| 精品欧美视频| 久久亚洲风情| 日韩欧美在线中字| 亚洲欧洲专区| 香蕉久久精品| 国产精品成人国产| 中文在线不卡| 国产一二在线播放| 日本va欧美va精品发布| 999视频精品| 久久久国产精品网站| 日韩精品一二三四| 精品三区视频| 亚洲我射av| 91精品在线观看国产| 亚洲美女91| 激情综合婷婷| 久久伊人久久| 国产精品毛片在线| 精品色999| 99国产精品| 亚洲久久视频| 成人日韩精品| 欧美在线网站| 国产情侣久久| 激情91久久| 四虎884aa成人精品最新| 日韩va亚洲va欧美va久久| 91av亚洲| 亚洲精品韩国| 午夜精品影院| 欧美韩日一区| 日本91福利区| 国产一区白浆| 亚洲激情婷婷| 99久久久久国产精品| 久久精品国产在热久久| 中文字幕免费精品| 蜜桃tv一区二区三区| 久久精品国产99国产| 亚洲激情社区| 超碰在线99| 日韩高清在线一区| 国产高清一区二区| 精品亚洲a∨一区二区三区18| 亚洲一区二区三区四区五区午夜| 国产不卡人人| 亚洲乱码视频| 老司机精品久久| 久久国产亚洲精品| 精品久久一区| 在线亚洲国产精品网站| 久久国产免费看| 综合国产在线| 亚洲v天堂v手机在线| 一区在线免费观看| 免播放器亚洲| 日韩二区在线观看| 日韩av成人高清| 国产精品一区高清|