不請自來
1 首先,你這個說法是錯誤的,485是不能直接控制交流電機的,一般是透過控制伺服驅動器或是變頻器實現的。
2 485通訊簡介
3 交流電機簡介
4 變頻器簡介
以上廢話共計一萬字,大家可以自行查詢
透過通訊來實現控制電機,一般有兩種方式,一種是透過端子控制啟停,透過通訊給定速度。另外一種全部透過通訊實現。如果使用485控制,建議使用前一種。
一般來說,485是一種通訊介面,但是在工控行業,它既可以指通訊介面,也可以指通訊線路,也可以指通訊協議,含義是廣泛的。MODBUS是一種非常廣泛的通訊協議,最初它是在RS485介面上實現的,所以,現在說到485和MODBUS,意思是一樣的。但還是有些許區別的。所有的變頻器的485介面都是支援MODBUS協議的,所以,現在說到485一般都是指MODBUS協議。
MODBUS協議,是由美國莫迪康公司提出的一個通訊協議,是第一個用於工業現場的通訊協議,它的出現標誌著工業控制從模擬量時代向通訊時代邁進。經過幾十年的發展,MODBUS已經成為事實上的RS485 通訊標準,廣泛應用於DCS,PLC儀器儀表等等,打敗眾多敵人的正是它的可靠,簡單,免費。MODBUS廣泛用於對實時性要求不高,傳輸距離不太遠,資料量不太大的場合。你可以盡情的使用,而不用去問為什麼,因為它是完全免費的,沒人會問你要錢。而它的開發也同樣簡單,你可以輕易開發出符合MODBUS規範的元器件,和其他廠商的裝置交換資料。
正所謂青山依舊在,幾度夕陽紅。MODBUS就像步兵用的迫擊炮一樣,雖然簡單便宜,甚至那麼LOW,但卻不動如山的在自動化領域穩如泰山,而開發它的美國莫迪康公司確命途多舛,幾易其主,最後歸於法國施耐德電氣旗下。值得一提的是,莫迪康公司的創始人,正是由PLC之父稱呼的迪克莫利先生,而他已經在2017年10月19日去世,是的,有的人死了,他永遠活著。
通訊的用途是互動資訊,因此,通訊只是手段,能互動資訊才是目的,怎樣理解MODBUS,我們不妨舉個例子,比如你有個朋友住在中央大街1號樓的12號房間,你要告訴他你們晚上20點見面,那麼這一串資訊就是
01 01 12 20
01 是地址 01 是告訴 12 是房間號 20 是地址。如果換成專業術語,可以表示,往01變頻器的12地址 寫入12。看下圖,這就是MODBUS通訊的標準幀。
1號樓是地址域 告訴 是功能碼 也就是寫入。資料有兩部分組成 房間號和內容,就是往告訴12號房間20點。差錯校驗是為了防止資料幀在傳輸過程中出錯而設定的,也就是我們常說的偶校驗 奇校驗 停止位。
MODBUS常用的功能碼如下,但用的最多的是03 和16 也就是每次讀取或寫入一個WORD 也就是16位的資料。
由於MODBUS只定義了應用層,因此可以在多種電氣介面上應用,用於網路的MODBUS/TCP 已經成為事實上的工業乙太網標準。
隨著目前OEM市場競爭的激烈,在不降低裝置可靠性的情況下降低成本,已經成為提高競爭力 的關鍵,而MODBUS就是最好的選擇,因為它比用模擬量模組便宜多了
而使用MODBUS通訊,一般是在PLC中編寫程式,不同的PLC實現方法是不一樣的,需要自行檢視手冊
各個PLC對MODBUS 的處理不盡相同,但還是有些套路可尋的,今天就一邊給大家講解,一邊介紹一下MODBUS通訊的套路。
施耐德PLC通訊的套路就是三個功能塊,ADDM ,READ_VAR,WRITE_VAR,下面分別介紹
1 ADDM
ADDM功能塊是地址轉換,就是把PLC 的物理地址轉換成PLC可識別的地址型別,這句話比較拗口,通俗講,就是把字串型變數,轉換成ADDRESS 型變數,我們還是看例子
圖一 ADDM功能塊
如圖一,圖中紅色圓圈內就是一個字串型變數 "2,1" 第一個數字2表示PLC 的串列埠2,第二個數字1 表示讀取的從站地址,也就是變頻器的地址,而此功能塊就是把此地址轉換成ADDRESS型變數 A1_Add。也許你會有疑問,為什麼這麼做?我也不知道,此款PLC就是這樣,這就是它的套路,對於此種套路,我們只能牢記。在其他PLC特別是日系,一般是透過設定引數的方式實現,也有使用指令的。
還有一點,黃色熒光筆部分的三個黑點,是表示電路相通,而它正是把轉換好的地址賦值給下面我們要介紹的功能塊。也就是說,讀寫功能塊讀取或寫入變數的從站地址就是使用變數A1_Add。
2 WRITE_VAR
此功能塊是用於往從站寫資料,也就是寫入變頻器的執行頻率。
圖二 WRITE_VAR 功能塊
這個功能塊的資訊量就很大了,我們一點點分析
1 看黃色熒光筆部分 Addr,這個就是從站的地址,也就是變頻器的地址,它是一個ADDRESS型變數,就是我們在ADDM功能塊中轉化的,就是圖一的那三個黑點,就是連線到此處的,這也是CFC的優點,要用的變數輕鬆一連,而在FBD或是LD 中,我們就要建立一箇中間變數傳遞一下了。
2 下面三處用熒光筆表示的 就是此功能塊的精髓了,它表示往變頻器的地址0002開始寫入一個WORD型變數,而寫的這個數值放在PLC變數Fre裡,這就是這個功能塊的目的,也是此次通訊的目的,執行結果,就是把PLC變數Fre的值,寫到了變頻器的0002裡面。當然,此處我們只寫入了一個WORD,其實此功能塊是支援一次寫入125個的,因為Quantity是一個SINT型變數。Fre是一個數組型變數,當我們要一次寫入很多數值的時候,用陣列就很方便了。
此處有個知識點,通訊只能讀取或是寫入WORD型變數,而WORD型變數的值只能是正數,當我們要讀取或是寫入負數的時候,該怎麼辦呢?大家可以思考一下。
3 右邊紅色圓圈是功能塊的輸出,它表示了功能塊執行的各種狀態,它是標準的PLCopen訊號(關於PLCopen以後會詳細介紹,今天只介紹與此功能塊有關的)
Done 表示功能塊執行正常後置為TRUE,此處,我們取它的反訊號來監控通訊狀態,如果超過3S沒有Done訊號,我們可以認為此次寫入失敗,那麼就代表通訊失敗。
Busy表示功能塊執行情況的輸出,如果為高電平,表示功能塊正在執行。我們讀取它的下降沿,來觸發下一次操作。
Error是功能塊的錯誤,可能你會有疑問,為什麼通訊錯誤不用這個訊號呢?其實這個錯誤表示的範圍更廣,它表示功能塊檢測到錯誤就報警,有時候,我們通訊正常,但是當我們讀取的資料有問題,或是引數設定不正確時,也會報錯,而我在程式中的錯誤僅僅是通訊不上的錯誤,也就是,這個Error表示的範圍更廣泛,它更適合我們除錯的時候監控。而我在程式中取的通訊錯誤,是在上位機做監控用的。
3 READ_VAR
讀取和寫入的功能塊完全一樣,大家可以嘗試自己分析一下。
圖三 READ_VAR功能塊
4 資料的處理
圖四 資料的處理
這段是程式中和我們直接相關的,寫入的頻率,讀取的頻率和電流都是用MOVE指令處理,放到指定的變數中,方便我們使用,畢竟通訊的最終目的就是互動資料。
總結:這就是施耐德PLC,MODBUS/RTU通訊程式的三個功能塊,其實本文還有一個目的,那就是我在前面文章指出,初學PLC有一個很大的誤區,就是喜歡對著影片或是書本一條條學指令,其實這是錯誤的,正確的方式是在程式中學習指令,試想,如果你不知道MODBUS通訊,沒有這個通訊例子,乾巴巴的學這三個功能塊,是很枯燥的,是毫無意義的,你也許心裡會有一萬匹草泥馬奔騰而過,這都是些什麼玩意,但是當你根據這個例項,當你面對一個變頻器要用通訊控制的時候,再去學習這三個指令,是不是很輕鬆呢?至少,心裡有了目的。
設定通訊引數(主要是波特率,校驗,地址),並確保PLC和變頻器側引數一致,讀取或寫入變數的地址,個數以及資料型別(日系PLC不需要這一步,因為它不定義變數),是使用MODBUS基本套路。當你使用不同的PLC時,你的任務就是在軟體中找到實現這些功能的地方,就可以完成通訊。還有一點注意,不同的廠家,MODBUS介面是不一樣的,常見的有DB9 RJ45,還有最簡單的螺釘接線。
圖五DB9
圖六RJ45
如 圖五 圖六 所示,是常用的MODBUS接線端子,使用時,務必仔細閱讀手冊,確定 正 負 端子。
在大量使用功能塊,而且功能塊之間聯絡比較緊密的場合,使用CFC語言時最佳選擇,比如串列埠通訊,運動控制,高速計數等等。而這些場合用梯形圖,那酸爽,用過日系PLC 的朋友應該很清楚,寫了幾個螢幕的程式,還沒有進入主題。當然,也可以用ST語言來寫,那樣逼格簡直就是沒法形容了,不過對於後期維護很不方便,因為這麼多變數,ST語言的可讀性會很差,不過,對保護自己的智慧財產權,到是很不多。因為,要想看懂ST寫的這種程式,確實很費勁。
不請自來
1 首先,你這個說法是錯誤的,485是不能直接控制交流電機的,一般是透過控制伺服驅動器或是變頻器實現的。
2 485通訊簡介
3 交流電機簡介
4 變頻器簡介
以上廢話共計一萬字,大家可以自行查詢
透過通訊來實現控制電機,一般有兩種方式,一種是透過端子控制啟停,透過通訊給定速度。另外一種全部透過通訊實現。如果使用485控制,建議使用前一種。
一般來說,485是一種通訊介面,但是在工控行業,它既可以指通訊介面,也可以指通訊線路,也可以指通訊協議,含義是廣泛的。MODBUS是一種非常廣泛的通訊協議,最初它是在RS485介面上實現的,所以,現在說到485和MODBUS,意思是一樣的。但還是有些許區別的。所有的變頻器的485介面都是支援MODBUS協議的,所以,現在說到485一般都是指MODBUS協議。
MODBUS協議,是由美國莫迪康公司提出的一個通訊協議,是第一個用於工業現場的通訊協議,它的出現標誌著工業控制從模擬量時代向通訊時代邁進。經過幾十年的發展,MODBUS已經成為事實上的RS485 通訊標準,廣泛應用於DCS,PLC儀器儀表等等,打敗眾多敵人的正是它的可靠,簡單,免費。MODBUS廣泛用於對實時性要求不高,傳輸距離不太遠,資料量不太大的場合。你可以盡情的使用,而不用去問為什麼,因為它是完全免費的,沒人會問你要錢。而它的開發也同樣簡單,你可以輕易開發出符合MODBUS規範的元器件,和其他廠商的裝置交換資料。
正所謂青山依舊在,幾度夕陽紅。MODBUS就像步兵用的迫擊炮一樣,雖然簡單便宜,甚至那麼LOW,但卻不動如山的在自動化領域穩如泰山,而開發它的美國莫迪康公司確命途多舛,幾易其主,最後歸於法國施耐德電氣旗下。值得一提的是,莫迪康公司的創始人,正是由PLC之父稱呼的迪克莫利先生,而他已經在2017年10月19日去世,是的,有的人死了,他永遠活著。
通訊的用途是互動資訊,因此,通訊只是手段,能互動資訊才是目的,怎樣理解MODBUS,我們不妨舉個例子,比如你有個朋友住在中央大街1號樓的12號房間,你要告訴他你們晚上20點見面,那麼這一串資訊就是
01 01 12 20
01 是地址 01 是告訴 12 是房間號 20 是地址。如果換成專業術語,可以表示,往01變頻器的12地址 寫入12。看下圖,這就是MODBUS通訊的標準幀。
1號樓是地址域 告訴 是功能碼 也就是寫入。資料有兩部分組成 房間號和內容,就是往告訴12號房間20點。差錯校驗是為了防止資料幀在傳輸過程中出錯而設定的,也就是我們常說的偶校驗 奇校驗 停止位。
MODBUS常用的功能碼如下,但用的最多的是03 和16 也就是每次讀取或寫入一個WORD 也就是16位的資料。
由於MODBUS只定義了應用層,因此可以在多種電氣介面上應用,用於網路的MODBUS/TCP 已經成為事實上的工業乙太網標準。
隨著目前OEM市場競爭的激烈,在不降低裝置可靠性的情況下降低成本,已經成為提高競爭力 的關鍵,而MODBUS就是最好的選擇,因為它比用模擬量模組便宜多了
而使用MODBUS通訊,一般是在PLC中編寫程式,不同的PLC實現方法是不一樣的,需要自行檢視手冊
各個PLC對MODBUS 的處理不盡相同,但還是有些套路可尋的,今天就一邊給大家講解,一邊介紹一下MODBUS通訊的套路。
施耐德PLC通訊的套路就是三個功能塊,ADDM ,READ_VAR,WRITE_VAR,下面分別介紹
1 ADDM
ADDM功能塊是地址轉換,就是把PLC 的物理地址轉換成PLC可識別的地址型別,這句話比較拗口,通俗講,就是把字串型變數,轉換成ADDRESS 型變數,我們還是看例子
圖一 ADDM功能塊
如圖一,圖中紅色圓圈內就是一個字串型變數 "2,1" 第一個數字2表示PLC 的串列埠2,第二個數字1 表示讀取的從站地址,也就是變頻器的地址,而此功能塊就是把此地址轉換成ADDRESS型變數 A1_Add。也許你會有疑問,為什麼這麼做?我也不知道,此款PLC就是這樣,這就是它的套路,對於此種套路,我們只能牢記。在其他PLC特別是日系,一般是透過設定引數的方式實現,也有使用指令的。
還有一點,黃色熒光筆部分的三個黑點,是表示電路相通,而它正是把轉換好的地址賦值給下面我們要介紹的功能塊。也就是說,讀寫功能塊讀取或寫入變數的從站地址就是使用變數A1_Add。
2 WRITE_VAR
此功能塊是用於往從站寫資料,也就是寫入變頻器的執行頻率。
圖二 WRITE_VAR 功能塊
這個功能塊的資訊量就很大了,我們一點點分析
1 看黃色熒光筆部分 Addr,這個就是從站的地址,也就是變頻器的地址,它是一個ADDRESS型變數,就是我們在ADDM功能塊中轉化的,就是圖一的那三個黑點,就是連線到此處的,這也是CFC的優點,要用的變數輕鬆一連,而在FBD或是LD 中,我們就要建立一箇中間變數傳遞一下了。
2 下面三處用熒光筆表示的 就是此功能塊的精髓了,它表示往變頻器的地址0002開始寫入一個WORD型變數,而寫的這個數值放在PLC變數Fre裡,這就是這個功能塊的目的,也是此次通訊的目的,執行結果,就是把PLC變數Fre的值,寫到了變頻器的0002裡面。當然,此處我們只寫入了一個WORD,其實此功能塊是支援一次寫入125個的,因為Quantity是一個SINT型變數。Fre是一個數組型變數,當我們要一次寫入很多數值的時候,用陣列就很方便了。
此處有個知識點,通訊只能讀取或是寫入WORD型變數,而WORD型變數的值只能是正數,當我們要讀取或是寫入負數的時候,該怎麼辦呢?大家可以思考一下。
3 右邊紅色圓圈是功能塊的輸出,它表示了功能塊執行的各種狀態,它是標準的PLCopen訊號(關於PLCopen以後會詳細介紹,今天只介紹與此功能塊有關的)
Done 表示功能塊執行正常後置為TRUE,此處,我們取它的反訊號來監控通訊狀態,如果超過3S沒有Done訊號,我們可以認為此次寫入失敗,那麼就代表通訊失敗。
Busy表示功能塊執行情況的輸出,如果為高電平,表示功能塊正在執行。我們讀取它的下降沿,來觸發下一次操作。
Error是功能塊的錯誤,可能你會有疑問,為什麼通訊錯誤不用這個訊號呢?其實這個錯誤表示的範圍更廣,它表示功能塊檢測到錯誤就報警,有時候,我們通訊正常,但是當我們讀取的資料有問題,或是引數設定不正確時,也會報錯,而我在程式中的錯誤僅僅是通訊不上的錯誤,也就是,這個Error表示的範圍更廣泛,它更適合我們除錯的時候監控。而我在程式中取的通訊錯誤,是在上位機做監控用的。
3 READ_VAR
讀取和寫入的功能塊完全一樣,大家可以嘗試自己分析一下。
圖三 READ_VAR功能塊
4 資料的處理
圖四 資料的處理
這段是程式中和我們直接相關的,寫入的頻率,讀取的頻率和電流都是用MOVE指令處理,放到指定的變數中,方便我們使用,畢竟通訊的最終目的就是互動資料。
總結:這就是施耐德PLC,MODBUS/RTU通訊程式的三個功能塊,其實本文還有一個目的,那就是我在前面文章指出,初學PLC有一個很大的誤區,就是喜歡對著影片或是書本一條條學指令,其實這是錯誤的,正確的方式是在程式中學習指令,試想,如果你不知道MODBUS通訊,沒有這個通訊例子,乾巴巴的學這三個功能塊,是很枯燥的,是毫無意義的,你也許心裡會有一萬匹草泥馬奔騰而過,這都是些什麼玩意,但是當你根據這個例項,當你面對一個變頻器要用通訊控制的時候,再去學習這三個指令,是不是很輕鬆呢?至少,心裡有了目的。
設定通訊引數(主要是波特率,校驗,地址),並確保PLC和變頻器側引數一致,讀取或寫入變數的地址,個數以及資料型別(日系PLC不需要這一步,因為它不定義變數),是使用MODBUS基本套路。當你使用不同的PLC時,你的任務就是在軟體中找到實現這些功能的地方,就可以完成通訊。還有一點注意,不同的廠家,MODBUS介面是不一樣的,常見的有DB9 RJ45,還有最簡單的螺釘接線。
圖五DB9
圖六RJ45
如 圖五 圖六 所示,是常用的MODBUS接線端子,使用時,務必仔細閱讀手冊,確定 正 負 端子。
在大量使用功能塊,而且功能塊之間聯絡比較緊密的場合,使用CFC語言時最佳選擇,比如串列埠通訊,運動控制,高速計數等等。而這些場合用梯形圖,那酸爽,用過日系PLC 的朋友應該很清楚,寫了幾個螢幕的程式,還沒有進入主題。當然,也可以用ST語言來寫,那樣逼格簡直就是沒法形容了,不過對於後期維護很不方便,因為這麼多變數,ST語言的可讀性會很差,不過,對保護自己的智慧財產權,到是很不多。因為,要想看懂ST寫的這種程式,確實很費勁。