WSTP11A
来自Waveshare Wiki
| ||||||||||||||||||||
| ||||||||||||||||||||
说明
产品概述
本产品是工业级温度变送器,用于检测气体或者液体温度,测量精度达到0.5%FS,使用RS485(标准Modbus-RTU协议),外壳为304不锈钢,具有超强抗干扰能力和IP65的防护等级。
产品特点
- 数字量输出,使用RS485(标准Modbus-RTU协议)
- 宽电压供电、非线性修正、精度高
- 体积小、重量轻、安装方便
- 防雷击、截频干扰设计、抗干扰能力强
- 接线方向和过压保护、限流保护
- 测量精度高0.5%FS
产品参数
- 测量介质:液体、气体
- 物体温度测量范围:-70°C ~ 380 °C
- 供电电压:12~36VDC
- 整体重量:180g
- 测量范围:-50~100℃
- 输出信号:RS485(标准Modbus-RTU协议)
- 测量精度:0.5%FS
- 环境温度:-40~85℃
- 稳定性能:±0.1%FS/年
- 防护等级:IP65
工作条件 | |
环境温度 | 环境湿度 |
---|---|
-40~85℃ | 0%~95%RH(无冷凝、无结霜) |
材质 | |
整体材质 | 304不锈钢 |
---|---|
赫斯曼接头 | ABS工程塑料 |
护管材质 | 304不锈钢(接触) |
过程连接 | 304不锈钢(接触) |
外壳 | 304不锈钢(接触) |
接口说明
赫斯曼接口连接方式 | |
1 | 接V+(12V~36V) |
2 | 接A |
3 | 接V-(GND) |
4() | 接B |
通讯方式
RS485由RS232和RS422发展而来,弥补了抗干扰能力差、通信距离短、速率低的缺点,增加了多点、双向通信能力,即允许多个发送器连接在同一条主线上,同时增加了发送器的驱动能力和冲突保护特性,扩展了总线共模范围。
通讯协议
Modbus协议是应用于电子控制器上的一种通用语言。通过此协议,控制器相互之间、控制器经由网络(例如以太网)和其它设备之间可以通信。它已经成为一通用工业标准。有了它,不同厂商生产的控制设备可以连成工业网络,进行集中监控。此协议定义了一个控制器能认识使用的消息结构,而不管它们是经过何种网络进行通信的。它描述了一控制器请求访问其它设备的过程,如何回应来自其它设备的请求,以及怎样侦测错误并记录。它制定了消息域格局和内容的公共格式。
Modbus具有以下几个特点:
(1)标准、开放,用户可以免费、放心地使用Modbus协议,不需要交纳许可证费,也不会侵犯知识产权。
(2)Modbus可以支持多种电气接口,如RS-232、RS-485等,还可以在各种介质上传送,如双绞线、光纤、无线等。
(3)Modbus的帧格式简单、紧凑,通俗易懂。
- 本产品通讯协议技术参数(产品地址默认为01)
- 读取数据03命令说明(数据都为16进制数)
- 写入 06命令说明(数据都为16进制数)
- 设备地址:每个设备都有一个自己的地址,当设备接收到一帧数据后,程序首先对设备地址字节进行判断比较,如果与自己的地址不同,则对这帧数据直接不予理会,如果如果与自己的地址相同,就要对这帧数据进行解析,按照之后的功能码执行相应的功能。如果地址是0x00,则认为是一个广播命令,就是所有的从机设备都要执行的指令。
- 功能码:在第二个字节功能代码字节中,Modbus规定了部分功能代码,此外也保留了一部分功能代码作为备用或者用户自定义,这些功能码大家不需要去记忆,甚至都不用去看,直到你有用到的那天再过来查这个表格即可。
- CRC校验:CRC校验是一种数据算法,是用来校验数据对错的。CRC校验函数把一帧数据除最后两个字节外,前边所有的字节进行特定的算法计算,计算完后生成了一个16bit的数据,作为CRC校验码,添加在一帧数据的最后。接收方接收到数据后,同样会把前边的字节进行CRC计算,计算完了再和发过来的CRC的16bit的数据进行比较,如果相同则认为数据正常,没有出错,如果比较不相同,则说明数据在传输中发生了错误,这帧数据将被丢弃,就像没收到一样,而发送方会在得不到回应后做相应的处理错误处理。
接线方式
使用说明
本例程使用树莓派双通道隔离型RS485扩展板(需要自行购买)为例,详细的使用方法参考2-CH_RS485_HAT_WIKI。
硬件连接
赫斯曼接口连接方式 | |
1 | 接V+(12V~36V) |
2 | 接A(Change 2) |
3 | 接V-(GND) |
4() | 接B(Change 2) |
功能引脚 | 树莓派接口(BCM) | 描述 |
VCC | 5V | 3.3V/5V电源正 |
GND | GND | 电源地 |
SCLK | P21(SPI1 SCLK) | SPI时钟输入 |
MOSI | P20(SPI1 MOSI) | SPI数据输入 |
MISO | P19(SPI1 MISO) | SPI数据输出 |
CS | P18(SPI1 CS) | SPI片选信号 |
IRQ | P24 | 中断输出 |
EN1 | P27 | 通道1(Channel 1)收发使能: 高电平发送使能,低电平接收使能 |
EN2 | P22 | 通道2(Channel 2)收发使能: 高电平发送使能,低电平接收使能 |
添加驱动
- 在终端执行:
sudo nano /boot/config.txt #加入如下,int_pin根据实际焊接方式设置: dtoverlay=sc16is752-spi1,int_pin=24 #重启设备 sudo reboot
重启后,SC16IS752的驱动会加载到系统内核中,此时可以运行ls /dev查看一下 将会多出如下设备:
在2020-05-27的树莓派系统中gpiochip3没有了变成了gpiochip2
安装库
- 安装wiringPi
sudo apt-get install wiringpi #对于树莓派4B可能需要进行升级; cd /tmp wget https://project-downloads.drogon.net/wiringpi-latest.deb sudo dpkg -i wiringpi-latest.deb gpio -v # 运行 gpio -v 会出现2.52版本,如果没有出现说明安装出错
- 安装python2库
sudo apt-get update sudo apt-get install python-pip sudo pip install RPi.GPIO sudo apt-get install python-serial sudo apt-get install python-crcmod
- 安装python3库
sudo apt-get update sudo apt-get install python3-pip sudo pip3 install RPi.GPIO sudo apt-get install python3-serial sudo apt-get install python3-crcmod
测试
- 下载并运行测试例程
sudo apt-get install p7zip-full sudo wget https://www.waveshare.net/w/upload/1/14/WSTP11A_Code.7z sudo 7z x WSTP11A_Code.7z sudo chmod 777 -R WSTP11A_Code cd WSTP11A_Code/
- C程序
cd c make clean make sudo ./main
- python程序
#python2 cd python cd examples sudo python main.py #python3 cd python cd examples sudo python3 main.py
程序详解
- 示例程序运行在只有一个变送器连接上时,通过获取变送器地址、读取温度数据、设置地址加一
- C语言函数详解
#当只有一个设备连接上RS485总线,获取当前设备地址 uint8_t WSTP11A_get_addr(void) #将指点地址的设备修改到新地址 uint8_t WSTP11A_set_addr(uint8_t o_addr, uint8_t n_addr) #获取指定地址的设备的数据信息 float WSTP11A_get_temp(uint8_t addr)
- python函数详解
#通过字符队列获取16位CRC校验 def crc16Add(self,read): #当只有一个设备连接上RS485总线,获取当前设备地址 def get_addr(self): #获取指定地址的设备的数据信息 def get_temp(self,addr): #将指点地址的设备修改到新地址 def set_addr(self,o_addr,s_addr):
FAQ
- 原因分析:
- 变送器未供电
- 接线错误
- 解决方法:
- 给变送器按接线图正确供电
- 原因分析:
- 变送器未供电
- 现场射频干扰较强
- 未使用屏蔽线缆
- 解决方法:
- 使用屏蔽线缆且屏蔽层接地
- 变送器与大地可靠连接
- 原因分析:
- 供电电压不正确
- 解决方法:
- 是否符合供电范围