PHP使用RS232串口通讯传送文件的应用演示测试环境PHP514文档格式.docx
《PHP使用RS232串口通讯传送文件的应用演示测试环境PHP514文档格式.docx》由会员分享,可在线阅读,更多相关《PHP使用RS232串口通讯传送文件的应用演示测试环境PHP514文档格式.docx(36页珍藏版)》请在冰点文库上搜索。
+15V
。
噪声容限为2V。
即
要求接收器能识别低至+3V的信号作为逻辑“0”,高到-3V的信号
作为逻辑“1”
(3)
接口的物理结构
RS-232-C接口连接器一般使用型号为DB-25的25芯插头座,通常插头在DCE端,插座在DTE端.
一些设备与PC机连接的RS-232-C接口,因为不使用对方的传送控制信号,只需三条接口线,即“发送数据”、“接收数据”和“信号地”。
所以采用DB-9的9芯插头座,传输线采用屏蔽双绞线。
(4)传输电缆长度
由RS-232C标准规定在码元畸变小于4%的情况下,传输电缆长度应为50英尺,其实这个4%的码元畸变是很保守的,在实际应用中,约有99%的用户是按码元畸变10-20%的范围工作的,所以实际使用中最大距离会远超过50英尺,美国DEC公司曾规定允许码元畸变为10%而得出附表2
的实验结果。
其中1号电缆为屏蔽电缆,型号为DECP.NO.9107723
内有三对双绞线,每对由22#
AWG
组成,其外覆以屏蔽网。
2号电缆为不带屏蔽的电缆。
型号为DECP.NO.9105856-04是22#AWG的四芯电缆。
1.RS-232-C是美国电子工业协会EIA(Electronic
Industry
Association)制定的一种串行物理接口标准。
RS是英文“推荐标准”的缩写,232为标识号,C表示修改次数。
RS-232-C总线标准设有25条信号线,包括一个主通道和一个辅助通道,在多数情况下主要使用主通道,对于一般双工通信,仅需几条信号线就可实现,如一条发送线、一条接收线及一条地线。
RS-232-C标准规定的数据传输速率为每秒50、75、
100、150、300、600、1200、2400、4800、9600、19200波特。
RS-232-C标准规定,驱动器允许有2500pF的电容负载,通信距离将受此电容限制,例如,采用150pF/m的通信电缆时,最大通信距离为15m;
若每米电缆的电容量减小,通信距离可以增加。
传输距离短的另一原因是RS-232属单端信号传送,存在共地噪声和不能抑制共模干扰等问题,因此一般用于20m以内的通信。
2.RS-485总线,在要求通信距离为几十米到上千米时,广泛采用RS-485
串行总线标准。
RS-485采用平衡发送和差分接收,因此具有抑制共模干扰的能力。
加上总线收发器具有高灵敏度,能检测低至200mV的电压,故传输信号能在千米以外得到恢复。
RS-485采用半双工工作方式,任何时候只能有一点处于发送状态,因此,发送电路须由使能信号加以控制。
RS-485用于多点互连时非常方便,可以省掉许多信号线。
应用RS-485
可以联网构成分布式系统,其允许最多并联32台驱动器和32台接收器。
以往,PC与智能设备通讯多借助RS232、RS485、以太网等方式,主要取决于设备的接口规范。
但RS232、RS485只能代表通讯的物理介质层和链路层,如果要实现数据的双向访问,就必须自己编写通讯应用程序,但这种程序多数都不能符合ISO/OSI的规范,只能实现较单一的功能,适用于单一设备类型,程序不具备通用性。
在RS232或RS485设备联成的设备网中,如果设备数量超过2台,就必须使用RS485做通讯介质,RS485网的设备间要想互通信息只有通过“主(Master)”设备中转才能实现,这个主设备通常是PC,而这种设备网中只允许存在一个主设备,其余全部是从(Slave)设备。
而现场总线技术是以ISO/OSI模型为基础的,具有完整的软件支持系统,能够解决总线控制、冲突检测、链路维护等问题。
来源网址:
从串口双机对联线缆指南
(一)串行通讯电缆的制作
无论是9孔插头,还是25孔插头,其串行通讯电缆连接时都要遵循下列对接关系:
SG←→SG TXD←→RXD RXD←→TXD RTS←→CTS
CTS←→RTS DTR←→DSR DSR←→DTR
根据上述对接关系,就可以非常方便地连接串行通讯电缆。
这里顺便介绍一下上述各引脚所代表的含义:
SG英文全称为Signal
Ground/Common
Return,表示信号地;
TXD指Transmitted
Data,表示数据发送;
RXD指Received
Data,表示接收数据;
RTS指Request
To
Send,表示发送请求;
CTS指Clear
Send,表示清除请求;
DTR指Data
Terminal
Ready,表示数据终端准备就绪;
DSR指Data
Signal
Rate
Selector,表示数据置位准备就绪。
在制作9芯串口连线时,需要2个9孔插头和1.5米长的至少7芯的扁平电缆,引脚连线如下所示。
9孔插头-9孔插头引脚连线为:
2-3、3-2、4-6、5-5、6-4、7-8、8-7。
9孔插头-25孔插头引脚连线为:
2-2、3-3、4-6、5-7、6-20、7-5、8-4。
25孔插头-25孔插头引脚连线为:
2-3、3-2、4-5、5-4、6-20、7-7、20-6。
二、测试环境的构建:
参考上面的《
(一)串行通讯电缆的制作》,首先把两台电脑通过串口连结起来。
当然,你也完全可以这么操作一台电脑上面的两个串口,而不需要两台电脑;
如果你有两个串口的话。
因为我以前做过工业控制底层开发,所以我可以很容易的构建这个基本的环境;
实际上,只要:
[color=red]RxD
TxD对接,GND直连即可,俗称三线连接。
[/color]
这一点不做任何答疑。
2.
PHP运行环境的构建:
操作系统:
WindowsXP(其他Windows系统没有测试)
PHP5.1.4:
PECL5.1.4:
解压PHP5.1.4,把PECL5.1.4之中的php_dio.dll放到PHP5.1.4的ext目录之下
把PHP5.1.4之中的php.ini-dist拷贝粘贴为php.ini,并打开设置然后保存:
extension=php_dio.dll
[
本帖最后由
HonestQiao
于
2006-6-12
22:
31
编辑
]
HonestQiao回复于:
2006-06-1120:
48:
56
三:
参考资料:
参考手册文档:
如果代码之中有你没有见过,或者没有使用过,或者不熟悉的函数,请访问以上网址。
主要使用了PHP的Direct
IO
Functions.
2006-6-11
21:
06
49:
05
四:
演示代码:
[color=Green][font=Times
New
Roman]
<
?
php
//
--------------------------------------------------------------------------
File
name
:
RS232_Server.php
Description
RS232演示上位机程序
Requirement
PHP
5.1.4
(cli)
()
//
Copyright(C),
HonestQiao,
2006,
All
Rights
Reserved.
Author:
(honestqiao@
程序简介:
本程序与RS232_Client构成一个完整的演示系统,展示了PHP在RS232串口通讯上的应用。
程序之中实现了一个基础但是完整的RS232通讯协议(HQB232),通讯协议格式如下:
协议内容:
C->
S
01
//请求通讯
S->
C
02
//响应通讯
LEN
DATA
//LEN表示数据(DATA)长度
DATA表示实际数据
03
//结束通讯
说明:
S表示上位机
C表示下位机
HQB232表示HonestQiao演示的基础(Base)RS232通讯协议,包含了协议的
请求和响应,数据帧的结构。
演示过程为通讯的请求和响应,十次数据帧的发送,
通讯的结束
数据帧的结构为当前的序号,microtime(),随机字符串
欢迎探讨PHP在RS232串口通讯上的应用。
set_time_limit(0);
exec('
mode
COM1:
baud=115200
data=8
stop=1
parity=n
xon=on'
);
$fd
=
dio_open('
'
O_RDWR);
if(!
$fd)
{
die("
Error
when
open
COM1"
}
$ff
dio_stat($fd);
print_r($ff);
echo
HQB232
SERVER
is
listenning
on
COM1\n"
;
///
read
$len
2;
$t=0;
while
(($t++)<
1000)
$data
dio_read($fd,
$len);
if
($data)
if($data==chr(0).chr
(1)){
echo
S_RECV:
01\n"
S_SEND:
02\n"
dio_write($fd,chr(0).chr
(2));
break;
}
}
$len
if($data==chr(0).chr(3)){
echo
03\n"
break;
elseif
$len
intval($data);
$data
if($data){
($len)$data\n"
dio_close($fd);
>
RS232_Client.php
RS232演示下位机程序
本程序与RS232_Server构成一个完整的演示系统,展示了PHP在RS232串口通讯上的应用。
COM2:
COM2"
CLIENT
start
COM2\n"
dio_write($fd,chr(0).chr
(1));
C_SEND:
while(($t++)<
1000)
if($data==chr(0).chr
(2)){
C_RECV:
10)
$sdata
sprintf("
%03d"
$t)
.
="
microtime()
("
randomkeys(rand(0,35))
)"
$slen
strlen($sdata);
$stxlen
%02d"
$slen);
dio_write($fd,"
$stxlen"
$sdata"
($stxlen)$sdata\n"
//sleep
(1);
dio_write($fd,chr(0).chr(3));
function
randomkeys($length)
$pattern
1234567890abcdefghijklmnopqrstuvwxyz"
for($i=0;
$i<
$length;
$i++)
$key
.=
$pattern{rand(0,35)};
return
$key;
[/font][/color]
21
2006-06-1121:
07:
18
五、演示过程:
上位机:
开始->
运行->
CMD
然后转到PHP5.1.4目录之下,执行:
php
-f
RS232_Server.php
下位机:
RS232_Client.php
实际结果如下:
F:
\usr\local\php5>
e:
\RS232_Server.php
Array
(
[device]
=>
3
[inode]
[mode]
8192
[nlink]
1
[uid]
[gid]
[device_type]
[size]
[atime]
[mtime]
[ctime]
)
COM1
01
02
(53)001=0.19238200
1150031774
(krruv981gpf1pmi1fz4qz09e9)
(42)002=0.19144800
1150031775
(jrhw41mphuy0ui)
(40)003=0.19148500
1150031776
(lqq560p6v17r)
(36)004=0.19148900
1150031777
(3ct02xmc)
(28)005=0.19212700
1150031778
(33)006=0.19162500
1150031779
(2ilqf)
(34)007=0.19167800
1150031780
(vwmdfc)
(62)008=0.19168700
1150031781
(idb0laix4a6ryxz5nb7u74iaza601it6sv)
(56)009=0.19170100
1150031782
(r9ypgtvu4j7w1u141qx6im20ajy7)
(53)010=0.19171000
1150031783
(wq5mp1sdfuet1tp0x3vk67n47)
03
\RS232_Client.php
COM2
(5