sdi-12实现

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

sdi-12实现
SDI-12 串⾏总线实现
图1:总线时序
唤醒信号:12MS⾼电平(Least)+8.33MS低电平;
主机指令发送;
从机应答发送。

对于时序偏差的容忍度是±0.4MS,唯⼀的例外是Stop Bit和下⼀个Start Bit之间的时间间隔的最⼤值为1.66MS不允许偏差。

主机将数据线设置为⾼⾄少12MS将被认为是⼀个Break;
从机在数据线设置为⾼6.5MS以内不会认为是Break,⽽设置为⾼12MS以上必定认为是Break;
从机在接收地址之前,必须要等待8.33MS的前导低电平;
在接收到Break信号100MS以内,传感器必须被唤醒,并做好监测Start Bit的准备;
主机在发送完命令的最后⼀个Bit以后,必须在Stop Bit结束后7.5MS内让出总线的控制权;(容忍度:+0.4MS)
在接收到Break和Command以后,被地址定位的从机将数据总线设置为低8.33MS(容忍度:—0.4MS),应答的第⼀个Byte的Start Bit应在Command的最后⼀个Stop Bit发送后15MS发送(容忍度:+0.4MS);
从机在发送完最后⼀个应答Byte以后,应该在7.5MS以内释放总线的控制权(容忍度:+0.4MS);
在应答和指令的两个Bytes的Stop Bit和Start Bit之间的时间间隔不能超过1.66MS,没
有容忍,这使得对M命令的应答被限制在380MS以内;
传感器必须在接受到⼀个⽆效地址或者在接受到最后⼀个Mark Bit的100MS后进⼊睡眠模式(容忍度:+0.4MS);
如果上⼀个指令是不同的地址,或者最后⼀个Market Bit已经发送了87MS,在发送命令前应加上Break。

Break的规则
在需要从休眠状态唤醒⼀个传感器时,主机将发送⼀个Break Bit。

传感器在接受到最后⼀个Mark Bit的100MS后或者接收到⼀个⽆效地址后将再次进⼊休眠状态。

因此,如果上⼀个指令是不同的地址,或者最后⼀个Market Bit已经发送了87MS,在发送命令前应加上Break。

如果接收到的服务通知将在87MS以内执⾏D0指令,主机不⼀定要发送Break。

然⽽如果延迟的时间超过了87MS,则必须发送⼀个
Break来唤醒设备。

重试
主机必须⽀持重试,传感器在接收到Break以后有100MS的时间来唤醒设备,且在被唤醒前不会接收任何指令。

传感器在检测到数据总线空闲100MS以后将再次进⼊休眠模式。

重试:在发送命令后没有接到回应的情况下,主机将等到命令的最后⼀个Bit发送16.67MS以后87MS以前重新发送命令(不需要Break)。

在重试两次以上以后仍未接收到正确的回应新号,如果最后⼀次重试是在Break的100MS以后(保证设备拥有完整的
100MS 的唤醒时间),将重新发送包括Break在内的所有命令(两次以上)。

重试的条件如下:
1、传感器没有回应;
2、在接收到回应的Start Bit后,出现了8.33MS的Mark;
3、不正确的回应。

错误回应包括:不正确的格式;奇偶校验错误;帧错误或者是总线竞争。

在发送重试以前必须等待回应结束。

任何以上三条件之⼀存在的话,将触发重试。

SDI-12 通信协议
SDI-12的主机和传感器之间通过ASCII字符进⾏数据交换。

主机将数据线置⾼12MS以发送⼀个Break来唤醒传感器。

主机发送⼀个命令。

传感器回复⼀个相应的应答。

每个命令都将发送给⼀个明确的传感器。

每个命令的第⼀个字符是主机将要通信的那个传感器的唯⼀地址。

其他的传感器将跳过这个命令并再次进⼊休眠状态。

主机开始从⼀个传感器采集数据后,如果没有接收到正确的回应将不会同其他传感器进⾏通信。

⼀个标准的传输流程为:
1、主机通过⼀个Break来唤醒SDI-12总线上的所有设备;
2、主机⼴播⼀个带有唯⼀地址的命令,指⽰⼀个传感器进⾏测量;
3、地址指向的传感器将在15MS以内回应测量设备将数据准备好所需的时间和将要回
应的数据的字节数;
4、如果测量数据⽴刻就可以准备好,主机将发送⼀个命令来得到测量数据。

如果数据
不能⽴刻准备好,主机将等待传感器发送⼀个表⽰数据已经准备就绪的请求。

这时主机再发送命令来得到数据;
5、传感器回应⼀个或多个测量数据。

数据率和帧格式
SDI-12总线的数据率是1200,下表显⽰了SDI-12的帧格式:
Start Bit:奇偶校验:偶校验End Bit:
UART设置:硬件流关闭,数据位8,校验⽆,停⽌位1,起始位1.
BAUD_M=131,BAUD_E=5 波特率:1200.
正当的字符
在SDI-12总线上传输的数据必须是可以显⽰的ASCII字符。

有效字符为32~126,ASCII 码表如下所⽰:
ASCII码表:红⾊为⾮法字符
有两个例外:
1、传感器的回应以两个字符为结束,回车(0X0D)和换⾏(0X0A),在本⽂档中显⽰
为;
2、在某些情况下CRC数据的第⼆个或者第三个字节可能不是可显⽰字符。

设备地址
任何命令的第⼀个字符应该是⼀个传感器的地址。

同样的,回应的第⼀个字符也应该是这个传感器的地址。

这样SDI-12的主机就能够
确认此回应是来⾃正确的设备。

(⼀个地址是⼀个⽤来表⽰那个传感器将回应命令的字符)
ASCII字符0—9是所有的主机和传感器必须⽀持的标准地址,如果必须要使⽤多于10
个的传感器,可以使⽤字符A-Z或者字符a-z。

SDI-12的命令及回应
下表列出了基本的SDI-12命令,命令的格式和命令的回应的格式。

所有的SDI-12 1.3版本的设备必须⽀持所有下表列出的命令。

基本命令都不会影响传感器的校准。

⾼级命令将在以后的章节中体现。

做命令的结束符。

回应的最后两个字节总是。

在D命令的应答中的Value部分包含的字符的最⼤值可以是35或者75个。

如果D命令是为了检索数据,且⼀个数据采集命令正在执⾏的话,最⼤值是75个。

数据采集命令的Value 部分也可以包括最多75个字符,其他的情况下都是35个字符。

ACK(a!)
这个命令⽤来确定传感器已经能接收命令,它使⼀个传感器报告⾃⼰在SDI-12总线上的存在。

命令:a! 应答:a
例⼦:0!0
1!1
其他命令请查阅数据⼿册。

实现⽅式
以⼀个IO⼝作为数据线终点,在睡眠前设置此IO⼝为输⼊并可以产⽣外部中断(⾼电平中断)。

此中断产⽣后,关闭中断,计时
7MS,如果已经为低电平则继续进⼊休眠模式,否则等待低电平到来。

低电平到来后⽴刻计时,若在8MS以前出现⾼电平则休眠,到8.33MS 时,⽴即开始以1200的波特率接收数据。

使⽤计时器1来完成长时间的计时。

使⽤计时器3来完成1200波特率的定时。

流程图如下:
SDI-12是基于微处理传感器的数据接⼝标准。

SDI-12 代表了1200波特串⾏/数字接⼝。

本⽂描述了SDI-12数据记录器和SDI-12传感器的电器接⼝、通讯协议和时序请求。

SDI-12 按照以下的需求进⾏应⽤:
◆最低功耗的电池供电系统
◆低的系统开销
◆通过单⼀数据线缆,使⽤单⼀数据记录器对多个传感器数据进⾏记录
◆传感器和数据记录器之间的电缆长度可达200英尺
2.0 SDI-12 性能
有数据记录器的微处理传感器最好选择串⾏数据接⼝。

◆微处理机传感器有⾃⼰独特的综合⾃测试算法。

◆⽆需校准编程数据记录器或者其他信息传感器之间可以互换。

◆通过此接⼝可以给传感器供电。

◆在⼀个⼩⼩的传感器⾥可以实现电源校准、微处理和其他必需的电路。

◆传感器可以使⽤低成本的EEPROMS(电可擦除只读存储器)来校准系数和其他信息。

◆标准串⾏接⼝简化了数据记录器的复杂设计。

◆在未来的传感器发展进化上,数据记录器可以独⽴前进和简化。

◆ SDI-12数据记录器可以和不同的传感器接⼝相连。

◆⼈们很容易熟练掌握SDI-12数据记录器和SDI-12传感器。

◆不同版本的SDI-12传感器可以和不同版本的SDI-12数据记录器兼容⼯作
3.0 SDI-12 电器接⼝
SDI-12电器接⼝使⽤SDI-12总线在SDI-12 数据记录器和传感器间传输串⾏数据。

SDI-12 总线是连接多种SDI-12设备的电缆。

此电线为三芯电缆:
1) ⼀根串⾏数据线
2) ⼀根地线
3) ⼀根12伏线
以下描述中,所有数值(不特殊指定)允许有±10% 的误差差。

图 1 给出了连接⼀个数据记录器和两个传感器的SDI-12总线。

⼀个SDI12 总线⾄少可以连接10个传感器。

3.1 串⾏数据线
这个数据线是⼀个双向、三相数据传输线。

表 1 给出了传输串⾏数据的标准SDI-12的逻辑和电压值。

表1:串⾏数据的逻辑和电压值
3.1.1 电压转换
正常操作时,数据线性电压变化率不会⼤于1.5V/微秒。

3.1.2阻抗
当⼀个SDI-12设备⼯作时,它的直流源阻抗必须在1000欧姆和2000欧姆之间。

当SDI-12设备关闭或者在低功耗待机状态时,对地的直流阻抗必须在160K欧姆和360K欧姆之间。

3.2 地线
数据记录器的地线必须和电路地和地球地连接到⼀起。

传感器电路地也必须和地线连接起来,但是通常不⽤和它⾃⼰的地球地相连。

如果要求把传感器电路
地和地球地相连,在传感器地球地和数据记录器地球地之间必须加⼀个⼤于
12AWG的地线做为雷击保护。

为了保证所有的传感器电流损耗最⼤时,数据记录器和所有传感器间的电压损耗⼩于0.5伏,要求地线导线要⾜够⼤。

3.2.1 瞬间保护
SDI-12总线最好使⽤瞬间保护电路。

附录 A 给出了SDI-12 瞬间保护建议。

3.3 12V线
⾄于地,在最⼤传感器负载0.5安培时,数据记录器 (或者外⽤电源)给12伏线提供了9.6 v到16v的电压。

SDI-12不需要数据记录器给12V线提供电源。

因为传感器和12v线之间会有感应负载,需要串连⼀个⼆极管。

传感器⾥SDI-12没有电压限制,可以不做瞬间保护。

附录 A 是可⽤瞬间保护电路图。

3.4 接头
A SDI-12的接头类型⽆特殊要求。

4.0 SDI-12 通讯协议
SDI-12数据记录器和传感器通过数据线交换ASCII码来进⾏通讯。

数据记录器向数据线上发出中断唤醒传感器,数据线上中断持续时间须⼤于12毫秒。

数据记录器发送⼀个指令。

传感器返回⼀个相应的响应,⼀个指令对应⼀个相应的传感器。

每个指令的第⼀个字符对应于记录器需要与之通讯的传感器地址。

SDI-12 总线上的其他传感器不响应此指令继续处于低功率待机状态。

当数据记录器向⼀个
传感器发出开始测量指令,记录器在这台传感器的数据收集完成前不
和其他传感器之间进⾏通讯。

(多重测量指令时,⼀个数据记录器可以同时和其他传感器进⾏通讯。

见页14。

)
记录器/传感器基本测量过程如下:
步骤 1.数据记录器通过中断唤醒 SDI-12 总线上的传感器
步骤 2.记录器发送指令给相应的传感器,开始测量。

步骤 3.地址传感器最⼤响应时间为15微秒,测量数据值准备传回。

步骤 4.如果测量⽴即有效,记录器发送⼀个指令给传感器开始测量。

如果测量没有准备好,数据记录器等待传感器给记录器发送数据准备好请求。

记录器然后发送⼀个接收数据指令。

步骤 5. 传感器响应并返回⼀个或更多的测量值。

4.1 波特率和字帧结构
SDI-12的波特率为1200。

表2显⽰了 SDI-12的字帧结构。

4.2 可实现特性
所有在SDI-12总线上发送的字符必须是可印刷的ASCII字符,表3显⽰了可印刷的字符。

这⾥有两种例外:
1) 所有的从SDI-12 传感器来的响应由回车中⽌ (0D hex, 13 decimal) 线性流⼊字符 (0A hex, 10 decimal),本⽂显⽰为 ;
2) 在同样情况下,CRC校验的第⼆、三个字符可以不是可印刷的ASCII码。

4.3 设备地址
每⼀个命令的第⼀个字符都是传感器地址,同样的,响应的第⼀个字符也是传感器地址。

以使SDI-12记录器校验响应来⾃正确的传感器。

(地址是⼀个单字符显⽰哪⼀台传感器响应了这条指令) 表 4 给出了这些地址码。

ASCII码 '0' 到ASCII码 '9'是所有传感器和数据记录器必须⽀持的标准地址。

因为有时需要会超过10个传感器,所以使⽤地址范围从ASCII码 'A'到ASCII 码 'Z' (⼗进制数从65到90)和ASCII码 'a'到ASCII码 'z' (⼗进制数从97到122)。

4.4 SDI-12的命令和响应
下表列出了SDI-12的基本指令、格式,以及指令响应的的格式。

所有SDI-12 的1.3版本的传感器和数据记录器必须⽀持表中的所有指令。

另外,传感器可⽀持4.4.13节中的扩展指令。

表中的术语(a, ll, cccccccc, mmmmmm, vvv, xxx, , etc.)在4.4.1和4.4.12中说明。

名称命令应答
Break(起始) 持续空号(space)⽆
⾄少12mS
确认 a! a
送识别信息 aI! AIIccccccccmmmmmmvvvxxx (xx)
改变地址 aAb! b(假定传感器⽀持此命令)地址查询 ?! a
开始测量 aM! atttn
开始测量加CRC aMC! atttn
发送数据 aD0! a<数值>或a<数值>
附加测量 aM1! atttn
. atttn
. atttn
. atttn
aM9! atttn
附加测量加CRC aMC1!…aMC9! atttn
检验 aV! atttn
协同测量 aC! atttn
协同测量加CRC aCC! atttn
附加协同测量 aC1! atttn
. atttn
. atttn
. atttn
aC9! atttn 附加协同测量aCC1!…aCC9! attt加CRC
连续测量aR0!…aR9! a<数值>(同D命令)连续测量加CRC aRC0!…aRC9! a<数值>(同D命令)
表5。

SDI-12基本命令/应答
5.0 常⽤命令的使⽤说明
!——查询地址指令,向传感器发送该命令,传感器返回⼀个地址码,这种⽅式在总线上只能连接⼀只传感器,⽤以查询它的地址。

a !——确认指令,发磅该命令,传感器返回⼀个地址码,以确认其存在。

a I!——识别信息指令,传感器返回条包含有软件件版本、⼚家名称、序列号信息。

aAb!——改变传感器地址指令,“a”为旧地址,“b”为新地址。

aM! ——开始测量指令,传感器返回atttn,ttt为本次测量所需时间,n为产⽣数据的数量。

aD0! ——获取数据指令,数据采集器通过该指令将传感器数据收集。

相关文档
最新文档