1.雷達流量計介紹
雷達流量計是一種很常用的非接觸測流流量計,一般采用RS485通訊接口,SCJ-LL21雷達流量計采用標準的Modbus-RTU協議;
設備采用標準RS485接口,波特率9600,8個數據位,1個停止位,無校驗,協議默認為標準Modbus-RTU協議,功能碼03H;
設備默認的從機地址為1,地址可以通過將設備連接電腦,使用配置助手進行修改;
2.雷達流量計寄存器說明

注意:一般建議讀取寄存器3002空高(設備到水面高度),由采集器來計算水深(安裝高度-空高=水深),如果需要使用設備內水深,請通過RS485連接電腦后,使用“ 配置助手.exe”設置水位計安裝高度,之后才能輸出準確的水深;
3.讀取雷達流量計示例:
讀取空高與流速
主機發送:01 03 0B BA 00 02 E7 CA
設備返回:01 03 04 03 9F 02 2C CA E4
解釋: 03 9F 0x039F => 927 空高:927mm,也就是0.927m
02 2C 0x022C => 556 流速:556mm/s,也就是0.556m/s
②讀取空高
主機發送:01 03 0B BA 00 01 A7 CB
設備返回:01 03 02 03 9D 79 1D
解釋: 03 9D 0x039D => 925 空高:925mm,也就是0.925m
③讀取流速
主機發送:01 03 0B BB 00 01 F6 0B
設備返回:01 03 02 09 E9 7F 9A
解釋: 09 E9 0x09E9 => 2537 流速:2537mm/s,也就是2.537m/s
4.編寫程序讀取SCJ-LL21雷達流量計的數據。
首先進行modbus-rtu主機接口初始化

實現uart串口底層接口
//RS485發送接口
static bool RS485_CH1_SendData(u8 DataBuff[], u16 DataLen)
{
UARTx_EnableRx(RS485_CH1_UART_CH, FALSE); //RS485發送數據前關閉接收
UARTx_SendData(RS485_CH1_UART_CH, DataBuff, DataLen); //串口發送數據
UARTx_EnableRx(RS485_CH1_UART_CH, TRUE); //發送完成后啟動接收
return TRUE;
}
//RS485接收數據接口
static int RS485_CH1_ReadData(u8** pDataBuff, u8 ByteTimeOutMs, u16 TimeOutMs, u16* pReceiveDelayMs)
{
u32 cnt = 0;
u16 TempTime;
if (ByteTimeOutMs < 1) ByteTimeOutMs = 1; ? ? ? ? ?//字節超時時間,2個幀之間的間隔最小時間
TimeOutMs /= ByteTimeOutMs;
TimeOutMs += 1;
TempTime = TimeOutMs;
while (TimeOutMs--)
{
cnt = UARTx_GetRxCnt(RS485_CH1_UART_CH);
OSTimeDlyHMSM(0, 0, 0, ByteTimeOutMs);
if ((cnt > 0) && (cnt == UARTx_GetRxCnt(RS485_CH1_UART_CH)))
{
if (pReceiveDelayMs != NULL) //需要返回延時
{
*pReceiveDelayMs = (TempTime - TimeOutMs) * ByteTimeOutMs;
}
*pDataBuff = sg_RS485_CH1_Buff; //接收緩沖區
return cnt;
}
}
return 0;
}
//RS485清除接收緩沖區
static void RS485_CH1_ClearData(void)
{
UARTx_ClearRxCnt(RS485_CH1_UART_CH); //清除串口緩沖區
}
//通過modbus-rtu協議讀取雷達流量計數據
/*************************************************************************************************************************
* 函數 : SENSORS_ERROR FL_SCJ_LL21_Coll(MODBUS_HANDLE* pModbusHandle, u8 num, FL_SENSOR_DATA* pSensorData)
* 功能 : 采集流量計數據
* 參數 : pModbusHandle:modbus句柄;num:流速計編號0-1;pSensorData:采集的傳感器數據
* 返回 : 采集狀態 SENSORS_ERROR
* 依賴 : 底層通信驅動
* 作者 : http://www.scj-water.com/
* 時間 : 2022-07-11
* 最后修改時間 : 2022-07-11
* 說明 :
*************************************************************************************************************************/
SENSORS_ERROR FL_SCJ_LL21_Coll(MODBUS_HANDLE* pModbusHandle, u8 num, FL_SENSOR_DATA* pSensorData)
{
u32 temp;
MRTU_ERROR m_error;
u8 retry;
u16 RegDataBuff[8];
if(num > (FL_SENSOR_COUNT -1)) return SENSORS_NON_ERROR;
FL_SensorData_SetInvalidValue(pSensorData); //傳感器數據初始化為無效
for (retry = 0; retry < 3; retry++)
{
m_error = MODBUS_HOST_ReadMultReg(pModbusHandle, HOLD_REG_03H, GetFlowmeterSensorAddr(num), 3000+2, 7, RegDataBuff); //主機讀取從機多個指定寄存器
if (m_error == MRTU_OK)
{
pSensorData->FlowVelocity = abs((s16)RegDataBuff[1]); //水流速度,單位mm/s-取絕對值
pSensorData->WaterDepth = RegDataBuff[0]; //空高,單位mm
pSensorData->FlowDirection = RegDataBuff[6] ? 1 : 0; //平均流向
return SENSORS_OK;
}
else
{
SYS_DelayMS(150);
}
}
return SENSORS_COMM_ERROR;
}
————————————————
版權聲明:本文為博主原創文章,遵循 CC 4.0 BY-SA 版權協議,轉載請附上原文出處鏈接和本聲明。
原文鏈接:https://blog.csdn.net/WTRExpert/article/details/146973163;
-
單片機
+關注
關注
6058文章
44821瀏覽量
644562 -
雷達
+關注
關注
50文章
3041瀏覽量
119049 -
流量計
+關注
關注
10文章
1538瀏覽量
54641
發布評論請先 登錄
相關推薦
評論