第二十六章 W55MH32 上位机搜索和配置示例

目录

1 上位机简介

2 特点

3 应用场景

4 搜索和配置的基本工作流程

5 实现过程

6 运行结果

7 总结


本篇文章我们将详细介绍如何在W55MH32芯片上面实现上位机搜索和配置功能,并通过实战例程,为大家讲解如何通过上位机搜索局域网中的W55MH32,并进行网络地址配置。例程中提供了一个开源的上位机配置工具SmartConfigTool,支持搜索设备,设置网络地址参数以及固件升级等功能。

该例程用到的其他网络协议,例如DHCP请参考相关章节。有关W55MH32的初始化过程,请参考Network Install 章节,这里将不再赘述。

1 上位机简介

嵌入式上位机(Embedded Host)是指在嵌入式系统中,作为与嵌入式设备进行通信、控制和数据交换的上位设备。它通常拥有更强的计算能力和存储资源,用于控制和监控下位嵌入式设备(如传感器、执行器、嵌入式控制器等)的运行。

2 特点

  1. 高效性:上位机配置下位机可以大大提高控制系统的效率。上位机发出控制命令,下位机接收并解释成相应的时序信号来直接控制设备,响应速度快,可靠性高。
  2. 实时性:下位机可以实时地响应上位机的控制指令,并对设备进行实时控制,确保系统的稳定性和安全性。同时,下位机也可以实时地向上位机反馈设备状态数据,使得上位机可以及时了解系统状态并进行相应的控制调整。
  3. 灵活性:上位机和下位机可以灵活地组合和扩展,以满足不同系统的需求。上位机可以同时连接多个下位机,对它们进行监控、控制和数据处理。同时,下位机也可以根据需要连接多个设备,实现设备的分布式控制。
  4. 交互友好:上位机通常具有人机交互界面,为用户提供友好的图形界面或者文本界面,方便用户进行操作、配置和监控。

3 应用场景

W55MH32使用NetBIOS 协议可以进行以下几种应用:

  1. 工业自动化:上位机发出控制指令,下位机接收并解释成相应的时序信号来直接控制设备,响应速度快,可靠性高。上位机可以监控生产过程、发出控制指令、进行数据分析和优化等。下位机可以实时控制设备、采集设备状态数据、接收和执行控制指令等。
  2. 物联网:上位机可以远程监控和管理设备、进行数据分析和处理等。下位机可以接收和执行控制指令、采集和传输设备状态数据等。
  3. 智能家居:上位机可以发出控制指令、监控家庭网络等。下位机可以接收和执行控制指令、控制智能设备的运行和状态采集等。
  4. 医疗设备:上位机可以发出控制指令、远程监控和管理医疗设备等。下位机可以接收和执行控制指令、控制医疗设备的运行和状态采集等。

4 搜索和配置的基本工作流程

搜索:上位机通过 UDP 广播发送 FIND 命令,设备作为下位机在收到后将自身配置信息发送给上位机,上位机收到后呈现获取到的设备信息;

配置:在已经搜索到设备的基础上,上位机向该设备发送 SETT 命令后,设备收到后根据上位机显示的网络信息对本地进行重新配置,并在串口显示。

5 实现过程

接下来,我们在W55MH32上实现上位机搜索回复以及上位机配置功能。

注意:测试实例需要PC端和W55MH32处于同一网段。

首先在主循环内,调用了do_udp_config()函数。持续地运行do_udp_config()函数。

while (1)
{
    do_udp_config(SOCKET_ID); // Run and process UpperComputer command.
}

do_udp_config()函数不断处理 UDP 配置相关的操作,包括接收来自上位机的命令,根据命令进行不同的操作,如接收网络信息查询请求并返回网络信息,或者接收网络配置信息并更新本地网络信息等。

do_udp_config()函数如下:

void do_udp_config(uint8_t sn)
{
    uint16_t i;
    uint16_t len = 0;
    uint8_t  rip[4];
    uint16_t rport;
    uint16_t local_port    = 1460;
    uint8_t  sw_version[2] = {1, 0};

    memset(RecvMsg.op, 0, sizeof(RecvMsg)); // clear RecvMsg

    switch (getSn_SR(sn))
    {
    case SOCK_UDP:
        if ((len = getSn_RX_RSR(sn)) > 0)
        {
            len = recvfrom(sn, (uint8_t *)&RecvMsg, len, rip, &rport);
            if (len > sizeof(ConfigMsg))
                break;
            {
                // FIND: searching, SETT: setting, FIRM: firmware uploading
                if ((RecvMsg.op[0] == 'F') && (RecvMsg.op[1] == 'I') && (RecvMsg.op[2] == 'N') && (RecvMsg.op[3] == 'D'))
                {
                    wizchip_getnetinfo(&netinfo); // get config network infomation.

                    memcpy(ConfigMsg.mac, netinfo.mac, 6);
                    memcpy(ConfigMsg.lip, netinfo.ip, 4);
                    memcpy(ConfigMsg.gw, netinfo.gw, 4);
                    memcpy(ConfigMsg.dns, netinfo.dns, 4);
                    memcpy(ConfigMsg.sub, netinfo.sn, 4);
                    memcpy(ConfigMsg.sw_ver, sw_version, 2);

                    RecvMsg = ConfigMsg;
                    memcpy(RecvMsg.op, "FIND", 4);
                    sendto(sn, (uint8_t *)&RecvMsg, sizeof(RecvMsg), rip, rport); // return network info to uppercomputer.
                    printf("Find\r\n");
                }
                else if ((RecvMsg.op[0] == 'S') && (RecvMsg.op[1] == 'E') && (RecvMsg.op[2] == 'T') && (RecvMsg.op[3] == 'T'))
                {
                    printf("Sett\r\n");
                    if ((RecvMsg.mac[0] == ConfigMsg.mac[0]) && (RecvMsg.mac[1] == ConfigMsg.mac[1]) && (RecvMsg.mac[2] == ConfigMsg.mac[2]) && (RecvMsg.mac[3] == ConfigMsg.mac[3]) && (RecvMsg.mac[4] == ConfigMsg.mac[4]) && (RecvMsg.mac[5] == ConfigMsg.mac[5]))
                    {
                        for (i = 0; i < 4; i++) // recv uppercomputer config network info
                        {
                            memcpy(netinfo.ip, RecvMsg.lip, 4);
                            memcpy(netinfo.sn, RecvMsg.sub, 4);
                            memcpy(netinfo.gw, RecvMsg.gw, 4);
                            memcpy(netinfo.dns, RecvMsg.dns, 4);
                            netinfo.dhcp = NETINFO_STATIC;
                        }
                        wizchip_setnetinfo(&netinfo); // write chip
                        printf("From the UpperComputer Config network information :\r\n");
                        print_network_information();  // readback and print
                    }
                }
            }
        }

        break;
    case SOCK_CLOSED:
        socket(sn, Sn_MR_UDP, local_port, 0x00);
        break;
    }
}

首先会运行一个UDP的状态机,当接收到消息时,会判断指令,如果为“FIND”指令,则读取设备的网络地址信息进行回传,如果为“SETT”指令,则将上位机下发的地址更新到W55MH32中。

6 运行结果

烧录例程运行后,首先进行了PHY链路检测,然后是通过DHCP获取网络地址并打印网络地址信息,观察串口打印的信息以获取设备运行状态;等待设备打印相关网络信息后,打开ConfigTool上位机工具,点击Search可以看到上位机成功获取并呈现设备信息,然后修改IP地址,点击Setting可以看到串口这边打印了上位机配置后的网络信息,如下图所示:

上位机查找设备:

上位机修改网络配置信息:

7 总结

本文讲解了如何在 W55MH32 芯片上实现上位机搜索和配置功能,通过实战例程展示了使用开源上位机配置工具 SmartConfigTool 搜索局域网中的 W55MH32 并进行网络地址配置的过程。文章详细介绍了上位机的概念、特点、应用场景以及搜索和配置的基本工作流程,帮助读者理解其在嵌入式设备管理中的实际应用价值。

下一篇文章将聚焦在 W55MH32 芯片上面使用 TOE 中断功能,解析 TOE 中断功能的核心原理及应用,同时通过实战例程讲解如何利用中断进行回环数据测试,敬请期待!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值