php發(fā)送串口數(shù)據(jù) php接收前端傳的數(shù)組

用PHP如何接收串口的數(shù)據(jù)

假設(shè)這個頁面有一個功能需要操作并返回某字符串,還用一下代碼可以實現(xiàn)執(zhí)行并讀取返回值。

公司專注于為企業(yè)提供網(wǎng)站建設(shè)、做網(wǎng)站、微信公眾號開發(fā)、商城網(wǎng)站定制開發(fā),微信小程序,軟件按需求定制設(shè)計等一站式互聯(lián)網(wǎng)企業(yè)服務(wù)。憑借多年豐富的經(jīng)驗,我們會仔細了解各客戶的需求而做出多方面的分析、設(shè)計、整合,為客戶設(shè)計出具風格及創(chuàng)意性的商業(yè)解決方案,創(chuàng)新互聯(lián)更提供一系列網(wǎng)站制作和網(wǎng)站推廣的服務(wù)。

$fp = fopen("","r");

$ret= fgetss($fp,255);

echo $ret."br";

fclose($fp);

串口發(fā)送與接收數(shù)據(jù)

使用RS-485串口進行通訊。

1.定義串口接收數(shù)據(jù)的緩沖區(qū),最大可以保存64個字節(jié) u8 RS485_RX_BUF1[64];

2.定義接收發(fā)送數(shù)據(jù)的長度 u8 RS485_RX_CNT;

3.發(fā)送數(shù)據(jù)的函數(shù)一般有兩個printf和 USART_SendData,這里主要說USART_SendData的使用。printf實現(xiàn)的是格式化字符串,字符串比較有優(yōu)勢。

USART_SendData傳遞單個字符和指令。

4.給發(fā)送方定義一個標記位 u32 flags_send1; flags_send1

5.要發(fā)送的事件很多定義一個枚舉類型的數(shù)據(jù),將所有要發(fā)送的事件放入枚舉類型數(shù)據(jù)中。

枚舉類型數(shù)據(jù)將第一個定為1,其他的數(shù)據(jù)依次加1.

6.定義一個發(fā)送事件函數(shù)SendCmd(u8 cmd)

定義

7.假設(shè)要傳遞E_CKEYDN_INUSE1事件,要實現(xiàn)事件的傳遞,就應(yīng)該將事件做參數(shù)傳入SendCmd(u8 cmd)函數(shù)

此時flags_send1 |= EBIT(9)=;由第四點知道flags_send1是一個32位的無符號整型數(shù)據(jù)。所以 flags_send1 = 0000 0000 0000 0000 0000 0001 1111 1111

8.(1)UARTSend1()函數(shù)

此時的flags_send1 = 0000 0000 0000 0000 0000 0001 1111 1111;

sb[2] = (flags_send1 0) 0xff = 1111 1111;

sb[3] = (flags_send1 8) 0xff = 0000 0001;

sb[4] = (flags_send1 16) 0xff = 0000 0000;

sb[5] = (flags_send1 24) 0xff = 0000 0000;

(2)checksum()函數(shù)

d0=(senddata 0) 0xff=0000 0001 1111 1111;

d1=(senddata 8) 0xff=0000 0001 0xff=0000 0000 0000 0001;

d2=(senddata 16) 0xff=0000 0000 0xff = 0000 0000 0000 0000;

d3=(senddata 24) 0xff=0000 0000 0xff = 0000 0000 0000 0000;

sum=0000 0010 0000 0000;

~sum=1111 1101 1111 1111;

sb[6] = (sum 0) 0xff = 1111 1111 0xff = 1111 1111 ;

sb[7] = (sum 8) 0xff = 1111 1101;

(3)

為什么定義sb[8]的前兩位是0x55,0xaa?

0xaa是1010 1010,0x55是0101 0101在通訊編碼原理中,應(yīng)該避免過多的重復0或者1,因為當傳輸變成一個長0/1時,一個脈沖干擾就會將數(shù)據(jù)截斷,增加誤碼的概率。若通訊機不能接受10101010或者01010101,那么就是線路出現(xiàn)問題。這是一個判斷線路狀態(tài)的手段。

9.串口1接收數(shù)據(jù)

(1)通過UARTRead1()函數(shù)實現(xiàn)

receive += (RS485_RX_BUF1[2] 0) = 0000 0000 0000 0000 0000 0000 1111 1111; ;

receive += (RS485_RX_BUF1[3] 8) = 0000 0000 0000 0000 0000 0001 1111 1111

receive += (RS485_RX_BUF1[4] 16) = 0000 0000 0000 0000 0000 0001 1111 1111

receive += (RS485_RX_BUF1[5] 24) = 0000 0000 0000 0000 0000 0001 1111 1111

(2)將receive傳入checksum(u32 senddata)函數(shù)中

d0= 0000 0000 1111 1111;

d1=0000 0000 0000 0001

d2= 0000 0000 0000 0000

d3=0000 0000 0000 0000

sum=0000 0001 0000 0000

~sum = 1111 1110 1111 1111

(3)定義接收數(shù)據(jù)標記位是 u32 flags_receive1;

通過判斷RS485_RX_BUF1[6] 、RS485_RX_BUF1是否等于 ((sum 0) 0xff)、((sum 8) 0xff))來判斷讀入的數(shù)據(jù)是不是正確的。

RS485_RX_BUF2[6] ==1111 1111

RS485_RX_BUF2[7] == 1111 1110

正確時

接收到的數(shù)據(jù)是flags_receive1 = receive= 0000 0000 0000 0000 0000 0001 1111 1111;

不正確時 flags_receive1 |= EBIT(E_ERROR); 接收數(shù)據(jù)標記位置為錯誤位。

php如何利用串口連接電路板

php在部分應(yīng)用偶爾和串口直接通信,需要和rs232、rs485接口上的數(shù)據(jù)進行通信。

php與串口通信,基本有兩種途徑,通過php擴展dio,下載dio擴展:http://在php.ini打開dio擴展。

dio開啟后可以通過dio_opendio_read等函數(shù)進行通信。

但dio默認只是在linux下的,好像pecl也有編譯后的php_dio.dll,但我在win下測試其實無法正常使用,可能是我php版本太高,dio擴展如果能打開,網(wǎng)上自然有很多實例。

本文名稱:php發(fā)送串口數(shù)據(jù) php接收前端傳的數(shù)組
文章網(wǎng)址:http://muchs.cn/article20/hjcpco.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站維護、App開發(fā)、建站公司、網(wǎng)站排名移動網(wǎng)站建設(shè)、用戶體驗

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

商城網(wǎng)站建設(shè)