在工控、物聯、智能等項目中MODBUS-RTU設備是最常見的類型之一,它多采用RS485/232的總線通信方式,MODBUS-RTU協議歷史悠久成熟可靠。我們今天說的就是使用PHP語言應用OHSCE框架進行MODBUS-RTU設備的通用控制。
一、准備
PHP 5.4 及以上
OHSCE V0.1.26(FIX20170120) 及以上
電腦(充當上位機)一台
MODBUS控制器
相關配套散件

二、編寫控制程序
首先先確保您的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
三、運行測試
以WINDOWS系統為例(上位機絕大多數為WINDOWS)
編寫一個BAT(TEST.BAT)
php %cd%/test.php
確認串口閑置並為設備上電,運行TEST.BAT
(無法查看視頻可看此簡圖) 
四、附
測試期間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/


