假設(shè)這個(gè)頁(yè)面有一個(gè)功能需要操作并返回某字符串,還用一下代碼可以實(shí)現(xiàn)執(zhí)行并讀取返回值。
公司專注于為企業(yè)提供網(wǎng)站建設(shè)、做網(wǎng)站、微信公眾號(hào)開(kāi)發(fā)、商城網(wǎng)站定制開(kāi)發(fā),微信小程序,軟件按需求定制設(shè)計(jì)等一站式互聯(lián)網(wǎng)企業(yè)服務(wù)。憑借多年豐富的經(jīng)驗(yàn),我們會(huì)仔細(xì)了解各客戶的需求而做出多方面的分析、設(shè)計(jì)、整合,為客戶設(shè)計(jì)出具風(fēng)格及創(chuàng)意性的商業(yè)解決方案,創(chuàng)新互聯(lián)更提供一系列網(wǎng)站制作和網(wǎng)站推廣的服務(wù)。
$fp = fopen("","r");
$ret= fgetss($fp,255);
echo $ret."br";
fclose($fp);
使用RS-485串口進(jìn)行通訊。
1.定義串口接收數(shù)據(jù)的緩沖區(qū),最大可以保存64個(gè)字節(jié) u8 RS485_RX_BUF1[64];
2.定義接收發(fā)送數(shù)據(jù)的長(zhǎng)度 u8 RS485_RX_CNT;
3.發(fā)送數(shù)據(jù)的函數(shù)一般有兩個(gè)printf和 USART_SendData,這里主要說(shuō)USART_SendData的使用。printf實(shí)現(xiàn)的是格式化字符串,字符串比較有優(yōu)勢(shì)。
USART_SendData傳遞單個(gè)字符和指令。
4.給發(fā)送方定義一個(gè)標(biāo)記位 u32 flags_send1; flags_send1
5.要發(fā)送的事件很多定義一個(gè)枚舉類型的數(shù)據(jù),將所有要發(fā)送的事件放入枚舉類型數(shù)據(jù)中。
枚舉類型數(shù)據(jù)將第一個(gè)定為1,其他的數(shù)據(jù)依次加1.
6.定義一個(gè)發(fā)送事件函數(shù)SendCmd(u8 cmd)
定義
7.假設(shè)要傳遞E_CKEYDN_INUSE1事件,要實(shí)現(xiàn)事件的傳遞,就應(yīng)該將事件做參數(shù)傳入SendCmd(u8 cmd)函數(shù)
此時(shí)flags_send1 |= EBIT(9)=;由第四點(diǎn)知道flags_send1是一個(gè)32位的無(wú)符號(hào)整型數(shù)據(jù)。所以 flags_send1 = 0000 0000 0000 0000 0000 0001 1111 1111
8.(1)UARTSend1()函數(shù)
此時(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)該避免過(guò)多的重復(fù)0或者1,因?yàn)楫?dāng)傳輸變成一個(gè)長(zhǎng)0/1時(shí),一個(gè)脈沖干擾就會(huì)將數(shù)據(jù)截?cái)?,增加誤碼的概率。若通訊機(jī)不能接受10101010或者01010101,那么就是線路出現(xiàn)問(wèn)題。這是一個(gè)判斷線路狀態(tài)的手段。
9.串口1接收數(shù)據(jù)
(1)通過(guò)UARTRead1()函數(shù)實(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ù)標(biāo)記位是 u32 flags_receive1;
通過(guò)判斷RS485_RX_BUF1[6] 、RS485_RX_BUF1是否等于 ((sum 0) 0xff)、((sum 8) 0xff))來(lái)判斷讀入的數(shù)據(jù)是不是正確的。
RS485_RX_BUF2[6] ==1111 1111
RS485_RX_BUF2[7] == 1111 1110
正確時(shí)
接收到的數(shù)據(jù)是flags_receive1 = receive= 0000 0000 0000 0000 0000 0001 1111 1111;
不正確時(shí) flags_receive1 |= EBIT(E_ERROR); 接收數(shù)據(jù)標(biāo)記位置為錯(cuò)誤位。
php在部分應(yīng)用偶爾和串口直接通信,需要和rs232、rs485接口上的數(shù)據(jù)進(jìn)行通信。
php與串口通信,基本有兩種途徑,通過(guò)php擴(kuò)展dio,下載dio擴(kuò)展:http://在php.ini打開(kāi)dio擴(kuò)展。
dio開(kāi)啟后可以通過(guò)dio_opendio_read等函數(shù)進(jìn)行通信。
但dio默認(rèn)只是在linux下的,好像pecl也有編譯后的php_dio.dll,但我在win下測(cè)試其實(shí)無(wú)法正常使用,可能是我php版本太高,dio擴(kuò)展如果能打開(kāi),網(wǎng)上自然有很多實(shí)例。