爆款云主机2核4G限时秒杀,88元/年起!
查看详情

活动

天翼云最新优惠活动,涵盖免费试用,产品折扣等,助您降本增效!
热门活动
  • 618智算钜惠季 爆款云主机2核4G限时秒杀,88元/年起!
  • 免费体验DeepSeek,上天翼云息壤 NEW 新老用户均可免费体验2500万Tokens,限时两周
  • 云上钜惠 HOT 爆款云主机全场特惠,更有万元锦鲤券等你来领!
  • 算力套餐 HOT 让算力触手可及
  • 天翼云脑AOne NEW 连接、保护、办公,All-in-One!
  • 中小企业应用上云专场 产品组合下单即享折上9折起,助力企业快速上云
  • 息壤高校钜惠活动 NEW 天翼云息壤杯高校AI大赛,数款产品享受线上订购超值特惠
  • 天翼云电脑专场 HOT 移动办公新选择,爆款4核8G畅享1年3.5折起,快来抢购!
  • 天翼云奖励推广计划 加入成为云推官,推荐新用户注册下单得现金奖励
免费活动
  • 免费试用中心 HOT 多款云产品免费试用,快来开启云上之旅
  • 天翼云用户体验官 NEW 您的洞察,重塑科技边界

智算服务

打造统一的产品能力,实现算网调度、训练推理、技术架构、资源管理一体化智算服务
智算云(DeepSeek专区)
科研助手
  • 算力商城
  • 应用商城
  • 开发机
  • 并行计算
算力互联调度平台
  • 应用市场
  • 算力市场
  • 算力调度推荐
一站式智算服务平台
  • 模型广场
  • 体验中心
  • 服务接入
智算一体机
  • 智算一体机
大模型
  • DeepSeek-R1-昇腾版(671B)
  • DeepSeek-R1-英伟达版(671B)
  • DeepSeek-V3-昇腾版(671B)
  • DeepSeek-R1-Distill-Llama-70B
  • DeepSeek-R1-Distill-Qwen-32B
  • Qwen2-72B-Instruct
  • StableDiffusion-V2.1
  • TeleChat-12B

应用商城

天翼云精选行业优秀合作伙伴及千余款商品,提供一站式云上应用服务
进入甄选商城进入云市场创新解决方案
办公协同
  • WPS云文档
  • 安全邮箱
  • EMM手机管家
  • 智能商业平台
财务管理
  • 工资条
  • 税务风控云
企业应用
  • 翼信息化运维服务
  • 翼视频云归档解决方案
工业能源
  • 智慧工厂_生产流程管理解决方案
  • 智慧工地
建站工具
  • SSL证书
  • 新域名服务
网络工具
  • 翼云加速
灾备迁移
  • 云管家2.0
  • 翼备份
资源管理
  • 全栈混合云敏捷版(软件)
  • 全栈混合云敏捷版(一体机)
行业应用
  • 翼电子教室
  • 翼智慧显示一体化解决方案

合作伙伴

天翼云携手合作伙伴,共创云上生态,合作共赢
天翼云生态合作中心
  • 天翼云生态合作中心
天翼云渠道合作伙伴
  • 天翼云代理渠道合作伙伴
天翼云服务合作伙伴
  • 天翼云集成商交付能力认证
天翼云应用合作伙伴
  • 天翼云云市场合作伙伴
  • 天翼云甄选商城合作伙伴
天翼云技术合作伙伴
  • 天翼云OpenAPI中心
  • 天翼云EasyCoding平台
天翼云培训认证
  • 天翼云学堂
  • 天翼云市场商学院
天翼云合作计划
  • 云汇计划
天翼云东升计划
  • 适配中心
  • 东升计划
  • 适配互认证

开发者

开发者相关功能入口汇聚
技术社区
  • 专栏文章
  • 互动问答
  • 技术视频
资源与工具
  • OpenAPI中心
开放能力
  • EasyCoding敏捷开发平台
培训与认证
  • 天翼云学堂
  • 天翼云认证
魔乐社区
  • 魔乐社区

支持与服务

为您提供全方位支持与服务,全流程技术保障,助您轻松上云,安全无忧
文档与工具
  • 文档中心
  • 新手上云
  • 自助服务
  • OpenAPI中心
定价
  • 价格计算器
  • 定价策略
基础服务
  • 售前咨询
  • 在线支持
  • 在线支持
  • 工单服务
  • 建议与反馈
  • 用户体验官
  • 服务保障
  • 客户公告
  • 会员中心
增值服务
  • 红心服务
  • 首保服务
  • 客户支持计划
  • 专家技术服务
  • 备案管家

了解天翼云

天翼云秉承央企使命,致力于成为数字经济主力军,投身科技强国伟大事业,为用户提供安全、普惠云服务
品牌介绍
  • 关于天翼云
  • 智算云
  • 天翼云4.0
  • 新闻资讯
  • 天翼云APP
基础设施
  • 全球基础设施
  • 信任中心
最佳实践
  • 精选案例
  • 超级探访
  • 云杂志
  • 分析师和白皮书
  • 天翼云·创新直播间
市场活动
  • 2025智能云生态大会
  • 2024智算云生态大会
  • 2023云生态大会
  • 2022云生态大会
  • 天翼云中国行
天翼云
  • 活动
  • 智算服务
  • 产品
  • 解决方案
  • 应用商城
  • 合作伙伴
  • 开发者
  • 支持与服务
  • 了解天翼云
      • 文档
      • 控制中心
      • 备案
      • 管理中心

      通讯接口应用笔记3:使用W5500实现Modbus TCP服务器

      首页 知识中心 软件开发 文章详情页

      通讯接口应用笔记3:使用W5500实现Modbus TCP服务器

      2024-07-08 08:10:59 阅读次数:40

      TCP,实现,服务器

        前面我们设计实现了W5500的驱动程序,也讲解了驱动的使用方式。在最近一次的项目应用中,正好有一个使用W5500实现TCP通讯的需求,所以我们就使用该驱动程序轻松实现。这一篇中我们就来说一说基于我们W5500通讯驱动程序实现TCP通讯的过程。

      1、应用需求

        在本次应用中,要求实现一个基于W5500的Modbus TCP服务器。这个需求的描述虽然只有一句话,但是这个需求的内容可不简单。我们首先来分析一下这个需求的具体内容。

        为了实现基于W5500的Modbus TCP服务器,我们必先须基于W5500实现一个TCP服务器。W5500本身是带硬件协议栈的,但却并不带TCP服务器。不过在我们前面的关于外设驱动库的系列文章中已经封装了W5500的驱动,其中就带有一个TCP服务器,我们可以直接采用就可以了。

        其次我们要在TCP服务器的基础上实现Modbus TCP协议。关于Modbus协议栈,我们以前的文章就讲述过Modbus通讯协议栈的开发问题。而且我们已经将我们开发的Modbus通讯协议栈开源。其中已经封装了Modbus TCP服务器对象,所以我们直接采用这一Modbus通讯协议栈就可以了。

        有了驱动和协议栈,我们还需要考虑应用层面的具体问题,而且也只需要考虑应用层面的具体问题。这里就看出我们前面封装外设驱动和Modbus通讯协议栈的价值所在了。关于应用层面的问题我们主要需要重点考虑几个问题:

        第一,数据的存储类型及地址范围。我们知道Modbus协议常见的数据类型有4种。我们需要考虑在系统中需要使用到的类型及地址,这将决定Modbus协议数据处理回调函数的实现。

        第二,网络配置问题,我们需要通过网络访问这台下位机就需要要为其配置网络。这存在静态配置,动态配置和系统自动分配的问题。作为服务器,我们一般不会希望让系统自动分配。所以我们需要考虑的是如何方便使用者为其分配地址的问题。

        第三,并发访问的问题。挂载在网络上的服务器肯定面临多个客户端来访问的问题。W5500可以实现8个Socket,而Modbus TCP通用的默认端口号是502,当然也可以使用其它端口,只要不冲突就好。所以我们可以考虑使用不同的Socket和不同的端口号来实现并发访问。

      2、功能设计

        我们分析了基于W5500实现Modbus TCP服务器的需求。我们现在从硬件和软件两个方面来分析器功能的实现。

      2.1、硬件功能设计

        我们知道W5500带有硬件协议栈,集成有以太网控制器和物理层,所以对外我们只需要实现以太网变压器和硬件接口就好了。但与控制器部分的连接则采用SPI接口,除此之外还需要提供中断输入和模式设定的相关接口。在这里我们设计器硬件连接如下:

      通讯接口应用笔记3:使用W5500实现Modbus TCP服务器

        在上图中,我们将中断输入引入到MCU的GPIO端口,而模式设定PMODE0、PMODE1、PMODE2均通过电阻上拉到电源。对于W5500来说PMODE0、PMODE1、PMODE2均为高电平表示开启全部功能,所以我们直接拉高而不是引入到MCU引脚来控制。

      2.2、软件功能设计

        从需求来说,软件的功能非常简单,就是实现一个Modbus TCP服务器。但实际上,如我们前面所描述的那样,软件需要考虑的问题还是比较多的。从功能实现上主要有3个方面需要考虑:

        第一,实现TCP服务器,这个服务器用于在系统中轮询处理,从W5500获取数据和发送数据给W5500都需要通过这部分来实现。

        第二,TCP服务器得到数据后,我们需要解析数据,并根据解析的上位数据决定进一步的动作,还需要生成返回信息。这部分对应功能就是Modbus TCP服务器的实现。

        第三,根据Modbus TCP服务器解析出的Modbus消息,需要决定下一步的动作,这个具体动作根据功能码的不同可能有不同需求,所以我们需要根据具体的要求实现不同功能码的动作。

        根据上述的设计,我们可以简单的将需要实现的软件功能图示如下:

      通讯接口应用笔记3:使用W5500实现Modbus TCP服务器

        上图中,因为W5500的TCP服务器以及Modbus TCP协议栈的相关函数我们都做了封装,所以它们之间的调用都将以回调函数的方式实现。除了上述的软件实现外,还需要注意必要的初始化配置。

      3、应用实现

        根据我们前面的设计,接下来我们考虑一下这一需求的具体实现过程。我们将这一过程分为4个部分来分别描述。

      3.1、系统的初始化

        在实现具体的功能之前,我们需要对硬件以及软件环境做必要的初始化配置。具体到这里就是对W5500作必要的软硬件配置,包括接口、网络以及回调函数等。具体实例代码如下:

      /* 以太网通讯配置 */
      void McEthernetConfiguration(void)
      {
      uint8_t mac[6]={0x01, 0x08, 0xdc,0x00, 0xab, 0xcd}; //本地Mac地址
      uint8_t ip[4]={192, 168, 1, 190}; //本地IP地址
      uint8_t sn[4]={255,255,255,0}; //子网掩码
      uint8_t gw[4]={192, 168, 1, 1}; //网关地址
      uint8_t dns[4]={0,0,0,0}; //DNS服务器地址

      /* 以太网使用GPIO初始化 */
      GPIO_Init_Configuration();

      /* SPI1端口初始化 */
      SPI1_Init_Configuration();

      /*W5500对象初始化函数*/
      W5500Initialization(&w5500, //W5500对象
      mac, //本地Mac地址
      ip, //本地IP地址
      sn, //子网掩码
      gw, //网关地址
      dns, //DNS服务器地址
      NETINFO_STATIC, //DHCP类型
      EnterCritical, //进入临界区
      ExitCritical, //退出临界区
      EnableChipSelect, //片选使能
      DisableChipSelect, //片选失能
      ReadByteBySPI, //SPI读字节
      WriteByteBySPI, //SPI写字节
      W5500DataParsing, //报文解析函数
      NULL //数据请求函数
      );
      }

        在这个实例中,我们对网络部分采用的是静态配置,就是说网络参数是固定不变的,而且我们的测试环境只限于局域网内。

      3.2、数据处理函数

        数据处理函数是最灵活的,因为每个项目及每个人对数据处理的要求都是不一样的,只要能符合应用要求就没问题。需要说一下的是,这部分是Modbus协议栈对处理数据的要求,想要详细了解的话,可以看我们以前关于Modbus协议站的文章。对于这个实例,数据处理函数如下:

      /*获取想要读取的Coil量的值*/
      void GetCoilStatus(uint16_t startAddress,uint16_t quantity,bool *statusList)
      {
      uint16_t start;
      uint16_t count;

      /*先判断地址是否处于合法范围*/
      start=(startAddress>CoilStartAddress)?((startAddress<=CoilEndAddress)?startAddress:CoilEndAddress):CoilStartAddress;
      count=((start+quantity-1)<=CoilEndAddress)?quantity:(CoilEndAddress-start);

      for(int i=0;i<count;i++)
      {
      statusList[i]=dPara.coil[start+i];
      }
      }

      /*获取想要读取的保持寄存器的值*/
      void GetHoldingRegister(uint16_t startAddress,uint16_t quantity,uint16_t *registerValue)
      {
      uint16_t start;
      uint16_t count;

      /*先判断地址是否处于合法范围*/
      start=(startAddress>HoldingRegisterStartAddress)?((startAddress<=HoldingRegisterEndAddress)?startAddress:HoldingRegisterEndAddress):HoldingRegisterStartAddress;
      count=((start+quantity-1)<=HoldingRegisterEndAddress)?quantity:(HoldingRegisterEndAddress-start);

      for(int i=0;i<count;i++)
      {
      registerValue[i]=aPara.holdingRegister[start+i];
      }
      }

      /*设置单个线圈的值*/
      void SetSingleCoil(uint16_t coilAddress,bool coilValue)
      {
      /*先判断地址是否处于合法范围*/
      if(coilAddress<=12)
      {
      dPara.coil[coilAddress]=coilValue;
      }
      }

      /*设置多个线圈的值*/
      void SetMultipleCoil(uint16_t startAddress,uint16_t quantity,bool *statusValue)
      {
      uint16_t endAddress=startAddress+quantity-1;
      if((startAddress<=12)&&(endAddress<=12))
      {
      for(int i=0;i<quantity;i++)
      {
      dPara.coil[i+startAddress]=statusValue[i];
      }
      }
      }

      /*设置单个寄存器的值*/
      void SetSingleRegister(uint16_t registerAddress,uint16_t registerValue)
      {
      bool noError=(bool)(((50<=registerAddress)&&(registerAddress<=59))
      ||((73<=registerAddress)&&(registerAddress<=74))
      ||((90<=registerAddress)&&(registerAddress<=91)));

      if(noError)
      {
      aPara.holdingRegister[registerAddress]=registerValue;
      }

      }

      /*设置多个寄存器的值*/
      void SetMultipleRegister(uint16_t startAddress,uint16_t quantity,uint16_t *registerValue)
      {
      uint16_t endAddress=startAddress+quantity-1;

      bool noError=(bool)(((18<=startAddress)&&(startAddress<=28)&&(18<=endAddress)&&(endAddress<=28))
      ||((50<=startAddress)&&(startAddress<=59)&&(50<=endAddress)&&(endAddress<=59))
      ||((73<=startAddress)&&(startAddress<=74)&&(73<=endAddress)&&(endAddress<=74))
      ||((90<=startAddress)&&(startAddress<=91)&&(90<=endAddress)&&(endAddress<=91)));
      if(noError)
      {
      for(int i=0;i<quantity;i++)
      {
      aPara.holdingRegister[startAddress+i]=registerValue[i];
      }
      }

      }

      3.2、数据解析函数

        大家可能在前面的初始化函数中发现有一个名为W5500DataParsing的数据解析函数。这个函数是W5500驱动中,TCP服务器的要求,实现对数据的解析。因为具体的应用层协议解析多不胜数,所以设计成了回调函数,其函数原型如下:

      /*解析接收到的数据*/
      typedef uint16_t (*W5500DataParsingType)(uint8_t *rxBuffer,uint16_t rxSize,uint8_t *txBuffer);

        对于我们来说,我们需要根据具体的应用层协议来实现这一函数。不过我们采用的Modbus TCP协议,在我们的Modbus协议栈中已经实现了解析函数,所以我们调用如下:

      /*报文解析函数*/
      static uint16_t W5500DataParsing(uint8_t *rxBuffer,uint16_t rxSize,uint8_t *txBuffer)
      {
      /*解析接收到的信息,返回响应命令的长度*/
      return ParsingClientAccessCommand(rxBuffer,txBuffer);
      }

      3.3、TCP服务器

        我们在前面已经说过了,需要对服务器进行轮询。所以我们需要在一个进程中轮询访问W5500的TCP服务器。同样我们也要考虑多客户端同时访问的问题,我们将轮询函数实现如下:

      /* 以太网通讯处理 */
      void McEthernetProcess(void)
      {
      /*TCP服务器数据通讯*/
      W5500TCPServer(&w5500,Socket0,502);

      W5500TCPServer(&w5500,Socket1,503);

      W5500TCPServer(&w5500,Socket2,504);

      W5500TCPServer(&w5500,Socket3,505);

      W5500TCPServer(&w5500,Socket4,506);

      W5500TCPServer(&w5500,Socket5,507);

      W5500TCPServer(&w5500,Socket6,508);

      W5500TCPServer(&w5500,Socket7,509);
      }

        事实上使用同一个Socket和不同的端口也是可以实现多客户端访问的,但既然有8个Socket,用起来自然更好一点。

      4、应用验证

        我们已经根据需求实现了一个Modbus TCP服务器,究竟效果如何呢?我们还需要测试一下,以确认设计的正确性。

      4.1、通讯测试

        我们将目标板连接到局域网中,使用著名的Modbus Poll软件来测试一下我们设计的程序是否符合要求。

        我们首先在一台机器上连接端口为504的Modbus TCP服务器,连接正常且数据获取也完全正确。具体如下图所示:

      通讯接口应用笔记3:使用W5500实现Modbus TCP服务器

      通讯接口应用笔记3:使用W5500实现Modbus TCP服务器

        同时,我们采用局域网内的另一台机器连接端口为502的Modbus TCP服务器,连接正常且数据获取也完全正确。具体如下图所示:

      通讯接口应用笔记3:使用W5500实现Modbus TCP服务器

      通讯接口应用笔记3:使用W5500实现Modbus TCP服务器

        经过上述测试,我们可以确定我们实现的Modbus TCP服务器是可行的,而且在多客户端并行访问下也可以正确工作。

      4.2、小结

        这一篇中,我们实现了可以支持多客户端访问的Modbus TCP服务器,经测试运行也符合设计预期。这里我们将需要考虑的几个问题总结如下:

        关于初始化配置的问题,在这个例子中,我们对网络的配置是直接在软件上固定死的,这样做虽然简单直接但并不是一个好的选择。更好的办法是可以让使用者自己配置,方法有多种,可以根据自己的实际情况,在软件上进一步的考虑。

        关于数据处理的问题,具体的数据处理与实际的应用需求有关,也与应用层协议的要求有关,这个例子中实现的Modbus的数据处理函数并不是唯一的,但可参考其思路。

        关于数据解析的问题,在本例中实现的是Modbus TCP服务器的解析函数。对于不同的应用协议需要编写不同的解析函数,这部分是灵活性最大的,支持所有可运行于TCP应用层的通讯协议。

        关于多客户端访问的问题,W5500可以实现8个Socket,而Modbus TCP默认端口号是502,当然也可以使用其它端口。所以我们可以考虑使用不同的Socket和不同的端口号来实现并发访问。事实上,经过我们测试使用同一个Socket和不同的端口也是可以实现多客户端访问的,有兴趣的同仁可以试试。

      版权声明:本文内容来自第三方投稿或授权转载,原文地址:https://blog.51cto.com/u_520887/5290117,作者:Moonan,版权归原作者所有。本网站转在其作品的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如因作品内容、版权等问题需要同本网站联系,请发邮件至ctyunbbs@chinatelecom.cn沟通。

      上一篇:《深入浅出MySQL--数据库开发、优化与管理维护》读书笔记--开发篇

      下一篇:CPU 使用率比较高的线程小脚本

      相关文章

      2025-05-19 09:05:01

      项目更新到公网服务器的操作步骤

      项目更新到公网服务器的操作步骤

      2025-05-19 09:05:01
      公网 , 数据库 , 文件 , 更新 , 服务器
      2025-05-19 09:04:44

      FinalShell 配置SSH密钥登陆

      FinalShell 配置SSH密钥登陆

      2025-05-19 09:04:44
      密钥 , 服务器 , 配置
      2025-05-19 09:04:30

      【Canvas技法】辐射式多道光影的实现

      【Canvas技法】辐射式多道光影的实现

      2025-05-19 09:04:30
      代码 , 函数 , 实现
      2025-05-16 09:15:24

      模拟实现strlen

      模拟实现strlen

      2025-05-16 09:15:24
      strlen , 实现 , 模拟 , 源码
      2025-05-14 10:33:31

      【数据结构】第一章——绪论(2)

      【数据结构】第一章——绪论(2)

      2025-05-14 10:33:31
      函数 , 实现 , 打印 , 理解 , 算法 , 输入 , 输出
      2025-05-14 10:33:25

      30天拿下Rust之网络编程

      在现代软件开发中,网络编程无处不在。无论是构建高性能的服务器、实时通信应用,还是实现复杂的分布式系统,对网络编程技术的掌握都至关重要。Rust语言以其卓越的安全性、高性能和优秀的并发模型,为网络编程提供了坚实的基础。

      2025-05-14 10:33:25
      Rust , TCP , 使用 , 客户端 , 异步 , 编程
      2025-05-14 10:33:16

      30天拿下Python之使用网络

      Python网络编程覆盖的范围非常广,包括:套接字编程、socketserver、HTTP和Web开发、异步编程和asyncio等。

      2025-05-14 10:33:16
      Json , TCP , 客户端 , 接字 , 服务器 , 示例 , 连接
      2025-05-14 09:51:21

      python 在创建socket之后建立心跳机制

      在Python中,建立心跳机制通常用于维持客户端和服务器之间的长连接,确保连接活跃性。心跳机制通常是通过定时发送心跳包(一种小型的、特定格式的数据包)来实现的,如果在预定时间内没有收到对方的心跳响应,则认为连接可能已经中断。

      2025-05-14 09:51:21
      发送 , 客户端 , 服务器 , 服务器端 , 示例
      2025-05-14 09:51:21

      python向IP地址发送字符串

      在Python中,向IP地址发送字符串通常意味着你需要通过某种协议来实现通信。最常见的协议包括TCP和UDP。这里,我将分别给出使用TCP和UDP协议向指定IP地址发送字符串的示例代码。

      2025-05-14 09:51:21
      TCP , UDP , 协议 , 地址 , 示例 , 端口
      2025-05-14 09:51:15

      JAVA 两个类同时实现同一个接口

      在Java中,两个类同时实现同一个接口是非常常见的。接口定义了一组方法,实现接口的类必须提供这些方法的具体实现。

      2025-05-14 09:51:15
      Lambda , 函数 , 实现 , 接口 , 方法 , 表达式
      查看更多
      推荐标签

      作者介绍

      天翼云小翼
      天翼云用户

      文章

      33561

      阅读量

      5233790

      查看更多

      最新文章

      【Canvas技法】辐射式多道光影的实现

      2025-05-19 09:04:30

      模拟实现strlen

      2025-05-16 09:15:24

      JAVA 两个类同时实现同一个接口

      2025-05-14 09:51:15

      在Java、Java Web中放置图片、视频、音频、图像文件的方法

      2025-05-13 09:53:23

      优先级算法

      2025-05-13 09:49:12

      git学习(1)(简单概述、代码版本控制方式(集中/分布))

      2025-05-09 08:51:09

      查看更多

      热门文章

      window平台单进程多线程服务器通信

      2023-05-05 10:13:48

      Thrift第七课 服务器多线程发送异常

      2023-05-16 09:42:24

      Python编程:paramiko模块远程登录

      2023-02-21 08:02:44

      Filter&Listener笔记

      2023-02-22 08:37:42

      【Ansible】测试ansible ping模块

      2023-06-08 06:16:14

      linux网络编程初步

      2023-05-10 06:17:58

      查看更多

      热门标签

      java Java python 编程开发 代码 开发语言 算法 线程 Python html 数组 C++ 元素 javascript c++
      查看更多

      相关产品

      弹性云主机

      随时自助获取、弹性伸缩的云服务器资源

      天翼云电脑(公众版)

      便捷、安全、高效的云电脑服务

      对象存储

      高品质、低成本的云上存储服务

      云硬盘

      为云上计算资源提供持久性块存储

      查看更多

      随机文章

      高并发对于服务器性能有什么要求?

      Linux命令之查找可执行文件或源代码文件或帮助文件whereis

      日志管理演进:从基础到创新

      Python编程:Django初步学习

      vue upload 上传文件之删除文件

      Spring中@Qualifier注解详细解析

      • 7*24小时售后
      • 无忧退款
      • 免费备案
      • 专家服务
      售前咨询热线
      400-810-9889转1
      关注天翼云
      • 旗舰店
      • 天翼云APP
      • 天翼云微信公众号
      服务与支持
      • 备案中心
      • 售前咨询
      • 智能客服
      • 自助服务
      • 工单管理
      • 客户公告
      • 涉诈举报
      账户管理
      • 管理中心
      • 订单管理
      • 余额管理
      • 发票管理
      • 充值汇款
      • 续费管理
      快速入口
      • 天翼云旗舰店
      • 文档中心
      • 最新活动
      • 免费试用
      • 信任中心
      • 天翼云学堂
      云网生态
      • 甄选商城
      • 渠道合作
      • 云市场合作
      了解天翼云
      • 关于天翼云
      • 天翼云APP
      • 服务案例
      • 新闻资讯
      • 联系我们
      热门产品
      • 云电脑
      • 弹性云主机
      • 云电脑政企版
      • 天翼云手机
      • 云数据库
      • 对象存储
      • 云硬盘
      • Web应用防火墙
      • 服务器安全卫士
      • CDN加速
      热门推荐
      • 云服务备份
      • 边缘安全加速平台
      • 全站加速
      • 安全加速
      • 云服务器
      • 云主机
      • 智能边缘云
      • 应用编排服务
      • 微服务引擎
      • 共享流量包
      更多推荐
      • web应用防火墙
      • 密钥管理
      • 等保咨询
      • 安全专区
      • 应用运维管理
      • 云日志服务
      • 文档数据库服务
      • 云搜索服务
      • 数据湖探索
      • 数据仓库服务
      友情链接
      • 中国电信集团
      • 189邮箱
      • 天翼企业云盘
      • 天翼云盘
      ©2025 天翼云科技有限公司版权所有 增值电信业务经营许可证A2.B1.B2-20090001
      公司地址:北京市东城区青龙胡同甲1号、3号2幢2层205-32室
      • 用户协议
      • 隐私政策
      • 个人信息保护
      • 法律声明
      备案 京公网安备11010802043424号 京ICP备 2021034386号