s7.net 写数据到plc_机器视觉软件开发系列——松下PLC下位机通信协议简介和实现...
前些章節(jié)我們理解和實現(xiàn)了三菱PLC的MC協(xié)議以及實現(xiàn),接下來我們看看松下PLC的協(xié)議以及實現(xiàn),在我的文章系列中,我會把常用的PLC的協(xié)議以及實現(xiàn)都講解一次,以供大家在使用的過程中減小重復工作,也供大家參考,在我機器視覺與下位機通信程序中,我只實現(xiàn)了寄存器的讀寫操作,因為在我的應用中只會跟寄存器進行交互,只實現(xiàn)他,如果要實現(xiàn)其他的,你可根據(jù)寄存器的模式,再根據(jù)協(xié)議實現(xiàn)即可。
松下PLC協(xié)議叫 NEWTOCOL 協(xié)議
NEWTOCOL
如上圖,PC發(fā)送Command命令,PLC收到后回復Response響應給到PC端,在這里Command就是協(xié)議,Response是PLC回復的協(xié)議內(nèi)容。
協(xié)議格式
Header表示一幀消息發(fā)送開始
Destination 表示PLC的單元號從01開始,最大支持32。官方文檔有說,如果寫成FF表示全局傳輸,一次發(fā)送給所有單元。
Text 表示傳輸協(xié)議的具體內(nèi)容,后面會講解。
CheckCode 為校驗的,可以寫成**,這里使用BCC,BCC是使用水平奇偶校驗執(zhí)行錯誤檢查的代碼,以提高了發(fā)送數(shù)據(jù)的可靠性,計算方法是從Header到Text位置,異或得到。
BCC求取
Terminal 為結(jié)尾符,再開始和結(jié)尾符中間代表一幀數(shù)據(jù)。
下面我以寄存器的讀寫來說明具體的Text內(nèi)容。讀寄存器為RD 寫寄存器為 WD
RD 讀寄存器數(shù)據(jù)格式
讀
CR表示結(jié)尾符,換行
其中數(shù)據(jù)類型有三種類型 D--數(shù)據(jù)寄存器 L--連接數(shù)據(jù)寄存器 F--文件寄存器,在我的demo程序中是D數(shù)據(jù)寄存器
正?;貜?/strong>
正常回復
回復數(shù)據(jù)中,我們要用的就是RD后面的數(shù)據(jù)到BCC數(shù)據(jù)之前的,一個寄存器就是一個字,也就是4個字節(jié),如上圖,記得高低位要交換
異?;貜?/strong>
異?;貜?/p>
異?;貜椭杏?‘!’你可以通過是否有這個字符來確定是否異常。
WD 寫寄存器數(shù)據(jù)格式
寫寄存器
寫數(shù)據(jù)類型有三種類型 D--數(shù)據(jù)寄存器 L--連接數(shù)據(jù)寄存器 F--文件寄存器。
回復正常
寫入成回復
異常回復
寫入失敗回復
可以看返回值是否包含!來判斷是否正常
上代碼
//讀寄存器private int ReadPanNWord(int nStarAddr, int nWordNum, ref string data) { if (null == Connect) throw new Exception("PLC連接對象位null"); int nRet = -1; string sendData = string.Format("%01#RDD{0:D5}{1:D5}**總結(jié)
以上是生活随笔為你收集整理的s7.net 写数据到plc_机器视觉软件开发系列——松下PLC下位机通信协议简介和实现...的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python中深拷贝和浅拷贝_**Pyt
- 下一篇: ThinkPHP6项目基操(15.实战部