OHSCE入門教程(三)-PHP串口通信、構建高可靠性的總線應用。

(寫於OHSCE_V0.1.25)

   終於等到這篇文章了吧,其實之所以先寫了TCP/UDP的是因爲在現在的環境下它倆是相輔相成的,其實在控制領域我們所說的TCP/UDP和串口總線應用非常接近,和普通的互聯網網絡應用還是有着很大區別的,畢竟絕大部分網絡控制產品都是從總線控制產品升級而來或沿襲了可靠的設計而產出的,本質上基本是一樣的(這也就是爲什麼在使用OHSCE完成您的需求能夠讓您“稀裏糊塗”的順利躲過了很多使用其它辦法時的坑)。控制領域是個很寬的領域,它包含了或有交集於時下熱門的物聯網萬物互聯、工業4.0智能製造、行業智能化、人工智能、各種與控制相關的雲等云云種種。

   有人表達說"控制的世界沒有異步",這句話說來也對也錯,一個繼電器或是開或是閉同一時間只有一種狀態,每一步邏輯都是縝密的,工藝越複雜系統越龐大對可靠性的要求越高。隨着系統集成的需求越來越深,互聯網+的概念侵入和發展,事情被詮釋的越來越多元化。不過話又說回來,對高可靠性的要求是永遠一成不變的,畢竟是控制。雖然現在一些諸如採集手環,隨身血壓採集等物聯網應用因業務場景簡單所以一些不可靠的問題暫時不會釀成事故,但隨着業務複雜度的提升和系統集成度的提高開發者很快就會意識到這個道理。

    一、OHSCE中的封裝函數。

    主要分爲封裝函數和基礎函數,絕大多數的需求使用封裝函數即可完成,但是OHSCE也提供給您了操作更接近底層的基礎函數庫。

    Ohsce_eng_serial_X 是您在構建串口總線應用時主要應用的封裝函數。

   絕大多數情況,任何串口設備或總線網絡在上位機/網關的角度上看,通信的門就是那幾個電氣接口首先你先要高清你使用的是哪個串口,我們演示使用COM7(由USB轉發485)。

(*設備上常見直接有的接口:RS232<俗稱9針>、RS485、RS422、USB<通用串行總線基本是機器都有>、TTL(常見於單片機)等等等等等....)

    想使用OHSCE中的所有函數很簡單,只需要引入OHSCE的加載文件即可。

<?php
ini_set('memory_limit',"88M");//重置php可以使用的內存大小爲88M
set_time_limit(0);
ob_implicit_flush(1);
include('loadohsce.php');

   (獲取OHSCE: http://www.ohsce.org & https://github.com/OpenIBC/Ohsce)

    二、創建一個串口資源

   Ohsce_eng_serial_creat 可以爲您創建一個完備的串口資源,該資源可以複用可以克隆,您之後的所有操作均可以通過該函數所創建的資源完成。

Ohsce_eng_serial_creat($hscecom,"com7",1,0,9600,'n',8,1); 

  這行代碼爲您創建了一個變量名爲$hscecom的指定串口爲com7,並且以讀寫方式打開(1),使用原生底層函數操作(0),波特率爲9600,無校驗位,數據位爲8,停止位爲1的資源。其實如果您恰巧就是在使用9600,n,8,1完全可以寫的再短點,它和下面這段代碼是等同的,因爲OHSCE默認會爲您填充全部參數。

hsce_eng_serial_creat($hscecom,"com1");

    其實除此之外此函數可以設置更多的參數。具體請參考OHSCE的手冊->函數參考

Ohsce_eng_serial_creat(&$OHSCESerial,$com,$flags="1",$mode=0,$baud=9600,$parity='n',$data=8,$stop=1,$fc='none',$xon='off',$to='off',$octs='off',$odsr='off',$idsr='off',$dtr='on',$rts='on',$space=0)

   當您創建完成這個資源的時候其實默認載入了3ms的發送延遲,這是一個全局值,在創建時被寫入資源。若要改變這個間隔除了改變space參數外(注意爲0時失效),需要使用Ohsce_eng_serial_setspace函數(0值有效)。但是不建議您消除這個間隔,近乎任何情況下它的存在只會有益無害。

    三、打開一個串口資源並佔用這個接口

    非常簡單的一行,就可以讓您的進程打開一個資源並佔用所指定的串口。

    Ohsce_eng_serial_open (內置函數)

Ohsce_eng_serial_open($hscecom); 

   值得注意的是,一般情況下一個串口同一時間只能被一個資源所佔用,當您需要在兩個進程之間交替時需要先使用close釋放。(_M_X系版本提供的多進程共同佔用一個串口實際上是提供了一個緩衝進程做到,本質上還是一個由一個進程佔用。)

   四、寫與讀的操作

  大部分總線設備均是上位機輪詢的模式,雖然也有一些設備是主動上報但是我們認爲輪詢的模式設計更爲合理故我們演示的也是先寫後讀。

   此時我們演示一次在RS485總線上使用MODBUS-RTU協議讀取設備保持寄存器的操作。

Ohsce_eng_serial_write($hscecom,"01030001000415c9",true);

  向串口設備發送數據,後面的true表示是以16進制發送。(這個以16禁止發送的意思是您發送的數據輸入的是16進制格式的"01030001000415c9"而不是"100000011000000000000000100000000000001000001010111010000"的意思。)

   讀取設備的返回。

usleep(3000);
Ohsce_eng_serial_read($hscecom,$data,null,true); 

   讀取串口數據 返回數據長度爲未知 以16進制返回。其中$data變量中存的就是返回的數據。

   五、記得關閉您的串口資源。

Ohsce_eng_serial_close($hscecom);

   關閉一個資源並不會將這個資源清空刪除,只是釋放了此串口的控制權方便另一個進程繼續調用使用此串口。當然如果您需要讓您的這個進程保持佔有此接口的話就不要調用這個函數啦。

   六、花絮函數

   Ohsce_eng_serial_comwr  -進行一次連續的寫讀操作

  Ohsce_eng_serial_npcomwr-使用額外的全新的進程進行一次連續的寫讀操作(基礎環境必須運行中)。操作結束後額外的進程會立即結束。

   (OHSCE的PRO擴展也會帶來一些函數如ohsce_ext_modbus_x ohsce_ext_profibus_x等等,我們會在擴展的說明書詳細闡述。)

   七、打磨您的工藝細化您的控制流程,並保持更新您的OHSCE框架至最新的穩定版本。

   OHSCE願每一名控制工程師都可以搭上互聯網+的翅膀,每一名PHPWEB工程師都可以衝在物聯網的前言,我們的程序是您可靠的基石。

     官方網站:http://www.ohsce.org & http://www.ohsce.com

     開發者QQ羣:374756165

     GITHUB:https://github.com/OpenIBC/Ohsce

     手冊地址:http://www.ohsce.com/index.php/book/

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