TF-R4-30 RS485風速傳感器調試記錄
風速傳感器如下,貼的是北京無線聯(lián)科的標簽,估計也是做貿易買進貼logo賣出,也不是自己研發(fā)的,因為找了技術支持,他們轉給了另外一家公司:
2、通過RS485和USR-TCP232-304 RS485轉以太網(wǎng)模塊相連,獲取風速,然后通過RJ45端口送到互聯(lián)網(wǎng)上,風速傳感器只有三組命令可以使用,分別是:查詢當前風速;查詢當前從機地址;修改當前從機地址,如果發(fā)送的命令錯誤,比如CRC不對,是沒有任何返回的,這點比較狗血,按理說應該有個錯誤返回提示,但是沒有。
3、這款風速傳感器使用的是CRC16 Modbus算法校驗的,所以通過查表即可得出兩個字節(jié)的CRC16,計算CRC函數(shù)代碼如下,不過注意大小端,風速傳感器使用的是大端模式,所以高字節(jié)在低位,且高字節(jié)先發(fā)送:
WORD?CheckCRCModBus?(const?BYTE?*nData,?WORD?wLength) { BYTE?nTemp; WORD?wCRCWord?=?0xFFFF; const?WORD?wCRCTable[]?=?{ 0X0000,?0XC0C1,?0XC181,?0X0140,?0XC301,?0X03C0,?0X0280,?0XC241, 0XC601,?0X06C0,?0X0780,?0XC741,?0X0500,?0XC5C1,?0XC481,?0X0440, 0XCC01,?0X0CC0,?0X0D80,?0XCD41,?0X0F00,?0XCFC1,?0XCE81,?0X0E40, 0X0A00,?0XCAC1,?0XCB81,?0X0B40,?0XC901,?0X09C0,?0X0880,?0XC841, 0XD801,?0X18C0,?0X1980,?0XD941,?0X1B00,?0XDBC1,?0XDA81,?0X1A40, 0X1E00,?0XDEC1,?0XDF81,?0X1F40,?0XDD01,?0X1DC0,?0X1C80,?0XDC41, 0X1400,?0XD4C1,?0XD581,?0X1540,?0XD701,?0X17C0,?0X1680,?0XD641, 0XD201,?0X12C0,?0X1380,?0XD341,?0X1100,?0XD1C1,?0XD081,?0X1040, 0XF001,?0X30C0,?0X3180,?0XF141,?0X3300,?0XF3C1,?0XF281,?0X3240, 0X3600,?0XF6C1,?0XF781,?0X3740,?0XF501,?0X35C0,?0X3480,?0XF441, 0X3C00,?0XFCC1,?0XFD81,?0X3D40,?0XFF01,?0X3FC0,?0X3E80,?0XFE41, 0XFA01,?0X3AC0,?0X3B80,?0XFB41,?0X3900,?0XF9C1,?0XF881,?0X3840, 0X2800,?0XE8C1,?0XE981,?0X2940,?0XEB01,?0X2BC0,?0X2A80,?0XEA41, 0XEE01,?0X2EC0,?0X2F80,?0XEF41,?0X2D00,?0XEDC1,?0XEC81,?0X2C40, 0XE401,?0X24C0,?0X2580,?0XE541,?0X2700,?0XE7C1,?0XE681,?0X2640, 0X2200,?0XE2C1,?0XE381,?0X2340,?0XE101,?0X21C0,?0X2080,?0XE041, 0XA001,?0X60C0,?0X6180,?0XA141,?0X6300,?0XA3C1,?0XA281,?0X6240, 0X6600,?0XA6C1,?0XA781,?0X6740,?0XA501,?0X65C0,?0X6480,?0XA441, 0X6C00,?0XACC1,?0XAD81,?0X6D40,?0XAF01,?0X6FC0,?0X6E80,?0XAE41, 0XAA01,?0X6AC0,?0X6B80,?0XAB41,?0X6900,?0XA9C1,?0XA881,?0X6840, 0X7800,?0XB8C1,?0XB981,?0X7940,?0XBB01,?0X7BC0,?0X7A80,?0XBA41, 0XBE01,?0X7EC0,?0X7F80,?0XBF41,?0X7D00,?0XBDC1,?0XBC81,?0X7C40, 0XB401,?0X74C0,?0X7580,?0XB541,?0X7700,?0XB7C1,?0XB681,?0X7640, 0X7200,?0XB2C1,?0XB381,?0X7340,?0XB101,?0X71C0,?0X7080,?0XB041, 0X5000,?0X90C1,?0X9181,?0X5140,?0X9301,?0X53C0,?0X5280,?0X9241, 0X9601,?0X56C0,?0X5780,?0X9741,?0X5500,?0X95C1,?0X9481,?0X5440, 0X9C01,?0X5CC0,?0X5D80,?0X9D41,?0X5F00,?0X9FC1,?0X9E81,?0X5E40, 0X5A00,?0X9AC1,?0X9B81,?0X5B40,?0X9901,?0X59C0,?0X5880,?0X9841, 0X8801,?0X48C0,?0X4980,?0X8941,?0X4B00,?0X8BC1,?0X8A81,?0X4A40, 0X4E00,?0X8EC1,?0X8F81,?0X4F40,?0X8D01,?0X4DC0,?0X4C80,?0X8C41, 0X4400,?0X84C1,?0X8581,?0X4540,?0X8701,?0X47C0,?0X4680,?0X8641, 0X8201,?0X42C0,?0X4380,?0X8341,?0X4100,?0X81C1,?0X8081,?0X4040?}; ???while?(wLength--) ???{ ??????nTemp?=?*nData++?^?wCRCWord; ??????wCRCWord?>>=?8; ??????wCRCWord?^=?wCRCTable[nTemp]; ???} ???return?wCRCWord; }
4、注意,USR-TCP232-304模塊要作為server使用,(PS:很疑惑,要是作為client,那服務端怎么主動和它發(fā)起通訊請求呢,肯定不行,因為沒有監(jiān)聽端口,無從談起。)而且要配置為透傳模式,否則485那一端的數(shù)據(jù)沒辦法收發(fā),所有的USR-TCP232-304-software-V1.0.1.pdf手冊上的那些命令,都是針對USR-TCP232-304模塊進行配置的,包括配置什么端口,波特率啥玩意的,原理無非是發(fā)送接收解析命令格式,執(zhí)行相關的配置修改而已。