搜档网
当前位置:搜档网 › Siemens PPI 串口通讯协议分析

Siemens PPI 串口通讯协议分析

Siemens PPI协议分析

大家好:我是山东临沂的郝金红,PLC解密网是我的个人网站。由于前段时间的疯狂的研究西门子PPI协议解密之故,所以无心插柳的研究出了较实用的西门子S7-200 PPI协议,今天奉献大家。我们经常要用于上位机、现场设备与

S7-200CPU之间的通讯,但是西门子公司没有公布PPI协议的格式,用户如果想使用PPI协议监控,必须购买其监控产品或第三方厂家的组态软件。大家要知道国内的组态王、紫金桥、力控等等组态公司是花了多少钱才得到的PPI的深层协议吗?其实西门子工控产品的超高价垄断掠夺行为已经引起了我们国家及业内人士的抵制和抗议,他们的什么软件都需要授权且对于系统的霸道性是有目共睹的,而且我是深受其害的。^_^我最近弄了个WINCC,装了一个星期还没装上,网友告诉我要重做系统才可以,悲哀啊。。。。。。

这样给用户自主开发就带来了一定的困难,特别是想用VB、VC等语言自行开发,根本没办法接入PLC,要么你大把掏钱给他们。洋为中用,最近在国外网站得到一个串口监视软件,带协议分析的相当不错,你吧!我就是通过此软件的数据监视、分析方法,找出了PPI协议的关键报文格式所在。

其实西门子S7-200 PLC之间或者PLC与PC之间通信有很多种方式:自由口,PPI方式,MPI方式,Profibus方式。使用自由口方式进行编程时,在上位机和PLC中都要编写数据通信程序。使用PPI协议进行通信时,PLC可以不用编程,而且可读写所有数据区,快捷方便。这也是我们之所以要研究、找出PPI协议的源动力!

下面我们就要说说分析的方法了!

西门子的STEP 7 MicroWIN 是用于S7-200系列PLC的开发工具,它使用PC 机上的COM口通过一条PC/PPI编程电缆连到PLC的编程口上。这说明,PC实际上是可以通过串口同S7-200 CPU通讯。只是我们不知道通讯协议而已。通过截获PC机串口上的收发数据,对照Step 7软件发出的指令,我们就有可能分析出

有关指令的报文和通讯方式;然后,直接通过串口向PLC发送报文,以验证这些指令报文是否正确。本着这一思想,我们采用以下步骤获得这些报文。

首先你这个英文的串口监控软件,英文不好的网友可以用金山快译翻译一下,你必须使用这个软件,因为我先前使用过很多的监控软件,在收发数据很多的情况下都有死机现象,造成数据丢失,容易给我们错误分析。接下来你先打开这个软件,新建、选择端口COM1,然后再将PC/PPI编程电缆接在COM1上,这样,Step7 Micro/Win发给PLC的报文就可以在监视软件上完全裸露的展现在你的面前了。我们按S7-200系统手册设置好串口参数:9600,8,E偶校验,1位停止位。然后设置好Step7软件,使之能与S7-200 CPU正常通讯。从Step7软件中发出一个明确指令,监视软件就能显示这条报文了(用16进制显示,ASCII 码的只能看到几个版本号之类的,其他都没有意义)。

我们的破解策略就是通过软件监视的方法,分析PLC内部固有的PPI通讯协议,然后上位机采用VB编程,遵循PPI通讯协议,读写PLC数据,实现人机操作任务。这种通讯方法,与一般的自由通讯协议相比,省略了PLC的通讯程序编写,只需编写上位机的通讯程序资源。S7-200的编程口物理层为RS-485结构,SIEMENS提供MicroWin软件,采用的是PPI(Point to Point)协议,关于232

串口转485你可以采用我们网站开发研制的自制PPI电缆,效果倍好哦!

还是自己动手,丰衣足食啊!

不能光说不练啊!下面我们就说说西门子PLC到底是怎么通讯的。

PC与PLC采用主从方式通讯,PC按如下文的格式发读写指令,PLC作出接收正确的响应(返回应答数据E5H或F9H见下文分析),上位机接到此响应则发出确认命令(10 02 5C 5E 16),PLC再返回给上位机相应数据。一般上位机要连接PLC就要先发送如下寻呼数据 10 02 00 49 4B 16 同志们呐!我们可都是有血、有肉、有思想、有灵感的高级动物啊,面对这么多枯燥、无味、复杂、混乱的机器数字你怎么记呢?反正我是记不住啊!(^_^开始洗脑)这时你可以闭上

眼睛,安静、静、再静。。。。。。想一想战争时期的战地对讲机通话模式,那么这个指令(10 02 00 49 4B 16)就可以理解为:00呼叫02,听到请回答。

现在我们来简单的分析一下这个指令的具体含义: 10起始符 02是上位机要联系的下位机的地址站号,就是要找的人 00就是上位级本身自己的站号 49寻呼指令 16终止符其中4B为校验码,是这样得来的:02+00+49的最后两位就是校验码,这就是所说的偶校验或称和校验也称余校验,因为取的是余数。计算器在16进制计算时公式(02+00+49)mod 100得出的数就是校验码,你计算一下是不是等于4B啊!其他的所有PPI协议校验都是如此。假如02站号的PLC收到寻呼信号那么会回答: 10 00 02 00 02 16 意思是:报告00 ,02收到,请指示这样的解释是不是很好理解啊!你有更好的解释吗?接下来呢,找到了要寻呼的人PC上位机,就是司令啦!就可以发号施令了,发号施令后PLC正确接收后就会发送 E5 字符,意思是:“02洞两明白”。其实啊,说到这里PLC只说他明白,他已经明白了上位机PC的指示,但并没有执行命令,那么要怎么他才执行命令呢?就是上位机PC发出确认命令后才执行。这时上位机会发出确认指令(10 02 5C 5E 16),意思是:“请立即执行”。然后PLC就干他应当干的工作了!原来PLC也不容易啊,怪不得叫下位机呢!

说了这么多乱不乱呐?目的就是要理清上下级关系、主从关系,指令的顺序,用一个好的记忆方法记住枯燥无味的机器码。

下面我们列表分析读取PLC密码的指令:68 1B 1B 68 02 00 6C 32 01 00 00 00 00 00 0E 00 00 04 01 12 0A 10 02 00 08 00 00 03 00 05 E0 D2 16

读命令分析:一次读一条数据

SD LE LER SD DA SA FC DASP SSAP DU FCS ED

SD:(Start Delimiter)开始定界符(68H)

LE:(Length)报文数据长度

LER:(Repeated Length)重复数据长度

SD: (Start Delimiter)开始定界符(68H)

SA:(Source Address)目标地址,指该地址的值,就是PLC的地址

DA:(Destination Address)本地地址,指该地址的指针,就是上位机自己的地址

FC:(Function Code)功能码,5CH为交替周期触发,6CH为首次信息周期触发,7CH为交替周期触发。

DSAP:(Destination Service Access Point)目的服务存取点

SSAP:(Source Service Access Point)源服务存取点

DU:(Data Unit)数据单元

FCS:(Frame Check Sequence)校验码

ED:(End Delimiter)结束分界符(16H)

报文数据长度和重复数据长度为自DA至DU的数据长度,校验码为DA至DU数据的和校验,只取其中的末字节值关于这个校验码的计算方法同上面说明。

在读写PLC的变量数据中,读数据的功能码为 6CH,写数据的功能码为 7CH。对于一次读取一个数据,读命令都是33个字节。前面的0—21字节是相同的,为

读取PLC密码的指令:68 1B 1B 68 02 00 6C 32 01 00 00 00 00 00 0E 00 00 04 01 12 0A 10 02 00 08 00 00 03 00 05 E0 D2 16

因为是PC上发的读PLC数据的命令,SA=00,DA=02,如果有多个站,DA要改成相应的站号。读命令中从DA到DU的长度为1B即27个字节。从22字节开始根据读取数据的类型、位置不同而不同。上表是读不同存储器命令的Byte22—32。

上表读命令的Byte22-32从表中我们可以得出以下结果:

Byte 22 读取数据的长度

01:1 Bit 02:1 Byte

04:1 Word 06:Double Word

Byte 24数据个数,这里是01 ,一次读多个数据时见下面的说明。

Byte 26 存储器类型,01:V存储器 00:其它

Byte 27 存储器类型

04:S 05:SM 06:AI 07:AQ 1E: C

81:I 82:Q 83:M 84:V 1F: T

Byte 28,29,30存储器偏移量指针(存储器地址*8),如:VB100,存储器地址为100,偏移量指针为800,转换成16进制就是320H,则Byte 28—29这三个字节就是:00 03 20。

Byte 31 校验和,前面已说到这是从(DA+SA+DSAP+SSAP+DU) Mod 256 。

一次读多条数据

对于一次读多个数据的情况,前21Byte与上面相似只是长度LD,LDr及Byte 14不同:

Byte 14 数据块占位字节,它指明数据块占用的字节数。与数据块数量有关,长度=4+数据块数*10,如:一条数据时为4+10=0E(H);同时读M,V,Q三个不同的数据块时为4+3*10=22(H)。

Byte 22 总是02 即以Byte为单位。

Byte 24 以字节为单位,连续读取的字节数。如读2个VD则Byte24=8

Byte 19---30 按上述一次读一个数据的格式依次列出,

Byte 31---42 另一类型的数据,也是按上述格式给出。

以此类推,一次最多读取222个字节的数据。

写命令分析:

一次写一个Double Word类型的数据,写命令是40个字节,其余为38个字节。写一个Double Word类型的数据,前面的0—21字节为:

68 23 23 68 02 00 6C 32 01 00 00 00 00 00 0E 00 00 04 01 12 0A 10

写一个其它类型的数据,前面的0—21字节为:(与上面比较,只是长度字节

发生变化)

68 21 21 68 02 00 6C 32 01 00 00 00 00 00 0E 00 00 04 01 12 0A 10

从22字节开始根据写入数据的值和位置不同而变化。上表是几个写命令的

Byte22—40。

字节 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40

写入位置及值长度个数类型偏移量位数值、校验码、结束符

M0.0=1 01 00 01 00 00 82 00 00 00 00 03 00 01 01 00 71 16

M0.0=0 01 00 01 00 00 83 00 00 00 00 03 00 01 00 00 70 16

M0.1=1 01 00 01 00 00 83 00 00 01 00 03 00 01 01 00 72 16

vb100=10 02 00 01 00 01 84 00 03 20 00 04 00 08 10 00 AE 16

vb100=FF 02 00 01 00 01 84 00 03 20 00 04 00 08 FF 00 9D 16

VW100=FFFF 04 00 01 00 01 84 00 03 20 00 04 00 10 FF FF A6 16

VD100=FFFFFFFF 06 00 01 00 01 84 00 03 20 00 04 00 20 FF FF FF FF B8 1

写命令的Byte22—最后,经分析我们可以得出以下结果:

Byte 22-- Byte 30 写入数据的长度、存储器类型、存储器偏移量与读命令相同。T,C等不能用写命令写入。

Byte 32 如果写入的是位数据这一字节为03,其它则为04

Byte 34 写入数据的位数

01: 1 Bit 08: 1 Byte 10H: 1 Word 20H: 1 Double Word

Byte 35--40值、校验码、结束符

如果写入的是位、字节数据,Byte35就是写入的值,Byte36=00,Byte37=检验码,Byte38=16H,结束。如果写个的是字数据(双字节),Byte35,Byte36就是

写入的值, Byte37=检验码,Byte38=16H,结束。如果写个的是双字数据(四字节),Byte35—38就是写入的值, Byte39=检验码,Byte40=16H,结束。

看完上面的指令分析我们现在就举例几个常用的PPI协议来分析一下:

PC寻呼:10 02 00 49 4B 16

PLC返回:10 00 02 02 04 16

PC发送:10 02 00 5C 5E 16

PLC返回: E5

我们先来看看西门子S7-200PLC的读取密码指令:

请用串口软件以16进制发送,端口设置9600;e;8;1

发送:68 1B 1B 68 02 00 6C 32 01 00 00 00 00 00 0E 00 00 04 01 12 0A 10 02 00 08 00 00 03 00 05 E0 D2 16 意思:要求传送(03区)系统存储区05E0位开始的8个字符(这就是8个密码数值)。

如果通讯无误,PLC会返回 E5,意思:已经收到

那么这时上位机再次发送确认执行指令 10 02 00 5C 5E 16 意思:请执行命令。(说到这里打住一下,PLC返回E5指令后上位机PC要在很短的时间内发送确认指令,晚了刚才的指令就无效了具体多长时间我也没测准,反正1、2秒时间是没有问题的。这也是很多网友问我通讯失败的原因所在)那么这时PLC还就真的乖乖的执行命令,返回如下字符:68 1D 1D 68 00 02 08 32 03 00 00 00 00 00 02 00 0C 00 00 04 01 FF 04 00 40 9B 98 02 06 9D 9A 00 76 7D 16

好了,说到这里就此停止,大家看看密码是多少啊!你如果真正明白了PPI协议就不难找出出密码了,但是这个密码是经过二次加密的,并不是真正的密码,还需要破译,至于密码算法在此不便公开,不过你多做实验一定能得出结果的。下面再看一个读取PLC版本号的指令:

我们在解密中首先要确定的是PLC的版本号。就是要看看是老版本还是02版的,也好做出加解密方案。他的通讯源码是这样的:

68 1B 1B 68 02 00 7C 32 01 00 00 00 00 00 0E 00 00 04 01 12 0A 10 02 00 14 00 00 03 00 00 00 09 16

发送完上面数据PLC返回E5.

再次发送确认指令:10 02 00 5C 5E 16

这时plc的版本号就返回来了。看下面:

68 29 29 68 00 02 08 32 03 00 00 00 00 00 02 00 18 00 00 04 01 FF 04 00 A0 43 50 55 20 32 32 36 20 43 4E 20 20 20 20 20 20 30 32 30 31 D7 16 你看这一段:43 50 55 20 32 32 36 20 43 4E 20 20 20 20 20 20 30 32 30 31 就是plc版本号的ASCII码。用ASC方式显示就会看的更明白上面数据是:C P U SP 2 2 6 SP C N 0 2 0 1 (sp就是空格)0201是版本号。

再一个就是读TD200密码指令:

68 1B 1B 68 02 00 6C 32 01 00 00 00 00 00 0E 00 00 04 01 12 0A 10 02 00 02 00 01 84 00 00 50 B9 16 (VW10)

写M0指令:

68 20 20 68 02 00 7C 32 01 00 00 00 00 00 0E 00 05 05 01 12 0A 10 01 00 01 00 00 83 00 00 00 00 03 00 01 01 80 16

读222位3区(系统区)数据指令:

68 1B 1B 68 02 00 6C 32 01 00 00 00 00 00 0E 00 00 04 01 12 0A 10 02 00 DE 00 00 03 00 00 00 C3 16

读取密码保护位指令:

68 1B 1B 68 02 00 6C 32 01 00 00 00 00 00 0E 00 00 04 01 12 0A 10 02 00 01 00 00 03 00 05 D8 C3 16

改写密码保护位指令:(你来验证是否可行)

68 20 20 68 02 00 7C 32 01 00 00 00 00 00 0E 00 05 05 01 12 0A 10 08 00 01 00 00 03 00 05 D8 00 04 00 08 04 EF 16

68 20 20 68 02 00 7C 32 01 00 00 00 00 00 0E 00 05 05 01 12 0A 10 02 00 01 00 00 03 00 05 D8 00 03 00 08 04 E8 16

全部清除指令:

68 21 21 68 02 00 7C 32 07 00 00 00 24 00 08 00 0C 00 01 12 04 11 45 01 00 FF 09 00 08 16 19 06 0D 01 08 18 1E EE 16

最后再说一点,通讯中还有关于读取某一块的块代码:08 代表程序块;0A代表数据块; 0B代表系统块。

单片机串口通信协议程序

#include #include #define R55 101 #define RAA 202 #define RLEN 203 #define RDATA 104 #define RCH 105 //#define unsigned char gRecState=R55; unsigned char gRecLen; unsigned char gRecCount; unsigned char RecBuf[30]; unsigned char gValue; void isr_UART(void) interrupt 4 using 1 { unsigned char ch; unsigned char i; unsigned char temp; if (RI==1) { ch=SBUF; switch(gRecState) { case R55: // wait 0x55 if (ch==0x55) gRecState=RAA; break;

case RAA: if (ch==0xaa) gRecState=RLEN; else if (ch==0x55) gRecState=RAA; else gRecState=R55; break; case RLEN: gRecLen=ch; gRecCount=0; gRecState=RDATA; break; case RDATA: RecBuf[gRecCount]=ch; gRecCount++; if (gRecCount>=gRecLen) { gRecState=RCH; } break; case RCH: temp=0; for(i=0;i

串口通讯协议

串口通讯协议 波特率9600,数据位8位,起始位1位,停止位2位,校验采用16位CRC校验,校验包括头部信息和数据。 帧定义: 主机发送事件数据定义

u16 const crc_table[256] = { 0x0000U, 0x1021U, 0x2042U, 0x3063U, 0x4084U, 0x50a5U, 0x60c6U, 0x70e7U, 0x8108U, 0x9129U, 0xa14aU, 0xb16bU, 0xc18cU, 0xd1adU, 0xe1ceU, 0xf1efU, 0x1231U, 0x0210U, 0x3273U, 0x2252U, 0x52b5U, 0x4294U, 0x72f7U, 0x62d6U, 0x9339U, 0x8318U, 0xb37bU, 0xa35aU, 0xd3bdU, 0xc39cU, 0xf3ffU, 0xe3deU, 0x2462U, 0x3443U, 0x0420U, 0x1401U, 0x64e6U, 0x74c7U, 0x44a4U, 0x5485U, 0xa56aU, 0xb54bU, 0x8528U, 0x9509U, 0xe5eeU, 0xf5cfU, 0xc5acU, 0xd58dU, 0x3653U, 0x2672U, 0x1611U, 0x0630U, 0x76d7U, 0x66f6U, 0x5695U, 0x46b4U, 0xb75bU, 0xa77aU, 0x9719U, 0x8738U, 0xf7dfU, 0xe7feU, 0xd79dU, 0xc7bcU, 0x48c4U, 0x58e5U, 0x6886U, 0x78a7U, 0x0840U, 0x1861U, 0x2802U, 0x3823U, 0xc9ccU, 0xd9edU, 0xe98eU, 0xf9afU, 0x8948U, 0x9969U, 0xa90aU, 0xb92bU, 0x5af5U, 0x4ad4U, 0x7ab7U, 0x6a96U, 0x1a71U, 0x0a50U, 0x3a33U, 0x2a12U, 0xdbfdU, 0xcbdcU, 0xfbbfU, 0xeb9eU, 0x9b79U, 0x8b58U, 0xbb3bU, 0xab1aU, 0x6ca6U, 0x7c87U, 0x4ce4U, 0x5cc5U, 0x2c22U, 0x3c03U, 0x0c60U, 0x1c41U, 0xedaeU, 0xfd8fU, 0xcdecU, 0xddcdU, 0xad2aU, 0xbd0bU, 0x8d68U, 0x9d49U, 0x7e97U, 0x6eb6U, 0x5ed5U, 0x4ef4U, 0x3e13U, 0x2e32U, 0x1e51U, 0x0e70U, 0xff9fU, 0xefbeU, 0xdfddU, 0xcffcU, 0xbf1bU, 0xaf3aU, 0x9f59U, 0x8f78U, 0x9188U, 0x81a9U, 0xb1caU, 0xa1ebU, 0xd10cU, 0xc12dU, 0xf14eU, 0xe16fU, 0x1080U, 0x00a1U, 0x30c2U, 0x20e3U, 0x5004U, 0x4025U, 0x7046U, 0x6067U, 0x83b9U, 0x9398U, 0xa3fbU, 0xb3daU, 0xc33dU, 0xd31cU, 0xe37fU, 0xf35eU, 0x02b1U, 0x1290U, 0x22f3U, 0x32d2U, 0x4235U, 0x5214U, 0x6277U, 0x7256U, 0xb5eaU, 0xa5cbU, 0x95a8U, 0x8589U, 0xf56eU, 0xe54fU, 0xd52cU, 0xc50dU, 0x34e2U, 0x24c3U, 0x14a0U, 0x0481U, 0x7466U, 0x6447U, 0x5424U, 0x4405U, 0xa7dbU, 0xb7faU, 0x8799U, 0x97b8U, 0xe75fU, 0xf77eU, 0xc71dU, 0xd73cU, 0x26d3U, 0x36f2U, 0x0691U, 0x16b0U, 0x6657U, 0x7676U, 0x4615U, 0x5634U, 0xd94cU, 0xc96dU, 0xf90eU, 0xe92fU, 0x99c8U, 0x89e9U, 0xb98aU, 0xa9abU, 0x5844U, 0x4865U, 0x7806U, 0x6827U, 0x18c0U, 0x08e1U, 0x3882U, 0x28a3U, 0xcb7dU, 0xdb5cU, 0xeb3fU, 0xfb1eU, 0x8bf9U, 0x9bd8U, 0xabbbU, 0xbb9aU, 0x4a75U, 0x5a54U, 0x6a37U, 0x7a16U, 0x0af1U, 0x1ad0U, 0x2ab3U, 0x3a92U, 0xfd2eU, 0xed0fU, 0xdd6cU, 0xcd4dU, 0xbdaaU, 0xad8bU, 0x9de8U, 0x8dc9U, 0x7c26U, 0x6c07U, 0x5c64U, 0x4c45U, 0x3ca2U, 0x2c83U, 0x1ce0U, 0x0cc1U, 0xef1fU, 0xff3eU, 0xcf5dU, 0xdf7cU, 0xaf9bU, 0xbfbaU, 0x8fd9U, 0x9ff8U, 0x6e17U, 0x7e36U, 0x4e55U, 0x5e74U, 0x2e93U, 0x3eb2U, 0x0ed1U, 0x1ef0U }; u16 crc16(u16 crc,const u8 *data, u32 len )len可以为u8,u16,u32 { while (len--) crc = crc_table[(crc >> 8 ^ *(data++)) & 0xffU] ^ (crc << 8); return crc; } 例:u8 *buf=”123456789”;

网络协议分析题库

第一章练习 1 OSI和ISO分别代表什么含义?它们是什么关系? 2 OSI/RM模型没有被最终采用的原因是什么? 3下面哪些协议属于应用层协议?( B ) A. TCP和UDP B. DNS和FTP C. IP D. ARP 4 Internet最早是在( C ) 网络的基础上发展起来的? A. ANSNET B. NSFNET C. ARPANET D. MILNET 5 当网络A上的主机向网络B上的主机发送报文时, 路由器要检查( B ) 地址 A.端口 B. IP C.物理 D.上述都不是 6.下面哪一个是应用层提供的服务? ( D ) A.远程登录服务 B.文件传送 C.邮件服务 D.上述都是 7要将报文交付到主机上的正确的应用程序, 必须使用( A )地址 A.端口 B. IP C.物理 D.上述都不是 8. 网络应用访问操作系统的常用接口是,实现IP地址到物理地址映射的协议是。 9. 在TCP/IP协议族中,能够屏蔽底层物理网络的差异,向上提供一致性服务的协议是;实现异构网络互联的核心设备是。 10. 在TCP/IP网络中,UDP协议工作在层,DNS协议工作在层。 11判断对错:TCP/IP是一个被广泛采用的网际互联协议标准,仅包含TCP和IP两个协议。() 第二章练习 1 PPP协议是什么英文的缩写?用于什么场合? 2 ISP验证拨号上网用户身份时,可以使用哪些认证协议? 3.PPP协议的通信过程包括哪几个阶段? 4.LCP的用途是什么? 5.PPP是Internet中使用的(1),其功能对应于OSI参考模型的(2),它 使用(3)技术来解决标志字段值出现在信息字段的问题。 (1)A. 报文控制协议 B. 分组控制协议 C. 点到点协议 D. 高级数据链路控制协议 (2)A. 数据链路层 B. 网络层 C. 传输层 D. 应用层

串口通信协议

串口通讯—通信协议 所谓通信协议是指通信双方的一种约定。约定包括对数据格式、同步方式、传送速度、传送步骤、检纠错方式以及控制字符定义等问题做出统一规定,通信双方必须共同遵守。因此,也叫做通信控制规程,或称传输控制规程,它属于ISO'S OSI七层参考模型中的数据链路层。 目前,采用的通信协议有两类:异步协议和同步协议。同步协议又有面向字符和面向比特以及面向字节计数三种。其中,面向字节计数的同步协议主要用于DEC公司的网络体系结构中。 一、物理接口标准 1.串行通信接口的基本任务 (1)实现数据格式化:因为来自CPU的是普通的并行数据,所以,接口电路应具有实现不同串行通信方式下的数据格式化的任务。在异步通信方式下,接口自动生成起止式的帧数据格式。在面向字符的同步方式下,接口要在待传送的数据块前加上同步字符。 (2)进行串-并转换:串行传送,数据是一位一位串行传送的,而计算机处理数据是并行数据。所以当数据由计算机送至数据发送器时,首先把串行数据转换为并行数才能送入计算机处理。因此串并转换是串行接口电路的重要任务。 (3)控制数据传输速率:串行通信接口电路应具有对数据传输速率——波特率进行选择和控制的能力。 (4)进行错误检测:在发送时接口电路对传送的字符数据自动生成奇偶校验位或其他校验码。在接收时,接口电路检查字符的奇偶校验或其他校验码,确定是否发生传送错误。 (5)进行TTL与EIA电平转换:CPU和终端均采用TTL电平及正逻辑,它们与EIA采用的电平及负逻辑不兼容,需在接口电路中进行转换。 (6)提供EIA-RS-232C接口标准所要求的信号线:远距离通信采用MODEM时,需要9根信号线;近距离零MODEM方式,只需要3根信号线。这些信号线由接口电路提供,以便与MODEM或终端进行联络与控制。 2、串行通信接口电路的组成 为了完成上述串行接口的任务,串行通信接口电路一般由可编程的串行接口芯片、波特率发生器、EIA 与TTL电平转换器以及地址译码电路组成。其中,串行接口芯片,随着大规模继承电路技术的发展,通用的同步(USRT)和异步(UART)接口芯片种类越来越多,如下表所示。它们的基本功能是类似的,都能实现上面提出的串行通信接口基本任务的大部分工作,且都是可编程的。才用这些芯片作为串行通信接口电路的核心芯片,会使电路结构比较简单。 3.有关串行通信的物理标准 为使计算机、电话以及其他通信设备互相沟通,现在,已经对串行通信建立了几个一致的概念和标准,这些概念和标准属于三个方面:传输率,电特性,信号名称和接口标准。 1、传输率:所谓传输率就是指每秒传输多少位,传输率也常叫波特率。国际上规定了一个标准波特率系列,标准波特率也是最常用的波特率,标准波特率系列为110、300、600、1200、4800、9600和19200。大多数CRT终端都能够按110到9600范围中的任何一种波特率工作。打印机由于机械速度比较慢而使传输波特率受到限制,所以,一般的串行打印机工作在110波特率,点针式打印机由于其内部有较大的行缓冲

51串口通信协议(新型篇)

51串口通信协议(新型篇) C51编程:这是网友牛毅编的一个C51串口通讯程序! //PC读MCU指令结构:(中断方式,ASCII码表示) //帧:帧头标志|帧类型|器件地址|启始地址|长度n|效验和|帧尾标志 //值: 'n' 'y'| 'r' | 0x01 | x | x | x |0x13 0x10 //字节数: 2 | 1 | 1 | 1 | 1 | 1 | 2 //求和: ///////////////////////////////////////////////////////////////////// //公司名称:*** //模块名:protocol.c //创建者:牛毅 //修改者: //功能描述:中断方式:本程序为mcu的串口通讯提供(贞结构)函数接口,包括具体协议部分 //其他说明:只提供对A T89c51具体硬件的可靠访问接口 //版本:1.0 //信息:QQ 75011221 ///////////////////////////////////////////////////////////////////// #include #include //预定义 //帧 #define F_ST1 0x6e //帧头标志n #define F_ST2 0x79 //帧头标志y #define F_R 0x72 //帧类型读r #define F_W 0x77 //帧类型写w #define F_D 0x64 //帧类型数据帧d #define F_B 0x62 //帧类型写回应帧b #define F_C 0x63 //帧类型重发命令帧c #define F_Q 0x71 //帧类型放弃帧q #define F_ADDR 0x31 //器件地址0-9 #define F_END 0x7a //帧尾标志z #define F_SPACE 0x30 //空标志0 #define F_ERR1 0x31 //错误标志1,flagerr 1 #define F_ERR2 0x32 //错误标志2 2 //常数 #define S_MAXBUF 16 //接收/发送数据的最大缓存量 #define FIELD_MAXBUF 48 //最小场缓存,可以大于48字节,因为协议是以20字节为

系统串口通讯协议

ZHET 系统串口通讯协议 通 讯 技 术 手 册 型号:SYRDS1-485 (SYRDSSS1) SYRDL1-485 (SYRLSSS1) 玺瑞国际企业有限公司 SYRIS International Corp.

通讯技术手册 通讯协议(Protocol) 卡片阅读机模块(Reader Module)的通讯协议(Protocol)皆出自于SYRIS 的一种标准通讯协议,这种协议格式如下表: 1.SOH 和 END 都是一个字节的控制字符: SOH 控制器端定义为 <0x09> 模块端定义为 <0x0A> END 控制器及模块端均固定为 <0x0D> 其中 <0x> 为十六进制表示法. 2.TYPE 为模块型式编号,固定为一个字节,本型式编号固定为“A”. 3.ID为模块端的识别代码,这一字节的 ASCII 字符必须是在 1 <0x31> 到 8 <0x38> 的范围内,假如控制器端传送之ID值与模块地址编号相同时, 则该模块将会接收控制器端所传送的数据,而模块响应时,也会传回相同的地址编号.

4.FC是通讯功能码(Function Code)和资料(DATA)有相关性,固定为一个 字节,这些资料请参考通讯协议表及相关说明. 5.错误讯息判断代码(Error Code)为两个字节,第一个字节为固定为 <0x0E> ,第二个字节为错误代码,请参考错误讯息代码表. 6.8 BITS BCC是所有字符的检查字段,为二个字节,有关 8 BITS BCC 的 信息和范例程序,请参考附录A. 7.RS485传输协议请设定为”E,8,1”,速率为”19200”. 错误讯息代码表(Error Code Table) ※ Error Code #1固定为 <0x0E>.

网络协议分析习题解答参考思路

《网络协议分析与实现》习题解答参考思路 第1章习题解答参考思路 习题1: 该题考查对异构网络互联概念、异构网络涉及的问题以及解决方法的理解程度。其中涉及的问题包括地址问题、包格式转换问题、路由问题等,其中1.1.3节还列举了很多其他的问题。 习题2: 该题可参考教材中所讲述的用户A和用户B的数据转换和传输过程进行解答。 习题3: 该题主要考查网上查找资料的能力。在https://www.sodocs.net/doc/7813425170.html,/上可以查到所有的RFC信息。 习题4: TCP/IP模型和OSI参考模型之间的层次对应关系及各层协议参见教材中的图1-5。 习题5: 该题主要考查动手能力,可以使用Wireshark(曾称为Ethereal)、Sniffer Portable 等软件进行抓包,然后针对一些具体报文进行分析。注意分析通信中的多路复用和多路分解过程,说出通信双方的物理地址、IP地址和端口地址。 习题6: 该题主要考查阅读代码的能力,这部分代码是对数据结构课程中队列操作的一个实现。该队列是一个基于优先级排序的队列,主要的数据结构是qinfo: struct qinfo { Bool q_valid; int q_type; /* mutex type */ int q_max; int q_count; int q_seen; int q_mutex; int *q_key;

char **q_elt; }; 具体操作如下: int enq(int q, void *elt, int key); /*入队列操作,根据key的大小插到队列中的合适位置*/ void * deq(int q);/*出队列操作*/ void * headq(int q);/*获取队列头部元素*/ void * seeq(int q);/*按顺序取队列元素*/ int newq(unsigned size, unsigned mtype); /*分配一个新的队列,并返回队列的索引位置*/ int freeq(int q);/*释放队列*/ int lenq(int q);/*获取队列长度*/ static int initq();/*初始化队列*/

USB基本知识与通信协议书范本

串口通信协议 什么是串口 串口是计算机上一种非常通用设备通信的协议(不要与通用串行总线Universal SerialBus或者USB混淆)。大多数计算机包含两个基于RS232的串口。串口同时也是仪器仪表设备通用的通信协议;很多GPIB兼容的设备也带有RS-232口。同时,串口通信协议也可以用于获取远程采集设备的数据。 串口通信的概念非常简单,串口按位(bit)发送和接收字节。尽管比按字节(b yte)的并行通信慢,但是串口可以在使用一根线发送数据的同时用另一根线接收数据。它很简单并且能够实现远距离通信。比如IEEE488定义并行通行状态时,规定设备线总常不得超过20米,并且任意两个设备间的长度不得超过2米;而对于串口而言,长度可达1200米。 典型地,串口用于ASCII码字符的传输。通信使用3根线完成:(1)地线,(2)发送,(3)接收。由于串口通信是异步的,端口能够在一根线上发送数据同时在另一根线上接收数据。其他线用于握手,但是不是必须的。串口通信最重要的参数是波特率、数据位、停止位和奇偶校验。对于两个进行通行的端口,这些参数必须匹配:a,波特率:这是一个衡量通信速度的参数。它表示每秒钟传送的bit的个数。例如300波特表示每秒钟发送300个bit。当我们提到时钟周期时,我们就是指波特率例如如果协议需要4800波特率,那么时钟是4800Hz。这意味着串口通信在数据线上的采样率为4800Hz。通常线的波特率为14400,28800和36600。波特率可以远远大于这些值,但是波特率和距离成反比。高波特率常常用于放置的很近的仪器间的通信,典型的例子就是GPIB设备的通信。 b,数据位:这是衡量通信中实际数据位的参数。当计算机发送一个信息包,实际的数据不会是8位的,标准的值是5、7和8位。如何设置取决于你想传送的信息。比如,标准的ASCII码是0~127(7位)。扩展的ASCII码是0~255(8位)。如果数据使用简单的文本(标准ASCII码),那么每个数据包使用7位数据。每个包是指一个字节,包括开始/停止位,数据位和奇偶校验位。由于实际数据位取决于通信协议的选取,术语“包”指任何通信的情况。 c,停止位:用于表示单个包的最后一位。典型的值为1,1.5和2位。由于数据是在传输线上定时的,并且每一个设备有其自己的时钟,很可能在通信中两台设备间出现了小小的不同步。因此停止位不仅仅是表示传输的结束,并且提供计算机校正时钟同步的机会。适用于停止位的位数越多,不同时钟同步的容忍程度越大,但是数据传输率同时也越慢。 d,奇偶校验位:在串口通信中一种简单的检错方式。有四种检错方式:偶、奇、高和低。当然没有校验位也是可以的。对于偶和奇校验的情况,串口会设置校验位(数据位后面的一位),用一个值确保传输的数据有偶个或者奇个逻辑高位。例如,如果数据是011,那么对于偶校验,校验位为0,保证逻辑高的位数是偶数个。如果是奇

AB DF1串口通讯协议API接口

Fax: 1-703-709-0985 https://www.sodocs.net/doc/7813425170.html, Allen-Bradley DF1 Serial Communication Interface API The DASTEC Corporation Allen-Bradley DF1 Serial Communication Interface API allows the user to implement bi-directional serial communications to exchange data between applications running on a Windows/WinCE-based system with other devices supporting the Allen-Bradley DF1 full-duplex serial protocol. The devices can be AB devices, other host computers or even other system applications using the API. The Allen-Bradley DF1 Serial Communication Interface API enables a system to acts as a client device to other Allen-Bradley peer devices, initiating read and write operations on behalf of the system applications. The API also allows the system to emulate an Allen-Bradley PLC to respond to read and write requests and thus acts as a “virtual PLC” to other AB peers. The API is available for different Windows/WinCE-based systems/platforms and can be used with C/C++ or Visual Basic. The API consists of two component functionalities, client side and server side. The client side functionality is implemented with a single API DLL. Server side functionality is implemented with a DLL/executable pair. Together these components manage all aspects of the protocol and data exchange including responding to peers with proper acknowledgements, error/success codes and protocol data byte ordering. The system application need only to deal with the data values exchanged in native byte order. The user can employ either the API’s client, server or both functionalities with minimal code implementation.

网络协议分析与仿真

****** 网络协议分析与仿真 课程设计报告书 院系名称:计算机学院实验内容:网络流量分析学生姓名:*** 专业名称:网络工程班级:**** 学号:********* 时间:20**年**月**日

网络协议分析与仿真课程设计报告 网络流量分析 一、课程设计目的 加深对IP、DSN 、TCP、UDP、HTTP等协议的理解; 掌握流量分析工具的使用,学习基本的流量分析方法。 二、课程设计内容 流量分析 工具:Wireshark(Windows或Linux),tcpdump(Linux) 要求:使用过滤器捕获特定分组;用脚本分析大量流量数据(建议用perl)。 内容:Web流量分析 清除本机DNS缓存,访问某一网站主页,捕获访问过程中的所有分组,分析并回答下列问题(以下除1、3、8、11外,要求配合截图回答): (1)简述访问web页面的过程。 (2)找出DNS解析请求、应答相关分组,传输层使用了何种协议,端口号是多少? 所请求域名的IP地址是什么? (3)统计访问该页面共有多少请求IP分组,多少响应IP分组?(提示:用脚本编程实现) (4)找到TCP连接建立的三次握手过程,并结合数据,绘出TCP连接建立的完整过程,注明每个TCP报文段的序号、确认号、以及SYN\ACK的设置。 (5)针对(4)中的TCP连接,该TCP连接的四元组是什么?双方协商的起始序号是什么?TCP连接建立的过程中,第三次握手是否带有数据?是否消耗了一个 序号? (6)找到TCP连接的释放过程,绘出TCP连接释放的完整过程,注明每个TCP报文段的序号、确认号、以及FIN\ACK的设置。 (7)针对(6)中的TCP连接释放,请问释放请求由服务器还是客户发起?FIN报文段是否携带数据,是否消耗一个序号?FIN报文段的序号是什么?为什么是 这个值? (8)在该TCP连接的数据传输过程中,找出每一个ACK报文段与相应数据报文段的对应关系,计算这些数据报文段的往返时延RTT(即RTT样本值)。根据课本 200页5.6.2节内容,给每一个数据报文段估算超时时间RTO。(提示:用脚本 编程实现) (9)分别找出一个HTTP请求和响应分组,分析其报文格式。参照课本243页图6-12,在截图中标明各个字段。

串口通讯—通信协议

串口通讯—串口通信协议 所谓通信协议是指通信双方的一种约定。约定包括对数据格式、同步方式、传送速度、传送步骤、检纠错方式以及控制字符定义等问题做出统一规定,通信双方必须共同遵守。因此,也叫做通信控制规程,或称传输控制规程,它属于ISO'S OSI七层参考模型中的数据链路层。 目前,串口通信协议通常有两类:异步协议和同步协议。同步协议又有面向字符和面向比特以及面向字节计数三种。其中,面向字节计数的同步协议主要用于DEC公司的网络体系结构中。 一、物理接口标准 1、串行通信接口的基本任务 (1)实现数据格式化:因为来自CPU的是普通的并行数据,所以,接口电路应具有实现不同串行通信方式下的数据格式化的任务。在异步通信方式下,接口自动生成起止式的帧数据格式。在面向字符的同步方式下,接口要在待传送的数据块前加上同步字符。 (2)进行串-并转换:串行传送,数据是一位一位串行传送的,而计算机处理数据是并行数据。所以当数据由计算机送至数据发送器时,首先把串行数据转换为并行数才能送入计算机处理。因此串并转换是串行接口电路的重要任务。 (3)控制数据传输速率:串行通信接口电路应具有对数据传输速率——波特率进行选择和控制的能力。 (4)进行错误检测:在发送时接口电路对传送的字符数据自动生成奇偶校验位或其他校验码。在接收时,接口电路检查字符的奇偶校验或其他校验码,确定是否发生传送错误。 (5)进行TTL与EIA电平转换:CPU和终端均采用TTL电平及正逻辑,它们与EIA采用的电平及负逻辑不兼容,需在接口电路中进行转换。 (6)提供EIA-RS-232C接口标准所要求的信号线:远距离通信采用MODEM 时,需要9根信号线;近距离零MODEM方式,只需要3根信号线。这些信号线由接口电路提供,以便与MODEM或终端进行联络与控制。 2、串行通信接口电路的组成 为了完成上述串行接口的任务,串行通信接口电路一般由可编程的串行接口芯片、波特率发生器、EIA与TTL电平转换器以及地址译码电路组成。其中,串行接口芯片,随着大规模继承电路技术的发展,通用的同步(USRT)和异步(UART)接口芯片种类越来越多,如下表所示。它们的基本功能是类似的,都能实现上面提出的串行通信接口基本任务的大部分工作,且都是可编程的。采用这些芯片作为串行通信接口电路的核心芯片,会使电路结构比较简单。

SPI串口通信协议

SPI串口通信协议 1.1 SPI串口通信介绍 SPI是英文Serial Peripheral Interface的缩写,中文意思是串行外围设备接口,SPI是Motorola公司推出的一种同步串行通讯方式,是一种三线同步总线,因其硬件功能很强,与SPI有关的软件就相当简单,使CPU有更多的时间处理其他事务。 SPI:高速同步串行口。3~4线接口,收发独立、可同步进行. SPI,是英语Serial Peripheral interface的缩写,顾名思义就是串行外围设备接口。是Motorola首先在其MC68HCXX系列处理器上定义的。SPI接口主要应用在EEPROM,FLASH,实时时钟,AD转换器,还有数字信号处理器和数字信号解码器之间。SPI,是一种高速的,全双工,同步的通信总线,并且在芯片的管脚上只占用四根线,节约了芯片的管脚,同时为PCB的布局上节省空间,提供方便,正是出于这种简单易用的特性,现在越来越多的芯片集成了这种通信协议,比如AT91RM9200. SPI总线系统是一种同步串行外设接口,它可以使MCU与各种外围设备以串行方式进行通信以交换信息。外围设置FLASHRAM、网络控制器、LCD显示驱动器、A/D转换器和MCU等。SPI总线系统可直接与各个厂家生产的多种标准外围器件直接接口,该接口一般使用4条线:串行时钟线(SCK)、主机输入/从机输出数据线MISO、主机输出/从机输入数据线MOSI和低电平有效的从机选择线SS(有的SPI接口芯片带有中断信号线INT或INT、有的SPI接口芯片没有主机输出/从机输入数据线MOSI)。 SPI的通信原理很简单,它以主从方式工作,这种模式通常有一个主设备和一个或多个从设备,需要至少4根线,事实上3根也可以(单向传输时)。也是所有基于SPI的设备共有的,它们是SDI(数据输入),SDO(数据输出),SCK(时钟),CS(片选)。 (1)SDO –主设备数据输出,从设备数据输入 (2)SDI –主设备数据输入,从设备数据输出

网络协议分析最终版

中南林业科技大学 实验报告 课程名称:网络协议与分析 姓名:项学静学号:20104422 专业班级:2010级计算机科学与技术 系(院):计算机与信息工程学院 实验时间:2013年下学期 实验地点:电子信息楼602机房

实验一点到点协议PPP 一、实验目的 1.理解PPP协议的工作原理及作用。 2.练习PPP,CHAP的配置。 3.验证PPP,CHAP的工作原理。 二、实验环境 1.安装windows操作系统的PC计算机。 2.Boson NetSim模拟仿真软件。 三、实验步骤 1、绘制实验拓扑图 利用Boson Network Designer绘制实验网络拓扑图如图1-1。 本实验选择两台4500型号的路由器。同时,采用Serial串行方式连接两台路由器,并选择点到点类型。其中DCE端可以任意选择,对于DCE端路由器的接口(Serial 0/0)需要配置时钟信号(这里用R1的Serial 0/0作为DCE端)。 2、配置路由器基本参数

绘制完实验拓扑图后,可将其保存并装入Boson NetSim中开始试验配置。配置时点击Boson NetSim程序工具栏按钮eRouters,选择R1 并按下面的过程进行路由器1的基本参数配置: Router>enable Router#conf t Router(config)#host R1 R1(config)#enable secret c1 R1(config)#line vty 0 4 R1(config-line)#password c2 R1(config-line)#interface serial 0/0 R1(config-if)#ip address 192.168.0.1 255.255.255.0 R1(config-if)#clock rate 64000 R1(config-if)#no shutdown R1(config-if)#end R1#copy running-config startup-config 点击工具栏按钮eRouters,选择R2并按下面过程进行路由器的基本参数配置:Router>enable Router#conf t Router(config)#host R2

(完整版)高速公路ETC系统DSRC设备串行口通讯协议

高速公路ETC系统DSRC设备串行口通讯协议 1 串行通讯方式 串行口采用半双工的异步串行通讯方式,协议格式为“115200,N,8,1”,即波特率115200bps,无奇偶校验,8位数据,1个停止位。 1.1 串口通讯数据帧格式 RSU和PC通讯的数据帧格式如图1-1: 图1-1 空应答如图1-2: 图1-2 说明见表1-1: 表1-1 RSU和PC通讯的数据帧格式说明

1.2 特殊字节转义处理 数据帧开始标志为FFFFH,帧结束标志为FFH。其他字段不能出现FFH,如果数据确实为FFH,需对其进行转义处理。 发送数据时,如果在待发送字段中出现FFH字节时,将FFH分解为FEH和01H这两个字节来发送;如果在待发送字段出现FEH字节时,需将FEH分解为FEH和00H这两个字节来发送。 接收数据时,如果出现“FE 01”这样连续两个字节时将之合为一个字节FFH;如果出现“FE 00”这样连续两个字节时将之合为一个字节FEH。 RSU送上来的所有整型数据,未特定说明,其字节排序均为高位在前,低位在后。 1.3 命令的应答要求 PC必须对RSU的命令作出应答,可以是携带应答也可以是空应答,RSU不一定对PC的每个命令都要应答。 应答时,PC将接收到的命令帧的RSCTL的高半字节和低半字节交换,作为应答帧的RSCTL。

图1-3 串口通讯流程 2 RSU/PC通信帧数据结构 2.1 PC发往RSU的指令: 指令名称代码功能说明 初始化指令C0H 对RSU关键参数如功率、车道模式等进行初始化/设置 对PC收到RSU发来的信息的应答,表示收到信息并要求继续继续交易指令C1H 处理指定OBU 对PC收到RSU发来的信息的应答,表示收到信息并要求当前停止交易指令C2H 不再继续处理指定OBU

串口协议

串口协议 所谓通信协议是指通信双方的一种约定。约定包括对数据格式、同步方式、传送速度、传送步骤、检纠错方式以及控制字符定义等问题做出统一规定,通信双方必须共同遵守。因此,也叫做通信控制规程,或称传输控制规程,它属于ISO'S OSI七层参考模型中的数据链路层。目前,采用的通信协议有两类:异步协议和同步协议。同步协议又有面向字符和面向比特以及面向字节计数三种。其中,面向字节计数的同步协议主要用于DEC公司的网络体系结构中。 一、物理接口标准 1.串行通信接口的基本任务 (1)实现数据格式化:因为来自CPU的是普通的并行数据,所以,接口电路应具有实现不同串行通信方式下的数据格式化的任务。在异步通信方式下,接口自动生成起止式的帧数据格式。在面向字符的同步方式下,接口要在待传送的数据块前加上同步字符。 (2)进行串-并转换:串行传送,数据是一位一位串行传送的,而计算机处理数据是并行数据。所以当数据由计算机送至数据发送器时,首先把串行数据转换为并行数才能送入计算机处理。因此串并转换是串行接口电路的重要任务。 (3)控制数据传输速率:串行通信接口电路应具有对数据传输速率——波特率进行选择和控制的能力。 (4)进行错误检测:在发送时接口电路对传送的字符数据自动生成奇偶校验位或其他校验码。在接收时,接口电路检查字符的奇偶校验或其他校验码,确定是否发生传送错误。(5)进行TTL 与EIA电平转换:CPU 和终端均采用TTL电平及正逻辑,它们与EIA采用的电平及负逻辑不兼容,需在接口电路中进行转换。 (6)提供EIA-RS-232C 接口标准所要求的信号线:远距离通信采用MODEM 时,需要9根信号线;近距离零MODEM 方式,只需要3 根信号线。这些信号线由接口电路提供,以便与MODEM 或终端进行联络与控制。 2、串行通信接口电路的组成 为了完成上述串行接口的任务,串行通信接口电路一般由可编程的串行接口芯片、波特率发生器、EIA 与TTL 电平转换器以及地址译码电路组成。其中,串行接口芯片,随着大规模继承电路技术的发展,通用的同步(USRT)和异步(UART)接口芯片种类越来越多,如下表所示。它们的基本功能是类似的,都能实现上面提出的串行通信接口基本任务的大部分工作,且都是可编程的。才用这些芯片作为串行通信接口电路的核心芯片,会使电路结构比较简单。

串口通信协议

串口通信协议 串口通信的概念非常简单,串口按位(bit)发送和接收字节。尽管比按字节(byte)的并行通信慢,但是串口可以在使用一根线发送数据的同时用另一根线接收数据。 什么是串口 串口是计算机上一种非常通用设备通信的协议(不要与通用串行总线Universal SerialBus或者USB混淆)。大多数计算机包含两个基于RS232的串口。串口同时也是仪器仪表设备通用的通信协议;很多GPIB兼容的设备也带有RS-232口。同时,串口通信协议也可以用于获取远程采集设备的数据。 串口通信的概念非常简单,串口按位(bit)发送和接收字节。尽管比按字节(b yte)的并行通信慢,但是串口可以在使用一根线发送数据的同时用另一根线接收数据。它很简单并且能够实现远距离通信。比如IEEE488定义并行通行状态时,规定设备线总长不得超过20米,并且任意两个设备间的长度不得超过2米;而对于串口而言,长度可达1200米。 典型地,串口用于ASCII码字符的传输。通信使用3根线完成:(1)地线,(2)发送,(3)接收。由于串口通信是异步的,端口能够在一根线上发送数据同时在另一根线上接收数据。其他线用于握手,但是不是必须的。串口通信最重要的参数是波特率、数据位、停止位和奇偶校验。对于两个进行通行的端口,这些参数必须匹配: a,波特率:这是一个衡量通信速度的参数。它表示每秒钟传送的bit的个数。例如300波特表示每秒钟发送300个bit。当我们提到时钟周期时,我们就是指波特率例如如果协议需要4800波特率,那么时钟是4800Hz。这意味着串口通信在数据线上的采样率为4800Hz。通常电话线的波特率为14400,28800和36600。波特率可以远远大于这些值,但是波特率和距离成反比。高波特率常常用于放置的很近的仪器间的通信,典型的例子就是GPIB设备的通信。 b,数据位:这是衡量通信中实际数据位的参数。当计算机发送一个信息包,实际的数据不会是8位的,标准的值是5、7和8位。如何设置取决于你想传送的信息。比如,标准的ASCII码是0~127(7位)。扩展的ASCII码是0~255(8位)。如果数据使用简单的文本(标准ASCII码),那么每个数据包使用7位数据。每个包是指一个字节,包括开始/停止位,数据位和奇偶校验位。由于实际数据位取决于通信协议的选取,术语“包”指任何通信的情况。 c,停止位:用于表示单个包的最后一位。典型的值为1,1.5和2位。由于数据是在传输线上定时的,并且每一个设备有其自己的时钟,很可能在通信中两台设备间出现了小小的不同步。因此停止位不仅仅是表示传输的结束,并且提供计算机校正时钟同步的机会。适用于停止位的位数越多,不同时钟同步的容忍程度越大,但是数据传输率同时也越慢。 d,奇偶校验位:在串口通信中一种简单的检错方式。有四种检错方式:偶、奇、高和低。当然没有校验位也是可以的。对于偶和奇校验的情况,串口会设置校验位(数

串口通信协议

1 串口 串口是计算机上一种非常通用设备通信的协议(不要与通用串行总线Universal SerialBus或者USB混淆)。 2 串行通信的传输方向 2.1 单工 单工是指数据传输仅能沿一个方向,不能实现反向传输。 2.2 半双工 半双工是指数据传输可以沿两个方向,但需要分时进行。 2.3 全双工 全双工是指数据可以同时进行双向传输。 单工半双工全双工 3 重要参数 串口通信最重要的参数是波特率、数据位、停止位和奇偶校验。对于两个进行通行的端口,这些参数必须匹配。 3.1 波特率 这是一个衡量通信速度的参数。它表示每秒钟传送的bit的个数。例如300波特表示每秒钟发送300个bit。当我们提到时钟周期时,我们就是指波特率例如如果协议需要4800波特率,那么时钟是4800Hz。这意味着串口通信在数据线上的采样率为4800Hz。通常电话线的波特率为14400,28800和36600。波特率可以远远大于这些值,但是波特率和距离成反比。高波特率常常用于放置的很近的仪器间的通信,典型的例子就是GPIB设备的通信。 常用的波特率有,1200,2400,4800,9600,19200,38400,115200等。 3.2 数据位 这是衡量通信中实际数据位的参数。当计算机发送一个信息包,实际的数据不会是8位的,标准的值是5、7和8位。如何设置取决于你想传送的信息。比如,标准的ASCII码是0~127(7位)。扩展的ASCII码是0~255(8位)。如果数据使用简单的文本(标准ASCII码),那么每个数据包使用7位数据。每个包是指一个字节,包括开始/停止位,数据位和奇偶校验位。由于实际数据位取决于通信协议的选取,术语“包”指任何通信的情况。

相关主题