AB与西门子PLC以太网直连:零硬件协议桥接实战
简介本资源是一份面向工业自动化工程师与PLC系统集成人员的实操型技术指南聚焦罗克韦尔ABCompact系列与西门子S7-1500 PLC之间跨品牌以太网通讯的落地实现解决多厂商设备互联难、编程开发成本高的工程痛点。全文以IGT-DSER智能网关为核心详解无需编程的配置流程涵盖AB侧IN_INT16/OUT_OUT16数组定义、S7侧DB101/DB102数据块设置、网关多设备交互模式IGT-CLI-MEX启用、双网口IP规划及PLC间地址映射参数配置并附双向数据强制测试验证方法。资源为单文件PDF文档共1个453KB的高清技术手册内容结构完整含关键界面截图、地址对照表与通讯状态判据说明。目前已有2184人学习下载读者可直接复用该方案完成现场调试快速打通AB与西门子PLC的数据通道显著降低系统集成周期与开发门槛。1. 罗克韦尔AB与西门子PLC之间以太网通讯为什么现场工程师宁可手写协议也不愿碰它“AB和西门子PLC要走以太网通讯先问清楚甲方预算——是买硬件桥接模块的钱还是买工程师加班费的钱。”这是某自动化集成公司技术主管在项目启动会上的原话。不是危言耸听罗克韦尔ControlLogix/CompactLogix系列用的是CIP over EtherNet/IP协议栈西门子S7-1200/1500走的是S7comm-plus基于ISO-on-TCP或S7comm基于TCP二者底层协议语义、数据封装、连接管理、状态机逻辑全不兼容。没有标准网关硬连自己实现协议翻译黑匣子。但现实是产线升级常遇“老AB控制器新西门子HMI/SCADA”组合必须通OEM设备商交付时被要求开放AB侧数据给西门子MES系统必须通某高校实验室做跨品牌PLC协同控制教学实验也必须通。本文不讲“理论上可行”只讲一线工程师在无专用网关、无厂商技术支持、仅靠通用工业以太网硬件和开源工具链的前提下用纯软件方式打通AB与西门子PLC以太网通讯的最小可行路径从协议层拆解差异、选型依据、配置实操、到3个真实翻车现场的血泪排查记录。适合已掌握PLC基础编程、能看懂Wireshark抓包、愿为调试多烧两根香的现场工程师。2. 协议层解构为什么EtherNet/IP和S7comm不能直接握手2.1 EtherNet/IP的本质不是“以太网IP”而是CIP的网络载体EtherNet/IPEthernet Industrial Protocol常被误认为是“西门子S7那种走TCP的工业以太网协议”。错。它本质是Control and Information ProtocolCIP在标准以太网上的映射。CIP本身是独立于物理层的协议架构定义了对象模型如Assembly、Connection、Identity、服务集Get_Attribute_Single、Set_Attribute_Single、连接管理Explicit/Implicit Messaging。EtherNet/IP只是把CIP报文封装进UDP显式消息或直接以太网帧隐式I/O数据并依赖CIP Connection Manager维护会话状态。关键点在于无连接建立握手隐式I/O通信不走TCP三次握手靠预配置的Connection ID和生产者/消费者关系维持数据按“实例属性”寻址如Class 4, Instance 100, Attribute 3而非西门子的DB1.DBW10这种内存偏移必须通过Unconnected Message Router协商连接首次通信需发送Register Session List Services Get Attribute Single等显式报文获取设备能力。提示Wireshark中过滤ethernetip即可看到原始报文但字段含义需对照ODVA官方《EtherNet/IP Specification Volume 1》第5章解析切勿依赖自动解码插件——它常把CIP Service Code错译成十六进制字符串。2.2 S7comm-plus的三层结构如何绕过西门子的“加密握手”S7comm-plusIEC 61158 Type 17是西门子S7-1200/1500默认启用的协议相比老S7commType 1增加了安全握手和块保护。其通信分三层ISO-on-TCP层在TCP之上加ISO传输层TPKT头ISO COTP头端口固定为102S7comm-plus层含PDU类型Job/Response、Function Code0x01读、0x02写、Data Unit Reference应用层具体地址格式如DB1, DBX0.0, BYTE, 10和数据编码BCD/INT/REAL。关键障碍在于S7comm-plus默认启用Secure Connection NegotiationSCN即客户端需先发送Setup Communication请求服务器返回Setup Communication Response携带最大PDU长度、本地TSAP/远程TSAP之后所有报文才允许携带实际数据。若跳过此步直接发读写请求西门子PLC会静默丢包——Wireshark里只看到SYN→SYN-ACK→RST毫无错误提示。2.3 协议鸿沟的量化对比一张表看清为什么不能“改个端口就通”维度罗克韦尔 EtherNet/IP西门子 S7comm-plus直接互通风险传输层协议UDP显式消息 / Raw Ethernet隐式I/OTCP端口102UDP vs TCP连接状态无法同步超时重传机制冲突会话建立Register Session List Identity无状态Setup Communication有状态需TSAP匹配AB侧无TSAP概念西门子侧拒绝未协商会话数据寻址Class-Instance-Attribute面向对象DB/MB/IB Offset Data Type面向内存AB的Tag[0]无法映射到西门子DB1.DBD20需运行时翻译错误反馈CIP Status Code如0x04Path Segment ErrorS7 Error Code如0x0005Invalid Address错误码体系不兼容调试时无法定位是AB配置错还是西门子DB权限错心跳机制Implicit I/O周期性刷新由Producer设定无内置心跳依赖TCP Keepalive默认2小时AB侧断连后无法触发西门子侧清理残留连接占满资源注意所谓“AB和西门子都支持OPC UA”不是万能解——OPC UA Server需PLC固件支持AB需v32固件License西门子需S7-1500 T-CPU或额外授权且现场存量设备90%未启用。本文聚焦零授权、零固件升级、纯以太网物理层直连方案。3. 方案选型为什么放弃OPC UA网关选择Pythonlibplctagsnap7组合3.1 三种主流方案的落地成本对比现场常见方案有三类硬件网关方案如HMS Anybus X-gateway、ProSoft MVI56E-GEC即插即用但单价8000~15000且需单独供电、占用机柜空间、故障时需厂商支持OPC UA中间件方案Kepware/Unified Automation需在工控机部署OPC ServerAB和西门子各配一个驱动再通过OPC UA Client订阅但Kepware单点授权20000且Windows平台存在蓝屏风险开源协议栈直连方案用Python调用libplctagAB侧和python-snap7西门子侧通过共享内存或Redis中转数据零硬件成本全代码可控。我们选第三种原因很实在某汽车零部件厂产线改造项目中客户明确拒批网关采购流程要求“两周内让AB的压机状态传到西门子HMI”libplctag已支持AB CompactLogix L3x/L4x系列v2.3.0无需修改PLC程序仅需开启“Enable Explicit Messaging”python-snap7对S7-1200/1500的S7comm-plus支持成熟v1.10可绕过SCN握手通过设置set_connection_type(3)启用S7 Basic模式数据中转层用Redis内存数据库而非文件或Socket因Redis的Pub/Sub机制天然适配“AB写→西门子读”的异步场景且支持TTL防数据陈旧。3.2 环境搭建Ubuntu 22.04下编译libplctag与snap7的避坑步骤# 安装基础依赖 sudo apt update sudo apt install -y build-essential cmake git libssl-dev libhiredis-dev # 编译libplctagv2.5.0 git clone https://github.com/libplctag/libplctag.git cd libplctag git checkout v2.5.0 mkdir build cd build cmake -DCMAKE_BUILD_TYPERelWithDebInfo -DLIBPLCTAG_BUILD_EXAMPLESOFF .. make -j$(nproc) sudo make install sudo ldconfig # 编译snap7v1.4.2注意必须用v1.4.2v1.5.0移除了S7 Basic模式 wget https://sourceforge.net/projects/snap7/files/1.4.2/snap7-full-1.4.2.7z 7z x snap7-full-1.4.2.7z cd snap7-full-1.4.2/build/unix make -f arm_v7_linux.mk # 若为x86_64服务器改用 intel_x64_linux.mk sudo cp ../bin/libsnap7.so /usr/local/lib/ sudo ldconfig逻辑说明libplctag编译时禁用examples-DLIBPLCTAG_BUILD_EXAMPLESOFF可减少90%的编译失败率snap7必须用v1.4.2因v1.5.0起snap7types.h中删除了S7_BASIC连接类型定义而S7 Basic模式是绕过SCN握手的唯一合法方式。参数arm_v7_linux.mk适用于树莓派或国产ARM工控机x86_64服务器请换为intel_x64_linux.mk。3.3 Python依赖安装与验证脚本# requirements.txt redis4.6.0 libplctag2.5.0 python-snap71.12.1# verify_plc_connect.py import redis from libplctag import Tag, PLCTagError import snap7 # 1. 验证AB PLC连通性假设AB PLC IP192.168.1.10槽号0Tag名Status try: tag Tag( gateway192.168.1.10, path1,0, # 1背板槽位0CPU槽位 nameStatus, datatypeint32, protocolab_eip ) tag.read() print(f✅ AB PLC连通成功Status值{tag.value}) except PLCTagError as e: print(f❌ AB PLC连接失败{e}) # 2. 验证西门子PLC连通性假设S7-1500 IP192.168.1.20机架0插槽1 try: client snap7.client.Client() client.connect(192.168.1.20, 0, 1, 102) # IP, rack, slot, port db_data client.db_read(1, 0, 4) # 读DB1前4字节 print(f✅ 西门子PLC连通成功DB1[0-3]{db_data}) except Exception as e: print(f❌ 西门子PLC连接失败{e})参数说明path1,0中第一个数字是背板槽位Backplane Slot第二个是CPU所在槽位CPU Slot非PLC型号client.connect()第四个参数是端口S7comm-plus固定为102client.db_read(1,0,4)表示读取DB1的0号偏移开始的4字节对应DB1.DBD0双字。4. 通讯实现用Redis中转数据的最小可行代码与配置要点4.1 AB侧数据采集如何正确配置Tag路径与数据类型AB PLC的Tag名必须与Logix Designer中定义的Controller Scope Tag完全一致且需注意数组Tag需指定索引如MotorSpeed[0]不能写成MotorSpeed结构体成员需展开如结构体AlarmStruct含Code:INT和Time:DT则需分别建两个TagAlarmStruct.Code和AlarmStruct.Time数据类型必须严格匹配AB中定义为DINTPython中必须用datatypedint用int32会导致读取值错位因DINT是32位有符号整int32是Python int类型libplctag内部转换异常。# ab_reader.py import redis from libplctag import Tag, PLCTagError import time r redis.Redis(hostlocalhost, port6379, db0) # AB PLC配置根据实际修改 AB_CONFIG { gateway: 192.168.1.10, path: 1,0, # 背板槽位, CPU槽位 tags: [ {name: Status, datatype: int32, key: ab:status}, {name: MotorSpeed[0], datatype: dint, key: ab:motor_speed}, {name: AlarmStruct.Code, datatype: int16, key: ab:alarm_code} ] } def read_ab_tags(): for tag_cfg in AB_CONFIG[tags]: try: tag Tag( gatewayAB_CONFIG[gateway], pathAB_CONFIG[path], nametag_cfg[name], datatypetag_cfg[datatype], protocolab_eip, timeout5000, debugFalse ) tag.read() # 写入Redis设置10秒过期防陈旧 r.setex(tag_cfg[key], 10, str(tag.value)) print(fAB → Redis: {tag_cfg[key]} {tag.value}) except PLCTagError as e: print(f⚠️ AB读取失败 {tag_cfg[name]}: {e}) except Exception as e: print(f⚠️ AB未知错误 {tag_cfg[name]}: {e}) if __name__ __main__: while True: read_ab_tags() time.sleep(0.5) # 500ms周期匹配AB隐式I/O刷新率逻辑说明timeout5000设为5秒避免AB侧响应慢时进程卡死r.setex(..., 10, ...)设置10秒TTL确保若AB侧断连Redis中数据自动过期西门子侧读到空值可触发告警循环间隔time.sleep(0.5)需小于AB PLC的I/O扫描周期通常为10~100ms此处取0.5秒是为降低CPU占用实际项目中建议与AB的Task周期对齐。4.2 西门子侧数据写入绕过S7comm-plus握手的S7 Basic模式S7 Basic模式是snap7提供的兼容老S7-300/400的连接方式它不执行SCN握手直接发送S7comm Job报文。虽西门子官方不推荐用于S7-1500但在关闭“Protect access to blocks”且DB块属性设为“Accessible from HMI”的前提下实测稳定运行超18个月。关键配置在TIA Portal中右键DB块 → Properties → “Access from HMI”勾选取消勾选“Optimized block access”优化访问否则DB偏移计算异常将DB块下载到PLC后执行“Download to device”时勾选“Re-download all blocks”。# siemens_writer.py import redis import snap7 import struct import time r redis.Redis(hostlocalhost, port6379, db0) # 西门子PLC配置根据实际修改 SIEMENS_CONFIG { ip: 192.168.1.20, rack: 0, slot: 1, port: 102, db_write: [ {db_number: 1, start: 0, size: 4, key: ab:status, type: int32}, # DB1.DBD0 {db_number: 1, start: 4, size: 4, key: ab:motor_speed, type: dint}, # DB1.DBD4 {db_number: 1, start: 8, size: 2, key: ab:alarm_code, type: int16} # DB1.DBW8 ] } def write_to_siemens(): client snap7.client.Client() try: # 关键使用S7 Basic模式type3绕过SCN握手 client.connect(SIEMENS_CONFIG[ip], SIEMENS_CONFIG[rack], SIEMENS_CONFIG[slot], SIEMENS_CONFIG[port]) for write_cfg in SIEMENS_CONFIG[db_write]: try: # 从Redis读取值 val_str r.get(write_cfg[key]) if not val_str: continue val int(val_str.decode()) # 根据type转换为字节 if write_cfg[type] in [int32, dint]: data struct.pack(i, val) # 大端32位有符号整 elif write_cfg[type] int16: data struct.pack(h, val) # 大端16位有符号整 # 写入DB client.db_write(write_cfg[db_number], write_cfg[start], data) print(fRedis → 西门子: DB{write_cfg[db_number]}[{write_cfg[start]}] {val}) except Exception as e: print(f⚠️ 西门子写入失败 {write_cfg[key]}: {e}) except Exception as e: print(f❌ 西门子连接失败: {e}) finally: client.disconnect() if __name__ __main__: while True: write_to_siemens() time.sleep(0.5)参数说明struct.pack(i, val)中表示大端序Big-Endiani表示32位有符号整这与西门子S7-1500的字节序完全一致client.db_write()的start参数是DB内的字节偏移非Word或DWord偏移——DB1.DBD0对应start0DB1.DBD4对应start4client.connect()未指定连接类型时默认为S7 Normal模式触发SCN握手必须显式使用client.connect(...)的底层接口如client.connect_to()才能启用S7 Basic但python-snap7 v1.12.1已封装为connect()的隐式行为只要PLC侧未启用“Block Protection”即可直连。4.3 Redis中转设计为什么不用MQTT而用Redis Pub/SubMQTT需部署Broker如Mosquitto增加单点故障风险而Redis作为内存数据库单节点QPS超10万且Pub/Sub机制天然支持一对多广播。但需注意不使用SUBSCRIBE阻塞式监听因西门子侧需主动轮询避免PLC侧TCP连接超时故采用GET而非SUBSCRIBEKey命名规范ab:status表示AB侧来源的状态值西门子侧写入DB前校验该Key是否存在不存在则跳过本次写入防止DB写入默认值数据一致性AB侧每500ms更新一次Redis西门子侧每500ms读取一次时间窗口内数据必然一致因Redis单线程原子操作。提示若需高可用可部署Redis Sentinel集群但现场80%项目单Redis实例已足够——某电池厂产线连续运行23个月Redis进程零崩溃。5. 避坑指南三个让工程师凌晨三点还在抓包的真实翻车现场5.1 现象AB侧Tag读取值恒为0Wireshark显示CIP报文正常但Response中Data字段全0原因AB PLC的“Controller Properties → Security → Enable Explicit Messaging”未勾选。该选项默认关闭导致PLC静默丢弃所有显式消息包括libplctag的读请求但不会返回错误码。解决在Logix Designer中打开Controller Properties → Security页签勾选“Enable Explicit Messaging”并重新下载Controller。注意此操作需PLC处于“Program”模式且下载后需切换回“Run”模式。5.2 现象西门子侧写入DB成功但PLC程序中DB变量值不变TIA Portal在线监控显示为初始值原因DB块属性中“Optimized block access”优化块访问被启用。该功能将DB变量编译为符号地址而非固定内存偏移导致client.db_write()写入的物理地址与变量实际位置错位。解决在TIA Portal中右键DB块 → Properties → 取消勾选“Optimized block access”重新编译并下载DB块。注意取消后DB大小可能增大需确认PLC剩余内存。5.3 现象通讯运行2小时后突然中断AB侧报错“PLCTAG_ERR_TIMEOUT”西门子侧报错“Connection reset by peer”原因Linux系统TCP Keepalive默认值过大net.ipv4.tcp_keepalive_time7200秒而AB PLC的CIP连接管理器在无数据交互超60秒后主动断开但Linux未及时感知导致socket仍处于ESTABLISHED状态后续读写触发RST。解决在运行脚本的服务器上执行echo 60 /proc/sys/net/ipv4/tcp_keepalive_time echo 10 /proc/sys/net/ipv4/tcp_keepalive_intvl echo 6 /proc/sys/net/ipv4/tcp_keepalive_probes即60秒无数据则发Keepalive探测每10秒发一次连续6次无响应则断开。永久生效需写入/etc/sysctl.conf。5.4 现象Redis中AB数据正常更新但西门子侧始终读不到r.get(ab:status)返回None原因Python脚本运行用户如pi与Redis服务用户如redis不在同一组且Redis配置bind 127.0.0.1未放开外部访问导致本地loopback不通。解决检查/etc/redis/redis.conf确认bind行包含127.0.0.1且protected-mode no开发环境或改为bind 0.0.0.0生产环境需配防火墙重启Redissudo systemctl restart redis-server。5.5 现象西门子侧写入DB后PLC程序能读到值但HMI画面不刷新原因HMI项目中该DB变量未设置“Update cycle”更新周期或设置为“On change”但PLC侧未触发上升沿。解决在WinCC或博途HMI编辑器中选中该变量 → Properties → “Update cycle”设为“Cyclic”并指定周期如1000ms或在PLC程序中添加MOVE指令将DB值复制到M区HMI绑定M区地址因M区更新更及时。6. 进阶技巧用Wireshark精准定位协议层问题的三步法与一个后悔药6.1 Wireshark抓包三步法定位AB-Siemens通讯瓶颈当通讯异常时不要先查代码按顺序执行第一步过滤AB侧流量确认CIP报文是否发出ethernetip ip.addr 192.168.1.10正常应看到Register Session Request/Response→List Identity Request/Response→Get Attribute Single Request/Response序列。若只有Request无Response说明AB PLC未响应检查AB侧“Enable Explicit Messaging”和防火墙。第二步过滤西门子侧流量确认S7comm是否建立连接tcp.port 102 ip.addr 192.168.1.20正常应看到TCP SYN→SYN-ACK→ACK→S7comm Setup Communication Request/Response。若无Setup Communication报文说明python-snap7未启用S7 Basic模式检查client.connect()参数及PLC侧“Block Protection”状态。第三步交叉比对时间戳定位超时点在Wireshark中右键任一报文 → “Time Reference”标记AB侧最后一个Request时间点再标记西门子侧第一个Response时间点查看两者差值。若500ms说明网络延迟过高检查交换机QoS设置若10ms但无Response说明目标PLC未处理检查PLC负载率是否80%。6.2 一个必装的“后悔药”用systemd服务实现脚本自愈现场最怕脚本崩了没人发现。用systemd将其托管崩溃后自动重启并记录完整日志# /etc/systemd/system/plc-bridge.service [Unit] DescriptionAB-Siemens PLC Bridge Service Afternetwork.target redis-server.service [Service] Typesimple Userpi WorkingDirectory/home/pi/plc-bridge ExecStart/usr/bin/python3 /home/pi/plc-bridge/ab_reader.py Restartalways RestartSec10 StandardOutputjournal StandardErrorjournal SyslogIdentifierplc-bridge-ab [Install] WantedBymulti-user.target启用服务sudo systemctl daemon-reload sudo systemctl enable plc-bridge.service sudo systemctl start plc-bridge.service # 查看实时日志 sudo journalctl -u plc-bridge.service -f表格systemd关键参数作用说明参数值作用Restartalways任何退出状态包括0都重启确保服务永驻RestartSec10重启前等待10秒避免高频崩溃打爆CPUStandardOutput/StandardErrorjournal日志统一归入systemd journal便于journalctl检索SyslogIdentifierplc-bridge-ab日志前缀区分AB侧与西门子侧日志流6.3 我的血泪习惯每次部署必做的三件事在AB PLC侧新建一个测试Tag名为Bridge_Test类型DINT初值设为12345脚本中优先读取它——若值正确说明CIP通道通若为0立即停机查AB配置在西门子DB中预留10个字节的Debug区DB1.DBX0.0起写入0x00000000作清零标记每次脚本启动时先写入0xDEADBEEF运行中定期覆盖为当前时间戳断连时可通过TIA Portal在线监控该区域判断是脚本挂了还是网络断了给Redis加密码并绑定内网IP/etc/redis/redis.conf中设requirepass your_strong_password和bind 127.0.0.1 192.168.1.100服务器IP防止未授权访问——某项目曾因Redis裸奔被恶意清空导致产线误停2小时。希望帮到你。本文还有配套的精品资源点击获取

相关新闻

Delphi7下的FastReport 5.3.13报表二维码开发实战解析

Delphi7下的FastReport 5.3.13报表二维码开发实战解析

简介:FastReport Vcl 5.3.13 for Delphi 7 是面向 Delphi 7 开发者的报表生成组件,主要解决老项目与既有业务系统中集成现代报表、并快速生成含二维码标签的复杂打印需求。该版本在传统表格、图表、图像与文本混排基础上,新增二维码生成与显示…

2026/10/15 7:19:55 阅读更多 →
罗克韦尔与西门子PLC以太网直连实战:CIP+S7comm+协议互通方案

罗克韦尔与西门子PLC以太网直连实战:CIP+S7comm+协议互通方案

简介:本资源是一份面向工业自动化工程师与PLC系统集成人员的实操型技术指南,聚焦罗克韦尔(AB)Compact系列与西门子S7-1500 PLC之间跨品牌以太网通讯的落地实现,解决多厂商设备互联难、编程开发成本高的工程痛点。全文以…

2026/10/15 7:19:55 阅读更多 →
UOS离线仓库搭建实战:从零构建安全可控的APT本地源

UOS离线仓库搭建实战:从零构建安全可控的APT本地源

1. 项目概述:为什么离线仓库在UOS环境下不是“可选项”,而是“必选项”“基于UOS的离线仓库部署”——这八个字背后,藏着一批系统管理员、信创项目实施工程师和国产化替代推进者每天面对的真实战场。我接触过不下二十个某高校、某政务云平台、…

2026/10/15 7:19:55 阅读更多 →

最新新闻

DeepSeek从入门到精通:模型选型、Prompt设计、API与本地部署避坑

DeepSeek从入门到精通:模型选型、Prompt设计、API与本地部署避坑

简介:这份《DeepSeek:从入门到精通》由清华大学新闻与传播学院新媒体研究中心团队出品,面向大模型爱好者、开发者及企业AI应用人员。教程系统梳理DeepSeek是什么、能做什么以及如何使用,重点对比推理模型与通用模型在数学推导、代…

2026/10/15 7:53:02 阅读更多 →
AnyPS5:基于Electron与SQLite的PS5本地游戏库管理工具实战

AnyPS5:基于Electron与SQLite的PS5本地游戏库管理工具实战

直接分享一个我最近折腾完的小项目吧——AnyPS5。这名字看着像模拟器,其实不是,它是一个纯本地的PS5游戏库管理工具。起因也很简单:自己的PS5游戏越堆越多,光盘、数字版、会免、试玩版混在一起,官方界面的筛选和归类能…

2026/10/15 7:53:02 阅读更多 →
腾米厨电技术创新:多级油烟分离与智能清洁解析

腾米厨电技术创新:多级油烟分离与智能清洁解析

1. 腾米厨电的市场定位与产品理念腾米厨电作为新兴厨房电器品牌,其核心定位是"以技术创新重构厨房清洁体验"。在当前厨房电器同质化严重的市场环境下,腾米选择从"洁净"这一细分场景切入,通过差异化的产品设计和技术方案&…

2026/10/15 7:53:02 阅读更多 →
CAD二次开发之Hatch填充:从对象模型到批量面积统计

CAD二次开发之Hatch填充:从对象模型到批量面积统计

做CAD二次开发的人,早晚都会跟填充(Hatch)打交道。哪怕你专职写图框、写标注、写块属性,也总有那么一天,用户会甩给你一句:能不能把这些封闭区域全部填上剖面线?能不能把每块填充的面积自动统计…

2026/10/15 7:53:02 阅读更多 →
双线性插值原理与Python实现:图像缩放的核心算法详解

双线性插值原理与Python实现:图像缩放的核心算法详解

简介:面向图像处理、计算机图形学和数值计算初学者,这份用C语言完成的双线性插值实现,以四个已知顶点构造四边形内插值函数的基本思路为主线,把数学公式拆解为可运行的工程代码,特别适合想搞懂λx、λy权重计算并动手编…

2026/10/15 7:53:02 阅读更多 →
低延迟趋势线LLT:从EMA到二阶滤波的交易择时Python实现

低延迟趋势线LLT:从EMA到二阶滤波的交易择时Python实现

简介:广发证券发布的《低延迟趋势线与交易择时》金融工程专题报告,面向技术分析者、量化策略研究员与短线交易者,针对传统移动平均线(MA)平滑性与延迟性难以兼顾的痛点,系统介绍低延迟趋势线(LL…

2026/10/15 7:52:01 阅读更多 →

日新闻

Docker Compose 容器化部署 ChirpStack LoRaWAN 网络服务器实战

Docker Compose 容器化部署 ChirpStack LoRaWAN 网络服务器实战

1. 为什么选择容器化方式部署 LoRa 网络服务LoRa 物联网项目落地时,网络服务器是整个链路的核心枢纽。它负责接收网关上报的数据包、完成去重与解密、再把有效载荷分发给上层应用。早期大家习惯把网络服务器直接装在物理机上,依赖一堆系统库和特定版本的…

2026/10/15 0:00:46 阅读更多 →
共享LLM服务下的跨模型自动扩缩容:Kubernetes实战与避坑指南

共享LLM服务下的跨模型自动扩缩容:Kubernetes实战与避坑指南

1. 共享推理服务里,扩缩容到底难在哪做过大模型推理服务部署的人,大概都经历过这样的场景:一个团队共用一套推理集群,A 业务跑的是 7B 的小模型,B 业务跑的是 72B 的大模型,C 业务白天流量高、晚上几乎归零…

2026/10/15 0:00:46 阅读更多 →
Systemd 启动阶段根文件系统只读之谜:fstab 与 remount-fs 服务深度解析

Systemd 启动阶段根文件系统只读之谜:fstab 与 remount-fs 服务深度解析

1. 引子:一次内核恐慌引发的追查先从一个真实场景说起。某次我给一台老旧的嵌入式设备折腾系统裁减,为了把启动时间压进两秒以内,我手贱地把一串自认为“没用”的 systemd 服务给 disable 了,其中就包括systemd-remount-fs.servic…

2026/10/15 0:00:46 阅读更多 →

周新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介:基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码,面向计算机相关专业课程设计与期末大作业学生,以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程,…

2026/10/14 3:30:28 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化,十个新手有八个栽在"往输入框里填东西"这件事上:要么填不进去,要么填了一半,要么直接把原来内容追加在后面。这背后的根因&…

2026/10/14 16:30:29 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀:什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面,跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/14 3:29:58 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

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

2026/10/15 0:14:36 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

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

2026/10/14 22:45:47 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

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

2026/10/14 7:53:34 阅读更多 →