快上网专注成都网站设计 成都网站制作 成都网站建设
成都网站建设公司服务热线:028-86922220

网站建设知识

十年网站开发经验 + 多家企业客户 + 靠谱的建站团队

量身定制 + 运营维护+专业推广+无忧售后,网站问题一站解决

php使用串口发送数据 php请求接口数据

php如何利用串口连接电路板

php在部分应用偶尔和串口直接通信,需要和rs232、rs485接口上的数据进行通信。

公司主营业务:成都网站建设、成都网站设计、移动网站开发等业务。帮助企业客户真正实现互联网宣传,提高企业的竞争能力。创新互联是一支青春激扬、勤奋敬业、活力青春激扬、勤奋敬业、活力澎湃、和谐高效的团队。公司秉承以“开放、自由、严谨、自律”为核心的企业文化,感谢他们对我们的高要求,感谢他们从不同领域给我们带来的挑战,让我们激情的团队有机会用头脑与智慧不断的给客户带来惊喜。创新互联推出定南免费做网站回馈大家。

php与串口通信,基本有两种途径,通过php扩展dio,下载dio扩展:http://在php.ini打开dio扩展。

dio开启后可以通过dio_opendio_read等函数进行通信。

但dio默认只是在linux下的,好像pecl也有编译后的php_dio.dll,但我在win下测试其实无法正常使用,可能是我php版本太高,dio扩展如果能打开,网上自然有很多实例。

PHP5.4怎么对串口进行操作呢?谢谢各位

在 php.ini 配置 php_dio.dll

php手册 Direct IO 里面函数的应用 很详细

如何用串口发送数据包

当然可以。串口助手里设置好就行。比如这样设置:波特率9600,数据位8,停止位1,校验为:奇校验、偶校验、标志位....任选其一。停止位:1.

单片机里按同样设置就行。

11位是一个字节,加了开始位,停止位,还有一个TB8,多机通信地址和数据通信区分位,不是一帧,确切的说是一个字节

楼主概念错误。串口通讯里叫帧,是指完成一次完整的数据传送。一帧里可以包含多个字节(同步通讯),也可以包含一个字节。比如包含了开始位,停止位,还有一个多机通信地址和数据通信区分位TB8的一次异步发送叫一帧。其中有效的信息是一个字节。

单片机工作在方式3,波特率9600,一个开始位,一个停止位,一个TB8区分地址和数据标志位,没有校验位的,校验用的是CRC16的,在串口调试助手里的设置:波特率9600,一个开始位,一个停止位,校验方式设为“无”,为什么没有数据返回呢?在系统里就有数据返回,有人说串口调试助手只能调试8位的数据,而单片机工作在方式3,增加一个TB8位,总共是九位数据,所以串口调试助手调试不了,是这样吗?

你校验方式设置错了啊!咋能设置成

呢?

你是要看单片机有没有回传数据对吧?先看发送的是地址还是数据,再看你的SM2位咋个弄的。总之确信单片机程序没错啦,也就是确信有回传数据了,把校验方式设置成:mark.再看。

用PHP如何接收串口的数据

假设这个页面有一个功能需要操作并返回某字符串,还用一下代码可以实现执行并读取返回值。

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

$ret= fgetss($fp,255);

echo $ret."br";

fclose($fp);

串口发送与接收数据

使用RS-485串口进行通讯。

1.定义串口接收数据的缓冲区,最大可以保存64个字节 u8 RS485_RX_BUF1[64];

2.定义接收发送数据的长度 u8 RS485_RX_CNT;

3.发送数据的函数一般有两个printf和 USART_SendData,这里主要说USART_SendData的使用。printf实现的是格式化字符串,字符串比较有优势。

USART_SendData传递单个字符和指令。

4.给发送方定义一个标记位 u32 flags_send1; flags_send1

5.要发送的事件很多定义一个枚举类型的数据,将所有要发送的事件放入枚举类型数据中。

枚举类型数据将第一个定为1,其他的数据依次加1.

6.定义一个发送事件函数SendCmd(u8 cmd)

定义

7.假设要传递E_CKEYDN_INUSE1事件,要实现事件的传递,就应该将事件做参数传入SendCmd(u8 cmd)函数

此时flags_send1 |= EBIT(9)=;由第四点知道flags_send1是一个32位的无符号整型数据。所以 flags_send1 = 0000 0000 0000 0000 0000 0001 1111 1111

8.(1)UARTSend1()函数

此时的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()函数

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在通讯编码原理中,应该避免过多的重复0或者1,因为当传输变成一个长0/1时,一个脉冲干扰就会将数据截断,增加误码的概率。若通讯机不能接受10101010或者01010101,那么就是线路出现问题。这是一个判断线路状态的手段。

9.串口1接收数据

(1)通过UARTRead1()函数实现

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)函数中

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)定义接收数据标记位是 u32 flags_receive1;

通过判断RS485_RX_BUF1[6] 、RS485_RX_BUF1是否等于 ((sum 0) 0xff)、((sum 8) 0xff))来判断读入的数据是不是正确的。

RS485_RX_BUF2[6] ==1111 1111

RS485_RX_BUF2[7] == 1111 1110

正确时

接收到的数据是flags_receive1 = receive= 0000 0000 0000 0000 0000 0001 1111 1111;

不正确时 flags_receive1 |= EBIT(E_ERROR); 接收数据标记位置为错误位。

怎么用串口发送一个数组?用电脑上的串口助手发送,单片机接收后再发送给电脑?

1.首先用中断方式循环接收数据保存到数组

/********************************************

*串口数据接收中断服务

*功能:接收串口数据

********************************************/

void get(void) interrupt 4 using 0

{

unsigned char i;

if(RI)

{

for(i=0;i {

while(!RI);

table[i]=SBUF;

RI=0; //清标志位

}

}

}

再将用查询法数组中的数据循环发送给电脑

/********************************************

*串口数据发送

*功能:向串行口缓冲区发送n个数据

********************************************/

void send(void)

{

for(j=0;j {

SBUF=Table[i]; //将字符发送至缓冲区

while(!TI); //等待发送完成

TI=0; //清中断标志

}

}


新闻名称:php使用串口发送数据 php请求接口数据
本文URL:http://6mz.cn/article/hihois.html

其他资讯