本文主要是介绍SCJ-RTU01遥测终端机定制传感器接入:定制水位计接入,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
SCJ-RTU01遥测终端机定制传感器接入采用了宏定义配置功能,通过宏定义去选择当前程序定制传感器的型号,这样可以避免一些不常用的传感器占用永久资源,通过客户需要选择则不同的定制传感器,以一下某某水位计为例,编写底层传感器数据采集驱动,代码如下:
/*************************************************************************************************************************
* 函数 : SENSORS_ERROR WL_Custom_Coll(MODBUS_HANDLE *pModbusHandle, u8 num, WL_SENSOR_DATA * pSensorData)
* 功能 : 采集水位传感器
* 参数 : pModbusHandle:modbus句柄;num:水位计计编号0-1;pSensorData:传感器采集到的数据
* 返回 : 读取状态
* 依赖 : 底层通信驱动
* 作者 : cp1300@139.com
* 时间 : 2023-01-07
* 最后修改时间 : 2023-01-07
* 说明 : RS485 9600bps 寄存器6,返回无符号,单位mm, 默认地址0x34 线序:红 黑 黄 绿
*************************************************************************************************************************/
SENSORS_ERROR WL_Custom_Coll(MODBUS_HANDLE* pModbusHandle, u8 num, WL_SENSOR_DATA* pSensorData)
{MRTU_ERROR m_error;u16 RegDataBuff[2];u8 retry;WL_SensorData_SetInvalidValue(pSensorData); //将传感器数据设置为无效if (num > (2 - 1)) return SENSORS_OTHER_ERROR;for (retry = 0; retry < 3; retry++){m_error = MODBUS_HOST_ReadMultReg(pModbusHandle, HOLD_REG_03H, GetWaterLevel_Addr(num), 6, 1, RegDataBuff); //主机读取从机多个指定寄存器if (m_error == MRTU_OK){pSensorData->WaterDepth = RegDataBuff[0]; //单位为mmreturn SENSORS_OK;}else{SYS_DelayMS(400);}}return SENSORS_COMM_ERROR;
}
通过遥测终端机虚拟机测试,启动虚拟RTU,虚拟RTU通过调用PC的串口采集数据。
虚拟RTU屏幕
使用上位机连接到虚拟的RTU,通过串口连接
启动水位计1,并选中定制型号
通过Modbus Slave 虚拟被测试的水位计,寄存器6为水位,设置如下:
寄存器6,水位12.345
上位机采集结果如下
虚拟RTU屏幕显示如下
代码测试无误后,使用MDK编译为嵌入式代码(代码与虚拟机完全共用),编译完成后代使用上位机升级到RTU即可完成水位计的定制集成。
产品详情:水利遥测终端机(RTU)一体化监测设备_武汉水测家_多普勒超声波流量计_雷达流量_WTRExpert (scj-water.com)
这篇关于SCJ-RTU01遥测终端机定制传感器接入:定制水位计接入的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!