在工控、物聯、智能等項目中MODBUS-RTU設備是最多見的類型之一,它多采用RS485/232的總線通訊方式,MODBUS-RTU協議歷史悠久成熟可靠。咱們今天說的就是使用PHP語言應用OHSCE框架進行MODBUS-RTU設備的通用控制。
1、準備
PHP 5.4 及以上 php
OHSCE V0.1.26(FIX20170120) 及以上html
電腦(充當上位機)一臺git
MODBUS控制器github
相關配套散件bash
2、編寫控制程序網絡
首先先確保您的OHSCE已經開啓了CLOUD_API和MODBUS_CLOUD_DRIVER功能,這各在V0.1.26及以後版本是默認開啓的。並確保您的上位機能夠API.CLOUD.OHSCE.COM可靠連接。OHSCE在V0.1.25_B_2版本以後引入了CLOUD_API和CLOUD_DRIVER功能,這樣能夠分立組件的升級頻率,沒必要頻繁的升級OHSCE主程序,選擇性的升級CLOUD_API和安裝CLOUD_DRIVER便可以在不升級主程序的狀況下只要保證網絡連通性便可使用最新的功能及驅動(前提是所需功能最低可以支持到運行中的OHSCE主版本)。從而達到升級頻率:OHSCE<OHSCE_CLOUD_API<OHSCE_CLOUD_DRIVER的目的。隨着測試正常的推薦,將會陸續上線很是豐富的協議支持和特定設備的私有驅動支持。框架
在您的程序開頭初始化您的OHSCE框架環境,很簡單隻要引入OHSCE的自動加載文件便可。函數
<?php /* OHSCE_V0.1.26_B 高可靠性的PHP通訊框架。 HTTP://WWW.OHSCE.ORG @做者:林友哲 393562235@QQ.COM 做者保留所有權利,請依照受權協議使用。 */ ini_set('memory_limit',"64"); //重置php能夠使用的內存大小爲64M set_time_limit(0); //程序不超時 ob_implicit_flush(1); include('loadohsce.php'); //引入OHSCE自動加載文件
OHSCE自動加載文件容許您將OHSCE保存爲名爲ohsce的文件夾並在上級目錄引入加載文件從而使得您的程序代碼更加的整潔。測試
|U PRO網站
|-/OHSCE/
|-loadohsce.php
如今查閱設備的說明書,搞清須要讀/寫的數據的寄存器/線圈的地址,以便將待控設備加入本身的程序邏輯。
在本例中咱們咱們選用了一臺AOAIDODI全能的複合控制採集器但僅僅演示對00000H長爲1的地址的繼電器(DO1)進行單路控制。即圖中接燈的那路。
例中使用COM7進行通訊,其實咱們是將一個USB(通串)轉爲RS485總線進行通訊,掛站一個地址爲01,波特率9600,校驗無(N),數據位8,停1。
Ohsce_eng_serial_creat($hscecom,"com7",1,0,9600,'n',8,1); //咱們建立了一個串口資源並存入了$hscecom變量中,串口爲com7,權限爲1(寫讀),方式0(默認),波特率9600,無校驗,數據位8,中止位1
該函數的更詳細的說明詳見手冊:Ohsce_eng_serial_creat
[這裏有一點注意部分WINDOWS朋友請務必覈實您的串口的超時機制已經打開並設置了合適的超時時間.不然會致使函數長時間阻塞.]
[LINUX下是/dev/ttyXX]
下一步確認咱們的邏輯,演示中咱們簡單的演示兩次呼吸,即閉開閉開。
Ohsce_eng_serial_open($hscecom); //打開並佔用串口資源 $test=null; ohsce_drive_cloud_modbus($hscecom,"RTU","write",'01',"00000","FF00");//調用雲MODBUS驅動 方式一 使用此方式進行一次閉合 sleep(1); Ohsce_eng_serial_write($hscecom,ohsce_drive_cloud_modbus($test,"RTU","write",'01',"00000","0000")['data'],false);//調用雲MODBUS驅動 方式二 使用此方式進行一次開啓 sleep(1); Ohsce_eng_serial_write($hscecom,ohsce_drive_cloud_modbus($test,"RTU","write",'01',"00000","FF00")['data'],false);//調用雲MODBUS驅動 方式二 使用此方式進行一次閉合 sleep(1); ohsce_drive_cloud_modbus($hscecom,"RTU","write",'01',"00000","0000");//調用雲MODBUS驅動 方式一 使用此方式進行一次開啓 Ohsce_eng_serial_close($hscecom);//不要忘記關閉串口資源
在例中咱們演示了OHSCE中MODBUS雲驅動的兩種調用方式,方式一爲全自動的調用方式含發送、接收回饋、校驗並判斷結果爲一體,方式二爲單步調用,例如這裏就是近寫不考慮設備反饋成功與否。
MODBUS_CLOUD_DRIVER位於手冊的/組件&插件/DRIVER/中: 快速使用
完整的程序代碼:
<?php /* OHSCE_V0.1.26_B 高可靠性的PHP通訊框架。 HTTP://WWW.OHSCE.ORG @做者:林友哲 393562235@QQ.COM 做者保留所有權利,請依照受權協議使用。 */ ini_set('memory_limit',"88M");//重置php能夠使用的內存大小爲64M set_time_limit(0); ob_implicit_flush(1); include('loadohsce.php'); sleep(10); echo 'OK?'; sleep(2); Ohsce_eng_serial_creat($hscecom,"com7"); Ohsce_eng_serial_open($hscecom); $test=null; ohsce_drive_cloud_modbus($hscecom,"RTU","write",'01',"00000","FF00");//調用雲MODBUS驅動 方式一 sleep(1); Ohsce_eng_serial_write($hscecom,ohsce_drive_cloud_modbus($test,"RTU","write",'01',"00000","0000")['data'],false);//調用雲MODBUS驅動 方式二 sleep(1); Ohsce_eng_serial_write($hscecom,ohsce_drive_cloud_modbus($test,"RTU","write",'01',"00000","FF00")['data'],false); sleep(1); ohsce_drive_cloud_modbus($hscecom,"RTU","write",'01',"00000","0000"); Ohsce_eng_serial_close($hscecom);
將其另存爲test.php
3、運行測試
以WINDOWS系統爲例(上位機絕大多數爲WINDOWS)
編寫一個BAT(TEST.BAT)
php %cd%/test.php
確認串口閒置併爲設備上電,運行TEST.BAT
(沒法查看視頻可看此簡圖)
4、附
測試期間CLOUD_API/CLOUD_DRIVER可能會有比較多的調整,因此儘量的跟隨升級這兩個組件。因爲咱們的IDC資源目前相對有限,因此OHSCETRY/GUEST/FREE/OPEN等TOKEN調用API會有相對的限制。大頻率用戶能夠聯繫咱們進行本地化服務,本地化將失去和雲端同步升級、改進實時修正的優點,每一次跟進都須要進行一次本地化。
官方網站:http://www.ohsce.org & http://www.ohsce.com
開發者QQ羣:374756165
GITHUB:https://github.com/OpenIBC/Ohsce
GIT@OSC:https://git.oschina.net/SFXH/Ohsce
手冊地址:http://www.ohsce.com/index.php/book/
合做&贊助:393562235(393562235@qq.com)
捐助&支持OHSCE:http://www.ohsce.com/index.php/company/