使用PHP控制MODBUS-RTU設備

        在工控、物聯、智能等項目中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

     下一步確認我們的邏輯,演示中我們簡單的演示兩次呼吸,即閉開閉開。

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([email protected]

     捐助&支持OHSCE:http://www.ohsce.com/index.php/company/

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章