很多朋友在很多地方都听到过**集中器,但是对集中器还没有隔概念,那么什么是集中器呢?
问:什么是集中器
集中器(concentrator device)是连接终端、计算机或通信设备的中心连接点设备。它成为电缆汇合的中心点。在若干终端密集区内,通常为减少通信线路,先把终端接到集中器,然后再经过高速线路将集中器连接到计算机的通信控制器,因此,集中器也是共享线路和提高线路利用率的一种有效设备。
本设备就是一个小型的集中器,可以和JSY-1030以及和深圳市健思研科技有限公司大部分产品衔接组成网络
本设备下行通过RS485读取其他数据采集设备汇总后通过上行4G定时上报至服务器,服务器亦可主动获取数据信息。设备多用于配电箱,工业领域、民用领域都可使用。细分领域到路灯照明系统、汽车充电站、机房节能系统、球场灯控管理系统。
小型配电箱
接下来开始讲解如何使用华大单片机HC32L176如何控制合宙4G模块Air724
Air724使用AT指令模式,那么需要先配置HC32串口
void App_Uart2PortCfg(void)
{
GPIO_General_MODE_SET(AirKeyCom, 0x11);
Gpio_SetIO(AirKeyCom);
GPIO_General_MODE_SET(AIR724_nRst_Pro, AIR724_nRst_Pin, 0x10);
GPIO_General_MODE_SET(AIR724_Tx_Pro, AIR724_Tx_Pin, 0x10);
Gpio_SetAfMode(AIR724_Tx_Pro, AIR724_Tx_Pin, GpioAf1);
GPIO_General_MODE_SET(AIR724_Rx_Pro, AIR724_Rx_Pin, 0x00);
Gpio_SetAfMode(AIR724_Rx_Pro, AIR724_Rx_Pin, GpioAf1);
}
void App_Uart2Cfg(void)
{
stc_uart_cfg_t stcCfg;
// stc_uart_baud_t stcBaud;
DDL_ZERO_STRUCT(stcCfg);
Sysctrl_SetPeripheralGate(SysctrlPeripheralUart1, TRUE); ///
///< UART Init
stcCfg.enRunMode = UartMskMode1;
stcCfg.enStopBit = UartMsk1bit;
stcCfg.enMmdorCk = UartMskDataOrAddr;
stcCfg.stcBaud.u32Baud = 115200;
stcCfg.stcBaud.enClkDiv = UartMsk8Or16Div;
stcCfg.stcBaud.u32Pclk = Sysctrl_GetPClkFreq();
Uart_Init(AIR724_UART, &stcCfg);
Uart_ClrStatus(AIR724_UART, UartRC);
Uart_ClrStatus(AIR724_UART, UartTC);
Uart_EnableIrq(AIR724_UART, UartRxIrq);
EnableNvic(UART1_3_IRQn, IrqLevel1, TRUE);
}
接下来开始配置Air724,在上电是最好控制模块硬件复位一次,复位后连续发送AT\r\n获取OK指令后
typedef struct
{
char *tData;
char *rData;
u16 TimeOut;
u16 WaitTime;
u8 Cycle;
u8 Flag;
} AIR724_CmdDef;
AIR724_CmdDef AIR724_Cmd[] = {
{"AT\r\n", "OK", 500, 100, 10, 1}, // AT 测试通讯是否正常
{"AT&F\r\n", "OK", 1000, 1000, 3, 1}, //恢复出厂设置
{"ATE1&W+CREG=2;&W\r\n", "OK", 1000, 100, 3, 1}, //关闭回显
{"AT+CPIN?\r\n", "+CPIN: READY", 500, 10, 20, 1}, //查询SIM卡是否正常
{"AT+CSQ\r\n", "+CSQ: 0,0", 500, 10, 60, 0}, //查询信号强度
{"AT+CGATT?\r\n", "+CGATT: 1", 500, 10, 60, 1}, //
{"AT+CREG?\r\n", "+CREG:", 500, 10, 30, 1}, //查询模组是否注册GSM网络
{"AT+CGREG?\r\n", "+CGREG: 0,1", 500, 10, 3, 1}, //查询模组是否注册上GPRS网络
{"AT+CIPHEAD=1\r\n", "OK", 1000, 10, 3, 1}, //设置接收到消息时显示IP头,格式为:"+IPD,data length:"
{"AT+CIPSHUT\r\n", "OK", 1000, 300, 3, 1}, //关闭移动场景
{"AT+CSTT=CMNET\r\n", "OK", 1000, 100, 3, 1}, //
{"AT+CIICR\r\n", "OK", 10000, 200, 3, 1}, //激活移动场景
{"AT+CIFSR\r\n", "OK", 1000, 50, 10, 0}, //查询本机IP地址
{"AT+CIFSR=?\r\n", "OK", 1000, 100, 10, 1}, //
};
如果得到的应答都正确,那么就表示模块已经可以正常连接到服务器了
```c
/**
* @name:
* @msg: 设置服务器IP和端口号
* @param {*}
* @return {*}
*/
const u8 DeviceMessage[] = {0x03, 0x39, 0x15, 0x00, 0x19, 0x00, 0xFA, 0x00, 0x64, 0x10, 0x01, 0xB0, 0x01, 0x10, 0x01};
u8 AIR724_SetIPPort(void)
{
u8 result = 0xff;
// u16 rlen=0;
switch (AIR724_Workflow.Setp)
{
case 0: //获取本地IP地
result = AIR724_ReloadingReadAT("AT+CIFSR\r\n", (char *)m4G.LocalIP, 1000, 3, 1);
break;
case 1:
result = AIR724_ReloadingReadAT("AT+CGSN\r\n", (char *)m4G.M.u.IMEI, 500, 3, 1);
m4G.M.u.IMEI[15] = 0;
break;
case 2:
result = AIR724_ReloadingReadAT("AT+CCID\r\n", (char *)m4G.M.u.CCID, 1000, 3, 1);
break;
case 3:
result = GetCREG();
break;
case 4:
result = GetCSQ();
break;
case 5:
result = AIR724_ReloadingWriteAT("AT+CIPCLOSE\r\n", "1234", 1000, 3, 0);
break;
case 6:
memset((char *)m4G.TxData, 0, sizeof(m4G.TxData));
sprintf((char *)m4G.TxData, "AT+CIPSTART=TCP,%d.%d.%d.%d,%d\r\n", m4G.M.u.ServerIP[0], m4G.M.u.ServerIP[1], m4G.M.u.ServerIP[2], m4G.M.u.ServerIP[3], m4G.M.u.Port[1] | m4G.M.u.Port[0] << 8);
result = AIR724_ReloadingWriteAT((char *)m4G.TxData, "CONNECT OK", 10000, 3, 1);
break;
case 7:
result = AIR724_ReloadingReadAT("AT+CIPHEAD=1\r\n", "OK", 1000, 3, 1);
break;
case 8: //登录
sprintf((char *)m4G.account, "admin");
sprintf((char *)m4G.password, "123456");
StrTruncate(m4G.account, m4G.TxData, 0, 0, 8);
StrTruncate(m4G.password, m4G.TxData, 0, 8, 8);
if (AIR724_SendAndRecServerCom(0x1000, 16, m4G.TxData) == OK)
{
if ((AIR_Receive.u.D_FunC[0] << 8 | AIR_Receive.u.D_FunC[1]) == 0x1000 && AIR_Receive.u.DataField[0] == 0x00)
{
AIR724_Workflow.Setp++;
break;
}
}
break;
case 9: //注册
if (AIR724_SendAndRecServerCom(0x1001, 15, (u8 *)DeviceMessage) == OK)
{
if ((AIR_Receive.u.D_FunC[0] << 8 | AIR_Receive.u.D_FunC[1]) == 0x1001 && AIR_Receive.u.DataField[0] == 0x00)
{
AIR724_Workflow.Setp++;
break;
}
}
break;
case 10: //获取时间
if (AIR724_SendAndRecServerCom(0x1005, 6, (u8 *)m4G.Time.T) == OK)
{
if ((AIR_Receive.u.D_FunC[0] << 8 | AIR_Receive.u.D_FunC[1]) == 0x1005)
{
AIR724_Workflow.Setp++;
StrTruncate(AIR_Receive.u.DataField, m4G.Time.T, 0, 0, 6);
App_RtcSetTime();
break;
}
}
break;
case 11:
SetAirRunStep(WORK, 0);
break;
default:
AIR724_Workflow.Setp = 0;
break;
}
// Modbus_HoldRegCpy(ModbusPar.aModbusData, 0, 0x0200 * 2, sizeof(m4G.M.Data));
switch (result)
{
case OK:
DDL_ZERO_STRUCT(AIR724_UART_MARK.TX);
AIR724_Workflow.WaitFlag = RESET;
AIR724_Workflow.SendFlag = RESET;
AIR724_Workflow.Setp++;
break;
case No_ops:
break;
case AIR_Error:
SetAirRunStep(FAULT, 0);
return FAULT; //转到故障
case Wait_Timeout:
SetAirRunStep(FAULT, 0);
return FAULT; //转到故障
break;
default:
break;
}
// Modbus_HoldRegCpy(m4G.M.Data, 0, 0x0200 * 2, 60);
return WORK;
}
连接到服务器后就可以正常接收数据了,需要按照协议进行通讯
这里使用C#临时搭建个TCP服务器,后续会出一篇新帖讲述如何搭建TCP服务器
PC上位机临时测试软件
设备参数
1)电压量程:100V、220V等可选
2)电流量程:100A,外接开口互感器型号可选
3)信号处理:采用专用测量芯片,24位AD采用
4)过载能力:1.2倍量程可持续;瞬间(<20mS)电流5倍,电压1.2倍量程不损坏
5)输入阻抗:电压通道>1KΩ/V;电流通道≤100mΩ
测量输出数据
电压、电流、功率、正向电能、反向电流、漏电流、功率因素、频率等多个电参量,
测量精度
电压、电流、电量:±1.0%,有功电度1级
隔离
RS-485接口与供电电源、电压输入、电流输出之间相互隔离;隔离耐压2000VAC
电源
1)可选100V、220V、电压线路100V~220V
2)AC220V供电时,峰值电压不得超过265V;典型功耗:≤2W
工作环境
1)工作温度:-20~+70℃;存放温度:-40~+75℃。
2)相对湿度:5~95%,无结露(在40℃下)。
3)海拔高度:0~3000米
4)环境:无爆破、腐蚀气体及导电尘埃,无显著摇动、振动和冲击的场所。
温度漂移
≤100ppm/℃
安装方式
2P导轨式安装
需要获取程序软件代码可联系QQ:450152268技术交流,全部产品可定制。
版权声明:本文为CSDN博主「HCC_Joy」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/huang9406/article/details/122867672
暂无评论