概述
前一段时间调试了一个雷达水位计,输出接口有RS485和SDI-12,协议没有modbus,只有SDI-12.因为我们的设备只有RS485接口,所以只能选择使用485连接。
SDI-12的软件协议也比较简单,写完以后与雷达水位计联调却发现始终不通。纠结一番后,查阅了水位计厂家的资料,最后问题终于解决。
期间我也在网上查询过,发现很多网友也有同样的问题,协议没问题,串口设置也没有问题,但是就是不通,为了避免更多的人再掉到这个坑里,现将我的经验分享给大家。
首先简单介绍下SDI-12协议。这个协议不同于RS232 RS485这些硬件层面的协议,SDI-12是一个包含了硬件和软件两方面的协议,国外应用的比较多,主要应用于各种传感器。对于SDI-12的软件层面协议我们不做过多介绍,常用指令的比较简单,大部分工程师实现这个指令采集毫无压力。而硬件侧面,SDI12为3线制接口,也可使用RS485接口,波特率固定为1200,数据位为7.高电平表示0,低电平表示1.
下面我们看一下SDI-12的时序图
有没有发现最开始有个break(中断),至少持续12ms。这个其实就是大部分人无法调通的关键。
我们再看一下哈希公司的一个文档:
这个文档描述了使用电脑接485再接串口控制器在接水位计的工作流程。
主意看串口控制器的三种模式,其中有一种IO模式。再看通信过程说明,起始信号的发出,先是把串口控制器切换为IO模式,然后输出电平保持12ms。是不是有点眼熟,没错,这个就是break(中断)信号。
大部分工程师调不通,就是没有正确发出这个中断信号。
我们一般使用的设备都是单片机+485芯片的方式,软件使用串口通信。每次只能完整的发出一个字节的数据,所以无法产生一个完整的中断信号。
那么,如何解决呢?
也简单,通信之前把串口的IO先改为普通IO状态,把TX引脚输出低电平,保持12ms,然后拉高即可。(注意TTL电平和SDI12电平逻辑相反。)后面的事情就简单了,大家都能搞定。
需要注意的是,使用单片机可以这样操作,但是使用电脑串口+485转换器就不行了(理论上你要有能力修改串口驱动应该也行),使用电脑的话还是买个SDI12的转换器吧。
还有一点,细心的同学可能已经发现了,上图里的485是交叉连接的。为什么呢?不要怀疑图纸,它没有画错。因为TTL和SDI12的电平逻辑是相反的。(但是好像也不是所有厂家的SDI12设备用485连接的时候都要交叉连接,我遇到过正常485连接方式就可以的,我估计是设备内部可能已经集成了反相电路。这个大家就根据实际情况来判断吧。)
最后
以上就是热心八宝粥为你收集整理的在485接口上实现SDI-12协议,你调通了吗?的全部内容,希望文章能够帮你解决在485接口上实现SDI-12协议,你调通了吗?所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复