[週邊教程]使用OHSCE控製MODBUS-RTU設備

2017-01-20 14:27:00    admin    6290    原創
摘要:使用PHP語言應用OHSCE框架開髮對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); i n c l u d e('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朋友請務必核實您的串口的超時機製已經打開併設置瞭閤適的超時時間.否則會導緻函數長時間阻塞.不會操作的朋友請看這裡:http://www.ohsce.com/index.php/book/ohscezjcj/112.html]

     [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); i n c l u d e('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/

蟬知 蟬知5.3.4