|
【开源】开源之智能网络机柜控制系统
很高兴参加这个开源活动,不知道大家对于智能网络机柜控制系统熟悉不?和大家共同学习这个。
大概看下智能机柜的原理:机柜内部安装有温、湿度探测装置,能够智能监测机柜设备舱内环境温度和湿,并将监测到的温度、湿度值、电压,电流,总电量等信息显示到实时显示在柜门上的屏幕上。
一、功能设计:
1.触摸屏采用迪文的K600屏幕
2.通讯采用232、485、RJ45
3.单片机采用STM32F103V8T6,简单分析一下程序,看主函数初始化,源码已上传,可以参考。
- <font size="3" face="宋体">int main(void)
- {
- //Systick_Init (72); // MCU时钟初始化
- RCC_Configuration(); //系统时钟
- //IWDG_Init(4,1250); //与分频数为64,重载值为1250,溢出时间为2s
- delay_ms(500);
- EEP_init(); //初始化EEProm,读取参数
- GPIO_Config(); //端口初始化
- CAN_Config(); //can通讯初始化
- GPIO_Configuration();
- Timer_Configuration(); // 定时器初始化
- NVIC_Configuration(); //中断优先级设定初始化
- ADE7758_IOINIT1(); //ADE7758管脚初始化
- ADE_AdjustSaveData(); //功能:保存校准数据
- ADE_Init();//初始化
- //TIM3_Int_Init(4999,7199);//10Khz的计数频率,计数到5000为500ms
- uart_init(9600); //串口初始化
- DHT11_Init(); //温湿度传感器初始化
- //SPI1
- WIZ_SPI_Init(); // SPI初始化
- Reset_W5200(); // 硬重启W5500
- STMFLASH_Read(FLASH_SAVE_ADDR,eep_read,20); /*读取存储值 */
- set_network(); // 设置W5200的初始化IP信息
- GUI_init();//初始化屏状态 </font>
复制代码
4.存储数据采用单片机内部的flash,比如存储柜门的开门记录,报警记录等数据。
5.以太网芯片W5200采用SPI通信,可以通过网络连接电脑来监控机柜状态。
6.还有一个就是电能计量计ADE7758初始化,主要功能:
- 高精度,支持IEC 60687、IEC 61036、IEC 61268、IEC 62053-21、IEC 62053-22和IEC 62053-23标准;
- 兼容三相三线、三相四线及其它三相服务;
- 25°C时,在1000:1的动态范围内有功电能误差小于0.1%;
- 电源有功/无功/视在电能、电压均方根、电流均方根和采样波形数据;
- 两个脉冲输出,其中一个用于有功功率,而另一个可通过可编程的频率在无功功率和视在功率之间选择;
- 数字功率、相位和均方根失调校准;
- 片内、用户可编程阈值,用于线路电压SAG和过压检测。
二、分析以太网程序
1.设置W5200的初始化IP信息
- <font size="3" face="宋体">void set_network(void)
- {
- uint8 mac[6]={0x00,0x08,0xdc,0x01,0x02,0x03};
- uint8 sub[4]={255,255,255,0};
- uint8 gw[4]={192,168,1,1};
- uint8 lip[4];//={192,168,1,100};
- uint8 tmp[6]={0x00,};
- lip[0]=eep_read[6];
- lip[1]=eep_read[7];
- lip[2]=eep_read[8];
- lip[3]=eep_read[9];
- setSIPR(lip);
- setSHAR(mac);
- setSUBR(sub);
- setGAR(gw);
-
-
- //Init. TX & RX Memory size
- sysinit(txsize, rxsize);
-
- setRTR(2000);
- setRCR(3);
-
- getSHAR(tmp);
- // printf("mac: %02x:%02x:%02x:%02x:%02x:%02x\r\n",tmp[0],tmp[1],tmp[2],tmp[3],tmp[4],tmp[5]);
- getSIPR(tmp);
- // printf("ip: %d.%d.%d.%d\r\n",tmp[0],tmp[1],tmp[2],tmp[3]);
- getSUBR(tmp);
- //printf("subnet: %d.%d.%d.%d\r\n",tmp[0],tmp[1],tmp[2],tmp[3]);
- getGAR(tmp);
- // printf("gateway: %d.%d.%d.%d\r\n",tmp[0],tmp[1],tmp[2],tmp[3]);
- }</font>
复制代码
2.TCP发送数据
- <font size="3" face="宋体">//TCP/IP_Modbus发送数据
- void TCP_SendDATA(void)
- {
-
- //if(Tcp_ip_connec_flag==1)
- // {
- // Tcp_ip_connec_flag=0;
- // socket(0, Sn_MR_TCP, 5000, 0x00); // 重新打开Socket //重启Socket
- // }
- //else
- //{
- switch(getSn_SR(0))
- {
-
- case SOCK_INIT: // Socket处于初始化状态
- {
- listen(0); // 开始监听
- ka_tick_flag=0; // KA定时器开始计时标志位清零
- ka_send_flag=0; // KA发送标志位清零
- ka_no_data_tick=0; // 无数据传输时间计时器清零
- }
- break;
- case SOCK_ESTABLISHED: // Socket处于连接建立状态
- // case SOCK_UDP:
- if(getSn_IR(0) & Sn_IR_CON)
- {
- setSn_IR(0, Sn_IR_CON); // Sn_IR的第0位置1
- ka_tick_flag=0; // KA定时器开始计时标志位清零
- ka_no_data_tick=0; // 无数据传输时间计时器
- ka_send_flag=0; // KA发送标志位清零
- ka_send_tick=0; // KA发送定时器清零
- }
- if ((len = getSn_RX_RSR(0)) > 0)
- {
- len = recv(0, RX_BUF, len); // W5200收到数据
- Tcp_ip_Recvdata();
- //send(0,RX_BUF,len,(bool)0); // W5200将收到的数据发回客户端形成回环
-
- if(ka_tick_flag==0)
- {
- ka_tick_flag=1; // W5200同客户端进行了一次通信后,将KA定时器开始计时标志位置1,进入定时器中断,只要接下来在NO_DATA_PERIOD内没有数据通信,就开始发KA包
- }
- ka_no_data_tick=0; // 无数据传输时间计时器清零
- ka_send_tick=0; // KA发送定时器清零
- }
- if(ka_send_flag)
- {
- ka_send_flag=0; // KA发送标志位清零
- ka_send_tick=0; // KA发送定时器清零
- send_keepalive(0); // W5200发KA包给客户端
- //printf("*");
- }
- break;
- case SOCK_CLOSE_WAIT: // Socket处于等待关闭状态
- if ((len = getSn_RX_RSR(0)) > 0) // 如果此时仍有数据
- {
- len = recv(0, RX_BUF, len); // W5200继续收数据
- Tcp_ip_Recvdata();
- // send(0,RX_BUF,len,(bool)0); // W5200将收到的数据发回客户端
-
- }
- disconnect(0); // 关闭Socket
- ka_tick_flag=0; // KA定时器开始计时标志位清零
- ka_send_flag=0; // KA发送标志位清零
- ka_no_data_tick=0; // 无数据传输时间计时器清零
- ka_send_tick=0; // KA发送定时器清零
- break;
- case SOCK_CLOSED: // Socket处于关闭状态
- socket(0, Sn_MR_TCP, 5000, 0x00); // 重新打开Socket
- break;
- }
- //} Sn_MR_UDP
- }</font>
复制代码
三、迪文屏发送数据下位机接受
处理迪文屏触摸事件
四、硬件简单分析
总共三块电路板,有主控继电器板,信号采集板,以太网板。
1.主控MCU
2.电量采集
基本原理如下:
ADE7758 有六路模拟量输入,分成电流和电压两个通道。 流通道由三对差分电压输入,分别是 IAP,IAN;IBP,IBN;ICP,ICN。前端采用TA12-100的电流互感器,检测三路电流给ADE7758差分采样,电压这块电压互感器ZMPT107 ,采集三路电压,最后并把采样数据通过SPI给单片机,再上传迪文屏显示。
3.通讯方式 485和CAN通信都加入了数字隔离器ADUM1201ARZ,这样安全可靠,供电这块也采用电源隔离模块
4.以太网模块 采用W5200芯片实现网络通信,和单片机采用SPI连接,迪文屏可以设置IP地址。
5.继电器打开风扇、门、温度报警等功能就不一一细说了。
|
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有账号?立即注册
x
|