用vc++編寫窗口程序,控制多軸運動。類似於實現PLC串口通信之類的。應該學習那方面的知識,怎麼快速入手呢?
01-21
幫同學問的,應該是實驗室分給他的項目,VC++底子比較薄,不知從何下手。
最近正在做這樣一個設計,也是從不懂到略懂,走了很多彎路,到現在初有小成,反正睡不著,不如講出來分享一下,一起探討,或許可以成為借鑒。 不知你同學做的這個課題的具體要求是什麼,先說總體結構:上位機監控界面-控制器-驅動器-執行機構。上位機監控界面也就是pc端控制和監測控制器和執行機構狀態的人機交互界面,寫出這個界面的方法很多,在windows平台上,常用的就是vc和vb,還有一種就是組態軟體。對於這個類型的課題,運用組態的方法往往是最省事和有效率的,不過也有很多不足,這裡我們避而不談,直接說編程。就vc和vb而言,vb又要較為簡單,vb之於vc,就好比美圖秀秀之於ps。vb就是一個專門編寫界面的編程軟體,他的界面製作方法與vc的mfc很類似,就是首先建立一個窗體,然後給窗體裡面拉入各種功能的控制項,比如按鈕,比如文本框。這些控制項本身都具有一些常用屬性,可以在屬性欄修改,也可以在其代碼里對屬性進行操作。要讓寫出的界面實現對plc的監控,就要用到一個關鍵的控制項-mscoom串口通訊控制項。完整的vb、vc軟體都自帶這個控制項,不過需要自己添加到工具欄。vb與vc的mfc的區別之處主要就在於他們對控制項的代碼編寫上,vb要簡單得多,一個輸入密碼的登錄窗體代碼不會超過十行,鍵盤敲寫兩分鐘就可以完成。在拉入的控制項上雙擊,就可以進入該控制項的代碼編輯。代碼的內容可以理解為當這個控制項的事件發生時(按鈕被按下、計時器計時到點)所要進行的操作,通過各種變數、語句和函數完成。通訊怎麼實現?plc有個423/425或者485介面,用串列匯流排連接到電腦的com口(com口實質通常就是一個423口),根據所使用的plc的通訊協議里規定的參數,對mscomm控制項做對應的設置,主要幾個,com口口號、波特率、檢驗方式、數據位長和什麼碼,設置好了再按照plc採用的協議里規定的格式發送一串帶著所需命令的字元串給plc,接收反饋數據,顯示到界面就完了。這串字元串通常的格式為(都是十六進位):起始碼+操作命令+操作對象地址+字元數+結束碼+校驗碼。校驗碼就是根據一定的公式把前面所有字元對應的ascll碼進行運算得到的一個ascll碼對應的十六進位數碼。常用的一個叫做和校驗方式,我現在都可以口算出來。這樣一串字元串可以實現對plc中一些軟元件的讀寫操作,例如讀寄存器d、讀y是0還是1、對x或m置位等。
下面說說下位機這段。plc控制多軸獨立運動,這是一個關鍵。如果是控制伺服電機,你需要了解以下幾個問題:1、伺服電機是伺服驅動器控制的;2、plc可以通過高速口發高速脈衝、模擬脈衝和串列通訊等方式控制伺服驅動器,最簡單的就是高速脈衝;3、一般小型plc只有兩三個高速口,通過脈衝加方向的控制方式最多只能控制3軸;4、大型plc可以有多個高速口,但價格昂貴;5、plc可以外接高速口模塊,但數量不多,成本增加。6、串列匯流排編程複雜;7、……根據情況選用。比如我控制的是六軸獨立,選用的是一個小型26點輸出plc加高速口輸出模塊。plc到伺服驅動器的接線和設置比較複雜,但不存在什麼技術難題,通過查閱資料和閱讀使用說明都可以輕易解決。驅動器和與電機有兼容要求,一般同系列配套使用。電機編碼器反饋轉速給驅動器,驅動器也具有串口通訊功能,可以直接將速度信息反饋給pc,也可以通過io口輸出給plc高速脈衝計數器,由pc對計數器的讀取操作實現速度監控。完整過程大概就是這樣,一時沒想到的後續將會補充。
綜上,完成這個課題,題主的同學需要具備的條件:半懂不懂的c語言基礎;一個百度搜索框;了解mfc;了解mscomm控制項;了解232/422/485串口;了解所選用plc的通訊協議;一台plc或者一個可以模擬包括串口通訊的plc模擬軟體,這裡推薦選用三菱plc,其模擬軟體模擬軟體具備此功能,同時三菱有個mx控制項可以直接載入到vb/vc中,可以完全替代mscomm控制項,簡單設置無需了解通訊協議就可使用,代碼操作簡單很多倍;掌握plc梯形圖編程,閱讀說明書了解其軟元件的地址和指令操作;伺服驅動器的控制和接線,等等差不多就是這樣。最後歡迎評論指正,歡迎私信探討,祝樓主同學順利結課。上位機與plc之間的串口通信其實不難,因為底層的實現你不必關心,你只要知道plc是基於什麼協議(比如modbus協議),然後根據協議發送指令給plc就可以了。至於如何發送指令,你可以網上找封裝好的用於串口通信的類,如果時間急就直接用,有時間的話就可以研究研究啦。。還有據我所知,plc介面的話rs485和網口用的比較多。。。。
至於plc編程,我也不懂了
推薦閱讀:
※Windows 7 和 Windows XP 哪個對 VC6.0 的支持好?
※為什麼VS對C++11 C++14的特性支持的那麼慢?
※為什麼MSVC中的rand函數非常慢?
※在公司內部使用Visual Studio 6.0,從網上下載的盜版的,會存在被微軟起訴盜版的風險嗎?