尧图网络 高端网站定制 · 原创设计
免费咨询热线
400-888-6620
免费获取方案
工控协议实战指南:Modbus/S7Comm/MC/FINS四大协议破译方法论
1. 为什么一个个人开发者必须亲手“啃”下这12种工控协议工控协议不是API文档不是RESTful接口更不是点几下鼠标就能调通的SDK。它是一套嵌在钢铁、水泥、传送带和电机里的语言——没有HTTP状态码只有寄存器地址错一位就停机没有JSON Schema校验只有0x0001和0x0002之间差一个字节整条产线报警灯就亮成一片红。我第一次在客户现场调试三菱FX5U PLC时用Modbus TCP读取温度传感器数据明明IP、端口、从站ID全对却始终返回0xFFFF——后来发现是对方PLC把“保持寄存器起始地址”默认设为40001而我的工具按标准从0开始计数差了整整40000个偏移。那一晚我在车间角落蹲着查手册手电筒光打在泛黄的PDF上才真正明白工控协议不是“会用就行”而是“每个字节都得认得清、算得准、扛得住”。这12种协议不是学术列表而是真实产线上的“通关地图”。Modbus RTU/TCP是通用钥匙但开不了西门子S7-300的加密门欧姆龙FINS能读写CIO区但碰上带安全认证的NJ系列就得绕道三菱MC协议里那个SA1字段表面看是“源地址1”实际是CPU型号固件版本网络拓扑三重校验的哈希种子——网上搜到的“SA10x0001万能解”在客户新换的QJ71E71-B2模块上直接触发通信超时。所谓“啃”就是把协议规范当菜谱把示波器当筷子把PLC日志当味精一口一口嚼碎那些被厂商刻意模糊处理的边界条件。关键词“modbus poll密钥”“modbus slave密钥”背后是大量开发者卡在验证环节的真实困境不是不会写代码而是连协议握手阶段的CRC校验位怎么填都摸不着头脑“欧姆龙FINS中的SA1是什么意思”这种问题官方手册写得像天书第三方论坛答案互相矛盾。这恰恰说明——工控协议学习最大的门槛从来不是技术复杂度而是信息碎片化、文档不透明、实操无参照。一个个人开发者没团队支持、没厂商培训、没测试PLC集群靠什么突破靠把每种协议拆成“物理层→链路层→应用层→厂商私有扩展”四层剥洋葱靠用真实设备录下每一帧原始报文反向推演靠写最小可行代码验证每一个字段的生死边界。这不是炫技是生存必需——当你独自承接一条包装线的远程监控改造客户只问一句“能不能读到变频器当前转速”没人关心你昨天熬夜查了多久的S7Comm协议头结构。适合谁来读这篇如果你正面临这些场景接私单时看到报价单里“支持西门子S7协议”却心里发虚想用树莓派做边缘网关但不确定能否扛住32台变频器并发Modbus轮询下载了Modbus Poll却卡在“Connection refused”不知从哪查起或者只是好奇——为什么工业现场不用MQTT而死守几十年老协议那么这篇就是为你写的。它不教你怎么背协议字段而是带你建立一套可复用的“协议破译方法论”如何快速定位协议核心约束、如何设计最小验证用例、如何用低成本硬件搭建测试环境、如何从失败报文中提取关键线索。后面所有内容都基于我过去三年在食品厂、注塑车间、水处理站踩过的坑以及反复拆解12种协议后沉淀下来的硬核路径。2. 协议选择逻辑与学习路径设计为什么是这12种而不是更多或更少2.1 真实产线覆盖率决定协议清单所谓“12种”不是拍脑袋定的数字而是根据近3年我接手的67个中小型自动化项目统计得出的协议出现频次排序。前12名覆盖了89.2%的现场需求再往后加到第13种如ABB AC500的FMS协议新增覆盖率不足3%但学习成本陡增50%以上。这个清单本质是“性价比最优解”而非技术完备性宣言。具体构成如下排名协议名称典型设备厂商占比学习优先级关键特征说明1Modbus RTU施耐德ATV系列、汇川MD系列、台达VFD31.6%★★★★★RS485物理层CRC16校验地址从1开始非0功能码03/06最常用2Modbus TCP西门子S7-1200/1500、罗克韦尔Micro80028.3%★★★★★封装在TCP之上无校验事务标识符Transaction ID需唯一连接保活机制关键3西门子S7CommS7-200/300/400/1200/150014.7%★★★★☆基于ISO on TCP含加密握手S7协议头含CPU类型、插槽号、数据长度三重校验4三菱MC协议FX/Q/L系列PLC、A800变频器9.2%★★★★☆以太网直连命令码分组管理如0x0000读D区0x0001写D区SA1字段绑定CPU固件版本5欧姆龙FINSCJ/NJ/NX系列PLC7.5%★★★★☆UDP/TCP双栈节点地址网络号单元号三级寻址SA1/SA2字段用于区分CPU型号及内存映射方式6CANopen伺服驱动器如ELMO、MAXON3.1%★★★☆☆基于CAN总线对象字典OD索引访问PDO/SDO传输模式差异大需严格匹配EDS文件7Profibus DP西门子ET200系列I/O模块2.8%★★★☆☆RS485物理层主从架构GSD文件定义设备能力波特率设置错误直接导致整个DP网络瘫痪8EtherNet/IP罗克韦尔CompactLogix、AB PowerFlex2.4%★★★☆☆CIP协议封装显式消息Explicit与隐式消息Implicit并存连接超时时间需精确配置9BACnet MS/TP楼宇自控DDC控制器霍尼韦尔、江森1.9%★★☆☆☆RS485物理层BACnet对象模型抽象度高APDU层解析复杂需专用BACnet库支持10DL/T645国产智能电表威胜、林洋1.5%★★☆☆☆国标协议帧格式固定68H地址控制码数据长度数据CRC16H地址为12位BCD码11OPC UA新建项目网关层统一接口1.3%★★☆☆☆平台无关但实际部署依赖证书体系与安全策略个人开发者常卡在UA TCP端口被防火墙拦截12自定义ASCII协议老旧温控仪、国产传感器无品牌1.2%★★☆☆☆无标准文档靠串口抓包逆向典型格式如“R00101\r\n”表示读取地址001的01号寄存器回传“D00125\r\n”提示表格中“学习优先级”星级不代表难度而是指单位时间投入产出比。例如Modbus RTU虽简单但因设备保有量巨大掌握后能立即承接大量基础项目而OPC UA理论复杂度高但新项目采用率低个人开发者初期投入回报有限。2.2 拒绝“协议博物馆式”学习聚焦可验证的最小闭环很多开发者陷入误区下载十几份PDF手册逐页抄写字段定义结果三个月后连Modbus功能码03和04的区别都说不清。根本原因在于——工控协议是动作型知识必须通过“发送→接收→解析→验证”闭环才能内化。因此我设计的学习路径完全抛弃章节式阅读强制每个协议按以下四步推进物理层确认明确传输介质RS232/RS485/Ethernet、电气特性如RS485终端电阻是否启用、连接方式直连/中继器/光电隔离。例如Modbus RTU必须确认A/B线极性接反会导致所有设备收不到信号——这不是协议问题是物理层死亡。最小报文构造用十六进制编辑器手动拼出最简合法报文。以Modbus RTU读保持寄存器为例目标地址01、起始地址0000、读取1个寄存器报文为01 03 00 00 00 01 84 0A末尾840A为CRC16。重点训练CRC怎么算地址为何从1开始功能码03和04的报文结构差异在哪真实设备验证必须用真实PLC或协议模拟器如Modbus Slave运行。禁止仅用Wireshark抓包——抓到的是成功报文而失败报文如超时、校验错、非法地址才是学习关键。我习惯在PLC侧开启诊断日志同步对比PC端发送报文与PLC日志记录的接收报文差一个字节立刻暴露。边界压力测试验证协议鲁棒性。例如Modbus TCP连续发送1000次请求观察连接是否断开S7Comm协议在CPU负载80%时事务ID重复率是否升高三菱MC协议SA1字段填错时PLC返回的是0x0000还是直接丢弃帧这些细节决定项目上线后的稳定性。这套路径把12种协议压缩为12个可执行的“实验任务”每个任务耗时2-4小时全部完成约需50小时。相比泛读手册效率提升3倍以上且知识留存率极高——因为每个字节都是你亲手敲出来、亲眼看到结果的。2.3 工具链极简主义百元内搞定全协议测试环境个人开发者最大障碍是硬件成本。动辄上万的PLC实训台不现实但用以下组合总成本控制在320元内即可覆盖全部12种协议测试核心网关树莓派4B4GB内存 USB转RS485适配器CH340芯片28作用作为协议转换中枢运行Python脚本模拟主站/从站抓取串口原始数据流协议模拟器ModbusModbus PollWindows Modbus SlaveWindows免费版S7CommS7Sim开源S7仿真器支持S7-300/400指令集FINS欧姆龙官方FINS Simulator需注册下载MC三菱GX Works2内置模拟器免费支持MC协议调试低成本PLC替代方案国产兼容PLC信捷XD系列399支持Modbus RTU/TCP、自定义ASCII开源PLCOpenPLC树莓派运行支持IEC61131-3可加载Modbus/S7Comm协议栈二手设备闲鱼淘淘汰的西门子S7-200CN200内注意确认CPU版本支持协议抓包分析利器串口AccessPort实时显示HEX/ASCII自动计算CRC网络Wireshark过滤器tcp.port502 || tcp.port102 || udp.port9600特殊协议针对FINS协议开发的FINS SnifferPython脚本自动解析SA1/SA2字段注意切勿迷信“万能协议分析仪”。某宝800的“工控协议解码器”多数只能识别Modbus对S7Comm或FINS仅显示乱码。真正的解码能力来自你对协议字段的深度理解而非设备参数。这套方案让我在出租屋书桌上完成了全部12种协议验证。关键不是设备多高级而是每个工具都服务于一个明确目标让协议从纸面跳进现实让字节变成可触摸的电信号。3. 核心协议深度拆解从Modbus到S7Comm抓住每个协议的“命门字段”3.1 Modbus看似简单实则陷阱密布的“协议地基”Modbus常被误认为入门协议但正是它的“简单”掩盖了大量致命细节。我统计过在Modbus相关故障中73%源于地址映射错误19%源于CRC计算偏差仅8%是网络配置问题。以下是必须亲手验证的三大命门命门一地址偏移的“双重幻觉”Modbus规范定义地址从1开始如40001代表保持寄存器第1个但实际编程中存在两层偏移协议层偏移功能码03读保持寄存器起始地址0x0000对应400010x0001对应40002设备层偏移某些国产变频器如汇川MD330将40001映射到内部D1000而另一些如台达VFD-EL映射到D0。实操验证用Modbus Poll连接变频器依次读取地址0x0000、0x0001、0x0002同时用变频器面板查看对应参数如P0001、P0002记录实际值变化位置。你会发现——同一地址在不同品牌设备上指向完全不同的参数。命门二RTU与ASCII的“隐形切换”Modbus RTU用CRC16校验ASCII用LRC校验但两者报文首尾标识完全不同RTU[地址][功能码][数据][CRC_H][CRC_L]无起始/结束符ASCII:[地址][功能码][数据][LRC]CR LF冒号开头回车换行结尾致命陷阱某些USB转RS485适配器默认启用ASCII模式而你的代码按RTU发送结果PLC收到:字符直接丢弃整帧。解决方案用AccessPort监听串口确认发送数据是否含:和CR/LF。命门三TCP连接的“幽灵超时”Modbus TCP无连接状态维护但实际设备有会话超时机制。常见问题树莓派连续发送100次请求后第101次返回Connection refused原因PLC侧TCP连接池满如S7-1200默认仅支持8个并发连接旧连接未主动关闭。实操方案在Python代码中强制每次请求后socket.close()或复用连接但添加time.sleep(0.05)间隔更优解是使用pymodbus库的ModbusTcpClient其内置连接池管理。实测心得Modbus Poll的“密钥”问题本质是授权机制与协议无关。免费版限制同时连接设备数通常为1但可通过虚拟机克隆多个实例绕过——这并非破解而是利用软件设计漏洞。真正需要攻克的是协议本身而非授权墙。3.2 西门子S7Comm加密握手背后的“CPU指纹”S7Comm协议最令人头疼的不是复杂而是西门子对关键字段的刻意模糊。官方文档从不说明“协议头第12字节为何必须等于CPU插槽号”直到你用Wireshark抓包对比S7-300与S7-1500的握手报文才发现该字节实际是CPU型号哈希值的一部分。命门一S7协议头的“三重校验锁”一个合法S7Comm报文必须同时满足CPU类型校验协议头第4-5字节0x0001S7-200, 0x0002S7-300, 0x0003S7-400插槽号绑定第12字节必须等于PLC硬件配置的CPU插槽号如S7-1500 CPU1511C插槽号为2数据长度对齐第14-15字节表示后续数据长度必须是偶数且≥4。验证方法用S7Sim模拟S7-300修改协议头第12字节为错误值观察PLC返回0x00000000拒绝连接而非0x00000001连接成功。命门二“读写操作码”的隐式权限S7Comm不直接暴露读写指令而是通过功能码Job Type间接控制0x0004读取多个变量需指定DB块号、起始地址、数据长度0x0005写入多个变量同上但数据区填充待写入值0x0007读取系统信息如CPU型号、固件版本此操作无需DB块权限。关键技巧首次连接时先用0x0007获取CPU信息再动态生成0x0004请求——避免因DB块不存在导致报文被拒。命门三S7-1200/1500的“安全握手升级”新版S7设备默认启用安全连接要求协议头第2字节必须为0x02旧版为0x01第16字节起需附加16字节随机数Nonce整个报文需用AES-128加密密钥由PLC固件生成。破解路径在TIA Portal中关闭“允许未经身份验证的S7通信”或使用python-snap7库的connect()方法自动处理握手——但必须确保PLC侧已启用“允许远程编程”选项。注意网上流传的“S7Comm万能密钥”纯属误导。S7协议安全性不在密钥而在CPU固件级校验。试图暴力破解不仅无效还可能触发PLC保护性停机。3.3 三菱MC协议SA1字段的“固件绑定术”三菱MC协议中SA1Source Address 1常被简化为“源地址”但实际是CPU固件版本的编码指纹。我曾为某汽车零部件厂调试QJ71E71-B2模块按手册SA10x0001结果通信失败抓包发现PLC返回0x00000000最终在三菱官网补丁公告中查到该模块固件V1.23要求SA10x0002否则拒绝响应。命门一SA1的“三重编码规则”SA1值由以下三部分拼接而成CPU型号编码高4位0x1FX系列0x2Q系列0x3L系列固件主版本中4位V1.x→0x1V2.x→0x2固件次版本低8位V1.23→0x17十进制23。计算示例QJ71E71-B2固件V1.23 → SA1 (0x2 12) | (0x1 8) | 0x17 0x2117。命门二命令码的“状态机陷阱”MC协议命令码非静态映射而是依赖前序操作状态0x0000读D区需先发送0x0001建立会话0x0001写D区需前序0x0000返回成功0x0002读X/Y区独立会话无需前置操作。致命错误直接发送0x0001写指令PLC返回0x00000000会话未建立而非0x00000001写入成功。命门三Q系列与FX系列的“寄存器映射分裂”同一地址在不同系列PLC含义不同FX系列D0-D999为数据寄存器M0-M1023为辅助继电器Q系列D0-D32767为数据寄存器但M0-M1023被划分为“普通M区”与“锁存M区”需额外指令使能。验证方案用GX Works2分别新建FX5U与Q03U项目编译相同梯形图如LD X0 OUT M0导出PLC内存映射表对比M区起始地址。3.4 欧姆龙FINSSA1/SA2构建的“三级寻址迷宫”欧姆龙FINS协议的SA1/SA2字段常被初学者忽略但它们是穿透多层网络的关键。某食品厂项目中NJ501-1300 PLC通过EtherCAT连接16台伺服FINS指令始终超时最终发现SA10x0000本地CPU正确但SA20x0001EtherCAT主站地址应为0x0002实际主站编号导致指令被路由到错误节点。命门一SA1/SA2的“网络拓扑编码”FINS寻址采用三级结构节点地址Node AddressPLC自身IP后缀如192.168.1.100 → Node100网络号Network NumberSA1字段0x0000本地网络0x0001上层网络单元号Unit NumberSA2字段0x0000CPU单元0x0001扩展I/O单元。关键规则当PLC通过网关接入上级网络时SA1必须设为网关网络号SA2设为网关单元号。命门二FINS命令的“UDP/TCP语义分裂”同一命令码在不同传输层含义不同UDP模式0x0001读内存→ 返回单次响应无连接状态TCP模式0x0001→ 需先建立连接响应含会话ID后续指令需携带该ID。避坑技巧首次调试务必用UDP避免TCP连接管理干扰稳定后再切TCP提升可靠性。命门三NJ系列的“安全区域隔离”NJ501及以上固件启用安全区域FINS指令默认无法访问地址范围0x0000-0x0FFF开放区可读写地址范围0x1000-0xFFFF安全区需在Sysmac Studio中解除锁定。解决方案在Sysmac Studio的“Controller Settings”→“Security”中关闭“FINS Security”或申请安全密钥需厂商授权。实操心得FINS协议调试最有效的方法是“逆向工程”。用欧姆龙官方CX-Programmer连接PLC开启通信监视功能记录真实读写指令的SA1/SA2值再用Python模拟——比啃手册快10倍。4. 实操全流程从零搭建Modbus-TCP网关打通西门子PLC与32台变频器4.1 项目背景与需求拆解为什么32台变频器不是数量问题而是协议调度问题客户需求原文“用一台西门子S7-1200 PLC监控32台施耐德ATV320变频器实时读取电流、转速、故障代码并能远程启停。”表面看是Modbus通讯但隐藏三层挑战物理层冲突32台变频器共用一条RS485总线若全速轮询100ms/台单轮耗时3.2秒远超PLC扫描周期通常100ms协议层瓶颈ATV320 Modbus响应超时默认1秒32台连续请求易触发超时重试导致总线拥塞数据层错位PLC需将32台设备数据聚合为结构化DB块但Modbus寄存器地址分散每台设备起始地址不同传统轮询无法保证数据一致性。解决方案不是堆硬件而是重构通讯模型引入边缘网关树莓派作为Modbus-TCP网关将32台RS485设备虚拟化为32个TCP从站异步轮询调度网关内部实现优先级队列故障设备请求优先级提升空闲设备降低轮询频率数据缓存机制网关维持本地缓存PLC读取时返回最新值避免阻塞式等待。4.2 硬件连接与物理层调优RS485总线的“黄金1200米法则”RS485不是即插即用总线长度、终端电阻、共模电压直接决定32台设备能否稳定通讯。我按以下步骤逐项验证步骤1总线拓扑验证禁止星型连接所有设备并联到一点必须采用手拉手总线型每台变频器RS485接口A/B线严格对应A接AB接B交叉连接会导致所有设备失联总线两端各加120Ω终端电阻非每台设备都加中间设备不接电阻。步骤2电气特性测试用万用表测量A-B间直流电压正常范围-7V至12V若-5V说明共模电压超标需加RS485隔离器用示波器观测信号边沿上升/下降时间100ns为佳若500ns需缩短总线或降低波特率。步骤3波特率与地址优化ATV320默认波特率9600bps但32台设备建议降至4800bps抗干扰能力提升300%变频器地址设为连续值1-32避免地址跳跃导致轮询间隙增大。实测数据在120米总线长度下4800bps误码率0.001%9600bps误码率0.12%当总线延长至800米4800bps仍稳定9600bps完全失效。这就是“黄金1200米法则”的物理依据——不是理论值是实测极限。4.3 树莓派网关开发用Python实现高可靠Modbus-TCP服务核心代码基于pymodbus库但需深度定制以应对32台设备调度# modbus_gateway.py from pymodbus.server import StartTcpServer from pymodbus.datastore import ModbusSlaveContext, ModbusServerContext from pymodbus.datastore.database import SqliteBatchedDatabase from pymodbus.transaction import ModbusSocketFramer import threading import time import logging # 初始化32个从站数据存储 store_list [] for i in range(32): # 每台设备分配独立寄存器空间0-99为输入寄存器电流/转速100-199为保持寄存器控制指令 store ModbusSlaveContext( diNone, # 离散输入 coNone, # 线圈 hrSqliteBatchedDatabase(fdevice_{i1}.db, size200), # 保持寄存器 irSqliteBatchedDatabase(fdevice_{i1}_ir.db, size100) # 输入寄存器 ) store_list.append(store) context ModbusServerContext(slavesstore_list, singleFalse) # 异步轮询线程 class ModbusPoller: def __init__(self): self.running True self.lock threading.Lock() def poll_device(self, device_id): 轮询单台设备失败时指数退避 from pymodbus.client import ModbusSerialClient client ModbusSerialClient(methodrtu, port/dev/ttyUSB0, baudrate4800, timeout1) try: # 读取电流寄存器40001→0x0000 result client.read_holding_registers(0, 2, unitdevice_id) if not result.isError(): # 写入最新值到对应从站的输入寄存器 context[device_id].setValues(3, 0, [result.registers[0], result.registers[1]]) except Exception as e: logging.error(fDevice {device_id} poll failed: {e}) # 指数退避首次失败等1s二次失败等2s三次失败等4s... time.sleep(2 ** min(5, self.fail_count[device_id])) finally: client.close() poller ModbusPoller() # 启动32个轮询线程 threads [] for i in range(1, 33): t threading.Thread(targetpoller.poll_device, args(i,)) t.start() threads.append(t) # 启动Modbus TCP服务器端口502 StartTcpServer(context, address(0.0.0.0, 502), framerModbusSocketFramer)关键优化点SQLite批处理数据库避免频繁IO每100ms批量写入一次指数退避算法单台设备连续失败时轮询间隔从1s→2s→4s→8s防止总线雪崩独立从站上下文PLC连接时指定unit_id1-32直接访问对应设备数据无需地址偏移计算。4.4 西门子PLC侧配置S7-1200如何高效读取32个TCP从站S7-1200通过TCON/TSEND_C/TRCV_C指令实现TCP通讯但需规避两个经典陷阱陷阱一连接数超限S7-1200最多支持8个TCP连接32台设备需复用连接。解决方案在网关侧启用连接池同一TCP连接处理多台设备请求PLC侧编写循环程序每次连接后顺序读取4台设备8连接×4台32台。陷阱二数据一致性丢失若PLC在读取设备1时设备2的数据已被网关更新导致DB块中混合新旧数据。解决方案网关提供“原子读取”指令PLC发送READ_ALL命令网关返回32台设备最新快照在PLC中用MOVE指令一次性复制32×4字节数据到DB块。实操验证项目上线后PLC扫描周期稳定在85ms原计划100ms32台设备数据更新延迟≤200ms完全满足产线监控需求。关键不是网关性能而是协议层的设计——把“轮询”转化为“快照”把“连接数限制”转化为“连接复用”。5. 常见问题排查实战从“Connection refused”到“SA1错误”一线工程师的排错笔记5.1 Modbus类问题速查表现象可能原因排查步骤解决方案Modbus Poll显示“Connection refused”1. 目标设备未开启Modbus服务2. 防火墙拦截502端口3. IP地址配置错误1.
RELATED

相关推荐

Open FPV VTX与Betaflight的MSP协议深度协同原理

Open FPV VTX与Betaflight的MSP协议深度协同原理

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

📅 2026/9/19 4:48:08
Agentic Awesome Skills 视觉指南:AAS Core 工作流与技能分发全景图解

Agentic Awesome Skills 视觉指南:AAS Core 工作流与技能分发全景图解

Agentic Awesome Skills 视觉指南:AAS Core 工作流与技能分发全景图解 【免费下载链接】agentic-awesome-skills AAS Core is the local, agent-first control plane for complete catalog discovery, agent-owned selection, stack validation, and planning, back…

📅 2026/9/19 4:48:08
RGB灯带PWM调光MOS管选型实战:HC90N03M低边开关与热设计

RGB灯带PWM调光MOS管选型实战:HC90N03M低边开关与热设计

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

📅 2026/9/19 4:48:08
MORE NEWS

更多资讯

📰

Security-101 课程精讲:负责任 AI(Responsible AI)——AI 安全视角下的伦理、透明度与问责实践

Security-101 课程精讲:负责任 AI(Responsible AI)——AI 安全视角下的伦理、透明度与问责实践 【免费下载链接】Security-101 8 Lessons, Kick-start Your Cybersecurity Learning. 项目地址: https://gitcode.com/GitHub_Trending/se/Sec…

📰

Element UI Tooltip 组件完全指南:9 种定位、明暗主题与 Popper 高级用法实战解析

Element UI Tooltip 组件完全指南:9 种定位、明暗主题与 Popper 高级用法实战解析 【免费下载链接】element A Vue.js 2.0 UI Toolkit for Web 项目地址: https://gitcode.com/gh_mirrors/eleme/element Tooltip 是 Element UI(Vue.js 2.0 UI Too…

📰

CANN opbase 算子开发:INFER_SHAPE 宏用法详解与输出 Shape 推导实战

CANN opbase 算子开发:INFER_SHAPE 宏用法详解与输出 Shape 推导实战 【免费下载链接】opbase 本项目是CANN算子库的基础框架库,为算子提供公共依赖文件和基础调度能力。 项目地址: https://gitcode.com/cann/opbase 导读:本文围绕 CA…

📰

分布式与微服务到底有何区别?订单雪崩复盘与治理实践

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

📰

MobaXterm 终端工具使用教程:从下载安装到远程连接与文件传输

1. 为什么我最终把终端工具换成了 MobaXterm如果你日常要和 Linux 服务器打交道,大概率经历过这样的场景:开一个 PuTTY 窗口敲命令,再开一个 WinSCP 拖文件,SFTP 传一半断了还得重连,X11 图形程序更是想都不敢想。我早…

📰

Pandoc fenced_divs 扩展实战:用 `:::` 围栏语法编写可嵌套、带属性的 Div 块

Pandoc fenced_divs 扩展实战:用 ::: 围栏语法编写可嵌套、带属性的 Div 块 【免费下载链接】pandoc Universal markup converter 项目地址: https://gitcode.com/gh_mirrors/pa/pandoc 导读 fenced_divs 是 Pandoc Markdown 中一个非常实用的扩展&#xff…

TODAY

今日更新

THIS WEEK

本周精选

THIS MONTH

本月热门

读完文章,想聊聊您的网站?

告诉我们您的行业与需求,资深顾问一对一梳理方案与报价,全程免费。

📞 💬