一摔竿、簡介 ? ? ?
?EPOS給的這個VC代碼是用MFC編寫的上位機,由圖1可知EPOS控制器最多可以設(shè)置九種控制方式移宅,而這個上位機默認(rèn)只能使用“Profile Position Mode”畸肆,電機參數(shù)配置界面和驅(qū)動界面分別如圖2圖3所示。注意選擇EPOS2控制器,連接方式一般都是默認(rèn)串口發(fā)送齐疙。
二膜楷、控制思路
? ? ? 1、配置完控制器參數(shù)后進入圖3控制界面贞奋,在對話框初始化函數(shù)BOOL CDemo_WinDLLDlg::OnInitDialog()中調(diào)用OpenDevice()函數(shù)判斷控制器與電機是否成功打開赌厅,若打開則開啟定時器,以100ms的周期更新數(shù)據(jù)并改變界面顯示轿塔。其中OpenDevice()函數(shù)核心代碼如下圖所示特愿。
下面簡要介紹圖4中主要的幾個函數(shù),詳細介紹請見EPOS2-24-2文件夾下《EPOS Command Library》的PDF文件勾缭。
VCS_ClearFault(m_KeyHandle, m_usNodeId, &m_ulErrorCode):清除錯誤狀態(tài)揍障,使電機由錯誤狀態(tài)轉(zhuǎn)到關(guān)閉狀態(tài)。
VCS_GetOperationMode(m_KeyHandle, m_usNodeId, &m_bMode, &m_ulErrorCode):讀取電機驅(qū)動狀態(tài)俩由,變量m_bMode返回驅(qū)動方式編號毒嫡。
VCS_GetPositionProfile(m_KeyHandle, m_usNodeId, &m_ulProfileVelocity, &m_ulProfileAcceleration, &m_ulProfileDeceleration, &m_ulErrorCode):讀取位置驅(qū)動方式的各項參數(shù),m_ulProfileVelocity返回穩(wěn)定時轉(zhuǎn)速幻梯,m_ulProfileAcceleration和m_ulProfileDeceleration分別返回電機加速和減速時的加速度兜畸。
VCS_SetOperationMode(m_KeyHandle, m_usNodeId, OMD_PROFILE_POSITION_MODE, &m_ulErrorCode):將電機驅(qū)動方式通過OMD_PROFILE_POSITION_MODE配置成Profile Position Mode努释。
VCS_SetPositionProfile(m_KeyHandle, m_usNodeId, 10000, 1000, 1000, &m_ulErrorCode):配置電機在Profile Position Mode方式驅(qū)動下的各項參數(shù),10000表示電機穩(wěn)定時的轉(zhuǎn)速咬摇,兩個1000形參表示電機加速和減速時的加速度伐蒂。
VCS_GetPositionIs(m_KeyHandle, m_usNodeId, &m_lStartPosition, &m_ulErrorCode):獲取電機此時的各項位置參數(shù),m_lStartPosition返回函數(shù)被調(diào)用時電機實際位置肛鹏,即為初始位置逸邦。
2、在圖3界面配置控制器節(jié)點ID和目標(biāo)位置信息龄坪,通過m_lTargetPosition變量獲取設(shè)定的目標(biāo)位置信息昭雌,并且選擇是相對轉(zhuǎn)動方式還是絕對轉(zhuǎn)動方式,若為前者則電機會轉(zhuǎn)動目標(biāo)位置距離健田,否則則是電機轉(zhuǎn)動到設(shè)定的絕對位置處為止烛卧。
3、點擊ENABLE按鈕妓局,使能電機总放,注意此時并沒有開始驅(qū)動電機。主要采用的核心代碼如圖5所示
簡要介紹相關(guān)函數(shù):
UpdateNodeIdString():將節(jié)點ID編輯框中的數(shù)值轉(zhuǎn)換成字符串類型好爬,即更新參數(shù)m_usNodeId局雄。
VCS_GetFaultState(m_KeyHandle, m_usNodeId, &oFault, &m_ulErrorCode):判斷電機是否處于錯誤狀態(tài),是則oFault=true存炮,判斷失敗則函數(shù)返回0炬搭。
VCS_ClearFault(m_KeyHandle, m_usNodeId, &m_ulErrorCode):清除存在的錯誤,使電機從錯誤狀態(tài)變成失能狀態(tài)穆桂。
4宫盔、點擊MOVE按鈕,實現(xiàn)電機轉(zhuǎn)動享完,驅(qū)動代碼如圖6所示灼芭。
簡要介紹相關(guān)代碼:
m_lFirstTargetPosition用來存儲初次設(shè)置的目標(biāo)位置(比如9722000表示90圈)。
VCS_GetPositionIs(m_KeyHandle, m_usNodeId, &m_lStartPosition, &m_ulErrorCode):獲取此時位置信息般又,通過m_lStartPosition返回顯示在初始位置編輯框彼绷。
VCS_MoveToPosition(m_KeyHandle, m_usNodeId, m_lTargetPosition, m_oRadio, m_oImmediately, &m_ulErrorCode):驅(qū)動電機轉(zhuǎn)動到響應(yīng)位置,m_oRadio表示相對轉(zhuǎn)動還是絕對轉(zhuǎn)動茴迁,m_oImmediately為true表示立即驅(qū)動寄悯,若為false則表示等上次驅(qū)動到指定位置,才開始本次驅(qū)動堕义。
UpdateStatus():更新對話框顯示热某。
5、點擊HALT按鈕,使電機處于暫停狀態(tài)昔馋,按照設(shè)定的減速時加速度值減速到0,筹吐。停止后點擊MOVE按鈕電機會重新轉(zhuǎn)動到目標(biāo)位置為止。
只調(diào)用一個函數(shù)VCS_HaltPositionMovement(m_KeyHandle, m_usNodeId, &m_ulErrorCode)秘遏。
6丘薛、點擊DISABLE按鈕,使電機處于停止?fàn)顟B(tài)邦危,電機立刻停止而不是勻減速停止洋侨,并且停止后再點擊MOVE按鈕并不會繼續(xù)轉(zhuǎn)動。
核心函數(shù)只有一個:VCS_SetDisableState(m_KeyHandle, m_usNodeId, &m_ulErrorCode)倦蚪。
7希坚、定時器中電機正反向驅(qū)動切換的實現(xiàn),實現(xiàn)代碼如圖7所示陵且。(本部分代碼不屬于官方范例裁僧,自己修改)
代碼解析:
調(diào)用VCS_GetPositionIs()函數(shù)使m_lActualValue始終獲得實時電機位置信息。
通過先前m_lFirstTargetPosition變量存儲了初次設(shè)定的非0目標(biāo)位置值慕购,通過判斷語句使目標(biāo)位置m_lTargetPosition在非0值和0之間切換聊疲,實現(xiàn)自動正反向切換。