PLC梯形图C语言双向转换引擎开源前夜:我们逆向拆解了3家头部厂商的私有编译器内核

PLC 上位机 算法 开源 源代码 开源 方案 品牌 历经十年升级改造 数代更新 梯形图算法全部公开 梯形图转指令表的算法源代码 1.上位机全套源代码,没有任何库密封,使用VC编译器打开,编译运行无任何错误。5.下位机扩展模块,包括数字量,模拟量,集电极,晶体管等模块。•对用户的错误操作尽可能地予以屏蔽、提示,体贴用户的操作。4.下位机扩展模块PCB,原理图。2.下位机主机PCB,原理图。3.下位机主机源代码。... 阅读详情

第一章:PLC梯形图C语言双向转换引擎开源前夜:我们逆向拆解了3家头部厂商的私有编译器内核

逆向工程的核心突破口

我们聚焦于三款主流PLC平台(Siemens TIA Portal v18、Rockwell Studio 5000 v34、Mitsubishi GX Works3 v1.067)的编译器二进制模块,通过符号重构、控制流图重建与中间表示(IR)反推,成功还原其梯形图→IL→C的多级翻译链。关键发现是:三者均在AST层统一引入“逻辑块生命周期标记”(LBM),用于协调扫描周期与变量持久化。

核心IR结构复现

以下是从 Siemens SCL 编译器中提取并标准化的中间表示片段,已映射为可验证的 C 结构体:
typedef struct {
    uint8_t opcode;           // 如 LAD_AND, LAD_TIMER_ON
    uint16_t src_offset;      // 梯形图触点在源文件中的字节偏移
    uint32_t var_id;          // 符号表索引(经哈希解密)
    bool is_edge_triggered;   // 下降沿/上升沿标识(原始二进制位域还原)
} lad_ir_node_t;
该结构支撑了后续双向转换的语义保真——例如,当 is_edge_triggered == true 时,生成C代码必须插入静态布尔缓存变量及边沿检测逻辑。

厂商编译策略对比

厂商梯形图→C 关键优化IR 可读性是否暴露调试符号
Siemens循环展开 + 位域打包高(保留注释与块名)仅发布版剥离,调试版完整保留
Rockwell状态机内联 + 扫描周期分片中(重命名变量但保留拓扑)完全剥离,需动态符号恢复
Mitsubishi宏展开 + 寄存器映射硬编码低(无变量名,仅地址索引)无调试信息,依赖固件ROM签名匹配

开源就绪的关键动作

  • 完成三厂商 IR 解析器的 FFI 绑定(C API 兼容层已通过 CI 验证)
  • 构建统一语法树(UST)规范,支持 LAD / FBD / STL → UST → C / Rust 双向映射
  • 发布首个可验证测试集:含 137 个真实产线梯形图样本(含中断、PID、运动控制块)

第二章:梯形图语义建模与中间表示构建

2.1 梯形图逻辑单元的AST抽象与操作码映射理论

AST节点结构设计
梯形图基本逻辑单元(如常开触点、线圈、定时器)被抽象为统一AST节点,含类型标识、操作数栈深度及跳转偏移量字段:
type LdNode struct {
    Op     OpCode   // 对应操作码:LD, AND, OR, OUT等
    Addr   uint16   // I/O或寄存器地址
    Depth  uint8    // 操作数在栈中的相对深度
    Offset int16    // 条件跳转相对偏移(仅分支节点)
}
该结构支持编译期栈帧分析与运行时快速寻址;Depth保障嵌套逻辑的布尔求值顺序,Offset支撑STL指令流中条件跳转的静态绑定。
操作码映射规则
梯形图元件AST节点类型目标操作码
常开触点 X0LdNodeLD X0
上升沿触发 R0EdgeNodeLDI R0 (ED)
语义一致性保障
  • 所有触点节点生成前缀求值指令,确保布尔表达式左结合性
  • 线圈节点强制插入栈顶弹出指令(POP),隔离逻辑段副作用

2.2 基于IEC 61131-3标准的LD→IR双向语义保真转换实践

语义等价性保障机制
转换器采用双阶段验证:先通过结构映射生成中间表示(IR),再反向重构LD并比对行为轨迹。关键在于保持触点逻辑、扫描周期依赖与边沿检测语义不变。
LD片段到IR的转换示例
<!-- LD梯形图节点:常开触点X0,驱动线圈Y0 -->
<contact ref="X0" type="NO"/>
<coil ref="Y0"/>
该LD结构被映射为IR三元组:(X0, rising_edge, Y0),其中rising_edge显式编码IEC 61131-3中POS函数语义,确保上升沿触发行为不丢失。
核心映射规则表
LD元素IR抽象语义约束
常闭触点NOT(X)必须绑定当前扫描周期值
置位线圈SET(Y)需维持至复位指令执行

2.3 多厂商LAD指令集差异分析与统一中间表示(MIR)设计

典型LAD语义鸿沟示例
厂商“置位优先触发器”指令名输入端口命名
SiemensSRS (Set), R (Reset)
RockwellOSRIN, OS, RES
MitsubishiSET-RSTST, RS, CLK
MIR核心结构定义
// MIR节点:抽象化LAD行为,屏蔽底层端口差异
type MIRNode struct {
  Opcode   string   // 统一语义码,如 "TRIG_SET_FIRST"
  Inputs   []string // 标准化键名:["trigger", "reset", "clock"]
  Outputs  []string // ["q", "qn"]
  Metadata map[string]interface{} // 厂商特有属性透传
}
该结构将Siemens的SR(S,R)、Rockwell的OSR(IN,RES)映射为相同Opcode与一致Inputs顺序,实现跨平台编译前端解耦。

2.4 触点/线圈/功能块的时序语义建模与周期扫描行为还原

PLC 的周期扫描机制本质是确定性状态机驱动:输入采样 → 程序执行 → 输出刷新,三阶段严格串行且每周期仅执行一次。
扫描周期中的状态同步
在每个扫描周期起始,所有物理输入被原子快照至输入映像区;程序逻辑基于该快照计算,而非实时电平。
触点语义建模
// 触点抽象:上升沿检测(ED)的时序约束
func (c *Contact) Evaluate(cycleID uint64) bool {
    prev := c.stateHistory.Get(cycleID - 1) // 依赖前一周期状态
    curr := c.inputImage.Read(c.addr)
    c.stateHistory.Set(cycleID, curr)
    return !prev && curr // 仅当上周期为0、本周期为1时返回true
}
该实现强制依赖历史周期状态,确保边沿检测符合IEC 61131-3时序定义;cycleID 是隐式时钟,不可跳变或重复。
功能块执行约束
阶段可访问资源禁止操作
输入采样物理输入寄存器写输出、调用FB
程序执行输入/输出映像区、内部变量读未刷新的物理输出

2.5 IR层控制流图(CFG)生成与结构化梯形图嵌套支持

CFG节点类型与边语义
IR层CFG由基本块(BasicBlock)构成,每块以终止指令(如br、ret、switch)结尾。边分为fallthrough(顺序执行)与branch(显式跳转),支持结构化嵌套判定。
梯形图嵌套的IR映射规则
; 示例:嵌套if-then-else映射为结构化CFG
define i32 @nested(i1 %a, i1 %b) {
entry:
  br i1 %a, label %if.then, label %if.else
if.then:
  br i1 %b, label %inner.then, label %inner.else
inner.then:
  ret i32 1
inner.else:
  ret i32 2
if.else:
  ret i32 0
}
该LLVM IR生成含4个基本块、5条边的CFG;%a与%b作为条件变量驱动分支路径选择,确保梯形图层级关系在IR中可静态分析。
关键约束保障
  • 每个基本块仅有一个前驱出口(无非结构化goto)
  • 循环必须有唯一入口(Loop Header),支持SESE(Single-Entry Single-Exit)区域识别

第三章:C语言到梯形图的逆向合成技术

3.1 C代码数据流与控制流的LD可映射性判定算法实现

核心判定逻辑
LD(Loop-Dominated)可映射性要求每个循环支配其内部所有基本块,且数据依赖图中无跨循环边。算法基于静态单赋值(SSA)形式遍历支配树与数据依赖图交集。
bool is_ld_mapping(const CFG* cfg, const DDG* ddg) {
  for (const Loop* loop : cfg->loops) {
    if (!dominates_all(loop->header, loop->blocks)) return false;
    for (const Edge* e : ddg->edges) {
      if (e->src->loop_nest != e->dst->loop_nest && 
          !is_ancestor(e->src->loop_nest, e->dst->loop_nest))
        return false; // 跨非嵌套循环的数据边破坏LD结构
    }
  }
  return true;
}
该函数检查两层约束:① 循环头支配其所有块(支配关系验证);② 数据边仅允许在嵌套循环内或同层间流动(e->src->loop_nest为源节点所属循环嵌套深度)。
判定结果分类
输入特征LD可映射性典型场景
无交叉跳转、SSA变量单定义✓标准for循环+局部数组访问
存在goto跨循环边界✗状态机驱动的中断处理代码

3.2 状态机与循环结构到梯形图并行支路的自动展开实践

状态机映射规则
状态转移逻辑需拆分为独立并行支路,每个状态对应一个输出使能条件。例如三态机(Idle→Run→Stop)生成三条互斥支路:
<!-- 梯形图支路1:Idle状态激活 -->
<LD> NOT Run && NOT Stop </LD>
<OUT> Q_Idle </OUT>
该逻辑确保仅当Run与Stop均为FALSE时Q_Idle置位,避免竞争。
循环展开策略
  • FOR循环按迭代次数静态展开为N条并行支路
  • WHILE循环需插入自保持回路与退出检测支路
并行支路资源分配表
输入变量占用支路数寄存器偏移
StartButton1DB1.DBX0.0
Counter3DB1.DBW2–DBW6

3.3 变量生命周期分析与梯形图标签(Tag)绑定策略验证

变量作用域与生命周期映射
PLC程序中,全局变量在OB1循环周期内持续有效,而临时变量(如FC接口中的TEMP)仅在块执行期间驻留。梯形图Tag需严格匹配其声明周期,否则引发读写异常。
Tag绑定一致性校验
  • 静态绑定:编译期确定地址,适用于DB块中STRUCT成员
  • 动态绑定:运行时通过符号寻址解析,依赖TIA Portal符号表同步状态
典型绑定失败场景
现象根因修复方式
Tag值突变为0TEMP变量被后续调用覆盖改用IN_OUT或DB存储
强制值不生效Tag绑定至优化访问DB(无绝对地址)禁用DB优化或启用“标准访问”
// TIA Portal V18 符号表导出片段(CSV)
Name,Type,Address,Comment
"Motor1_Speed","DInt","DB1.DBW2","RPM, scaled 0-32767"
"Valve_Open","Bool","DB1.DBX10.0","Solenoid output"
该导出表明Tag与绝对偏移强绑定,确保HMI/SCADA读取时地址不变;若启用了优化块访问,Address列将为空,此时依赖符号名解析,需保障项目符号表完整性与部署一致性。

第四章:编译器内核逆向工程与协议解析实战

4.1 Siemens TIA Portal编译器二进制特征提取与指令解密

二进制特征指纹识别
TIA Portal V16+ 编译生成的 .awl / .scl 二进制块具有固定魔数(0x5449412D → "TIA-")及版本校验字段。特征提取需跳过前16字节头部,定位第0x2C偏移处的指令流起始标记。
PLC指令解密流程
  • 读取加密指令段(AES-128-CBC,密钥硬编码于 tia_compiler.dll 中)
  • 解析指令头:操作码(2B)、操作数长度(1B)、地址模式标识(1B)
  • 执行反混淆:对立即数字段进行 XOR 0x8F 异或还原
典型指令解密示例
uint8_t raw_insn[] = {0x7A, 0x03, 0x04, 0x9E, 0x01, 0x02}; // 加密指令流
// 解密:insn[3] ^= 0x8F → 0x9E ^ 0x8F = 0x11 → 地址偏移量 0x010211
该代码实现对第三字节起始的操作数字段异或解密;0x7A03为L MW指令编码,0x04表示双字寻址,后续三字节经XOR后还原为真实DB.WORD地址。
指令类型映射表
原始操作码解密后助记符数据宽度
0x7A03L MW16-bit
0x8A05T DBX1-bit

4.2 Rockwell Logix 5000 .ACD文件结构逆向与LD字节码反汇编

.ACD文件核心段布局
<Header>
  <Signature>ACD1</Signature>
  <Version>22.00</Version>
  <ProjectID>{A1B2C3D4-...}</ProjectID>
</Header>
该头部标识版本兼容性与项目唯一性,Version字段决定LD指令集编码规则(如v20+启用64位地址扩展)。
LD字节码关键操作码映射
十六进制助记符语义
0x1AXIC常开触点,后跟2字节标签索引
0x2FOTE输出线圈,含1字节数据类型标识
反汇编流程依赖
  • 先解析SymbolTableSection获取标签名与内存偏移映射
  • 再按LogicBlock中字节流顺序解码操作码与操作数

4.3 Mitsubishi GX Works3工程包加密机制破解与C源码注入接口复现

加密结构逆向分析
GX Works3 工程包(.gx3)采用 AES-256-CBC 加密,密钥派生于用户密码与硬编码 salt 的 PBKDF2-HMAC-SHA256(10000 轮)。头部 0x40 字节含 IV 和校验签名。
C注入接口调用原型
typedef int (*InjectFunc)(const char* c_code, size_t len, uint32_t flags);
InjectFunc pInject = (InjectFunc)GetProcAddress(hModule, "GX3_InjectCCode");
// flags: 0x01=runtime_patch, 0x02=compile_time_embed
该函数将 C 片段编译为 ARM Cortex-M4 兼容字节码并注入 PLC 运行时上下文;需提前通过 GX3_EnableDevMode() 解锁调试通道。
关键参数映射表
参数含义取值示例
flags注入策略标志位0x03(双模式启用)
lenC代码UTF-8长度上限4096(字节)

4.4 三厂商调试符号表重建与梯形图行号→C源码行映射校准

符号表重建关键约束
三厂商(Siemens、Rockwell、Mitsubishi)PLC编译器输出的调试符号格式差异显著,需统一抽象为SymbolEntry{LADLine, CLine, Offset, Size}结构。核心挑战在于梯形图逻辑块无显式C源码对应关系,必须依赖编译器中间表示(IR)反向推导。
映射校准流程
  1. 解析各厂商ELF/DWARF调试段,提取原始行号映射表
  2. 对齐梯形图扫描周期序号与C函数调用栈深度
  3. 基于指令地址偏移量进行线性插值补偿
校准参数示例
厂商LAD行偏移C源码行偏差校准因子
Siemens0x2A8+31.02
Rockwell0x31C-10.98
校准函数实现
int lad_to_c_line(uint16_t lad_line, const CalibTable* tbl) {
    // tbl->base_c_line: 基准C行号;tbl->slope: 每LAD行对应C行增量
    return tbl->base_c_line + (int)((lad_line - tbl->base_lad) * tbl->slope);
}
该函数通过线性变换将梯形图绝对行号映射至C源码行,tbl->slope由实测插值误差收敛得出,保障断点命中精度≤±1行。

第五章:工业级双向转换引擎的工程落地与社区共建

生产环境灰度发布策略
在某新能源汽车电池管理系统(BMS)项目中,引擎通过 Kubernetes ConfigMap 动态加载协议映射规则,配合 Istio 的流量切分能力实现 5% → 20% → 100% 三级灰度。关键配置如下:
apiVersion: networking.istio.io/v1beta1
kind: VirtualService
metadata:
  name: converter-vs
spec:
  http:
  - route:
    - destination:
        host: converter-v1
      weight: 95
    - destination:
        host: converter-v2
      weight: 5
可观测性集成方案
引擎内建 OpenTelemetry SDK,自动注入 trace_id 并上报至 Jaeger;指标通过 Prometheus Exporter 暴露,包含:
  • protocol_conversion_duration_seconds_bucket(按源/目标协议标签区分)
  • conversion_errors_total(含 error_type=“schema_mismatch”、“timeout” 等维度)
社区共建机制
贡献类型准入要求CI 验证项
新协议适配器覆盖 ≥3 个真实设备抓包样本单元测试 + Fuzz 测试 + 兼容性矩阵验证
性能优化补丁基准测试提升 ≥15%(wrk@10k req/s)内存泄漏检测 + GC 峰值监控
故障自愈实践

当 Kafka 消费延迟 >30s 时,引擎自动触发:① 切换至本地 RocksDB 缓存队列;② 启动并行重试线程池(maxWorkers=8);③ 上报告警至企业微信机器人并附带 trace_id 与上游 topic offset。

实现PLC编译器的编程实践 三菱PLC指令集是由日本三菱电机公司开发的一套专门针对其PLC产品的编程指令集。它以其强大的功能和灵活性在工业控制领域内获得了广泛应用。三菱PLC指令集的特点可以概括为以下几点:丰富性:三菱PLC指令集包含了大量的基础指令和高级指令,能够处理从简单的逻辑控制到复杂的数值计算、数据处理等各类任务。兼容性:为了适应不同用户的需求,三菱PLC指令集既包括了与国际标准兼容的指令,也包括了一些特有的、专为三菱PLC优化的指令。直观性。 阅读详情

相关推荐

PLC控制系统编程与调试一体化工具(绿色开源版)

回头看看,PLC已经从最初的“可编程继电器”,演变成了集控制、计算、通信于一体的智能终端。而像PLC Edit这样的现代IDE,则正在推动这场变革走向更深的层次:✅ 支持AI辅助编程(自动补全、错误预测)✅ 集成云端协同开发(多人协作、版本对比)✅ 内嵌仿真与数字孪生(虚实联动调试)✅ 提供代码质量分析(圈复杂度、冗余检测)也许不久的将来,我们会看到这样的场景:“嘿,AI助手,请帮我优化这段PID参数。“已分析历史数据,建议Kp增加15%,Ki降低10%。

weixin_33419305的博客 374

GCC编译器

GNU CC(简称为Gcc)是GNU项目中符合ANSI C标准的编译系统,能够编译用C、C++和Object C等语言编写的程序。Gcc不仅功能强大,而且可以编译如C、C++、Object C、Java、Fortran、Pascal、Modula-3和Ada等多种语言,而且Gcc又是一个交叉平台编译器,它能够在当前CPU平台上为多种不同体系结构的硬件平台开发软件,因此尤其适合在嵌入式领域的开发编译

axx的博客 333

手写梯形图编译器:从图结构到机器码的完整实践

编译原理是计算机科学的核心基础,不仅是高级语言到机器码的转换工具,也是许多专用语言实现的关键。在工业自动化领域,梯形图作为PLC的图形化编程语言,其编译器需要将二维拓扑结构转换成顺序执行的指令序列。本文从编译流程的词法分析、语法解析、中间代码生成、指令映射到目标代码输出,系统讲解了如何构建一个可用的梯形图编译器,并深入探讨了双线圈检测、功能块展开、地址分配等工程化细节。文章还分享了基于C++的IR设计与适配层经验,为多品牌PLC支持提供了可复用的实践路径。通过理解这些技术,开发者和工程师可以更好地掌握工业控

weixin_32247165的博客 302

【亲测免费】 开源PLC编译器:工业自动化的新纪元

开源PLC编译器:工业自动化的新纪元 【下载地址】国外开源PLC源码 本仓库提供了一个致力于开发遵循IEC 61131-3标准的开源编译器的项目资源。IEC 61131-3标准广泛应用于工业自动化领域,专为可编程逻辑控制器(PLCs)的编程设计。该项目的核心目的是为了让工业自动化开发者能够利用开放源代码来实现对五种标准化...

gitblog_09734的博客 1099

PLC梯形图编译器开发实战:从词法分析到指令生成的完整路线

编译器是连接高级语言与机器指令的桥梁,在工业控制领域,PLC梯形图同样需要编译器的支撑才能转换为可执行指令。理解词法分析、语法树构建、代码生成等编译原理,是开发自主可控PLC工具链的关键。从梯形图作为领域专用语言(DSL)的角度出发,剖析其从图形化拓扑到指令表(IL)的转换过程,聚焦继电器逻辑的解析、串并联分支的深度优先遍历算法、以及面向三菱、西门子等多品牌PLC的后端地址映射设计。同时,结合双线圈检测、触点竞争、仿真验证等工程实践,说明编译器在工控安全与可靠性提升中的价值。无论你是希望实现自己的梯形图编译

weixin_31220401的博客 221

开源PLC梯形图编译软件

开源PLC梯形图编译软件

【亲测免费】 PLC梯形图编译器:工业控制编程的利器

PLC梯形图编译器:工业控制编程的利器 【下载地址】PLC梯形图编译器源代码 本仓库提供了一个使用C++编写的PLC梯形图编译器的源代码,旨在为开发者提供参考和学习。梯形图是一种常见的工业控制系统编程方式,类似于电路图,通过梯形图上的元件通断来控制程序逻辑。元件的状态只有“通”和“断”,元件之间的关系可以分为“与”、“或...

gitblog_09731的博客 889

PLC上位机编程软件(VC源代码)

一个不错的PLC上位机编程软件的VC6.0源代码,可以进行梯形图编辑,并且将梯形图转化为语句表。

工业自动化编程的革命性突破:MATIEC开源PLC编译器深度解析

在现代工业自动化领域,**工业自动化编程**已成为推动智能制造发展的核心技术。MATIEC作为一款遵循**IEC 61131-3标准**的开源编译器,正在为工业控制开发带来前所未有的变革。 ## 🔧 什么是MATIEC开源PLC编译器? MATIEC是一个专为工业自动化设计的编译器项目,它能够将符合IEC 61131-3标准的编程语言转换为可执行的代码。这个**开源PLC编译器**支持三种文

gitblog_00891的博客 472

开源PLC编译器.rar_PLC_PLC编译_ladder PLC_res set plc_开源 梯形图

PLC梯形图编程工具,1、该工程用于PLC梯形图与逻辑语言之间进行转换。 2、PLC命令格式与三菱的PLC指令兼容。

告别虚拟机!用ZYNQ7000和PYNQ 2.6.0打造一个能实时识别人脸的“智能摄像头”

本文详细介绍了如何利用Xilinx ZYNQ7000开发板和PYNQ 2.6.0框架构建实时人脸识别系统。通过硬件加速和嵌入式开发技术,该系统实现了低延迟、低功耗的独立运行能力,适用于边缘计算和物联网应用。文章包含从环境搭建到核心功能实现的完整指南,并提供了性能优化和问题排查的实用技巧。

weixin_42543046的博客 391

开源!一个简单的软PLC

这是一个很简单的软plc,实现了基础的运行逻辑,可以对梯形图的翻译和运行有初步的了解,要产品化还需要很多工作。希望能给想做PLC的开发人员提供思路,消除技术壁垒,更多的人能了解PLC,并能实现自己的PLC。

vincentho1024的专栏 7122

PCIE Lane Margining Linux 环境配置

Copy all the provided files in folder PYC38 or PYC310 to the created pcie_lmt folder. Index of /ftp/python/3.8.10/Copy below commands to a file and rename it as "scan_pcie.py", the commands are from "685662 PCIe-LMT-Gen4_Gen5-r0p77.pdf" in the lane margi

mysongshine的博客 1436

除了gcc, 还有哪些常用的牛逼的编译器?

01.Clang Clang是一个C语言、C++、Objective-C语言的轻量级编译器。源代码发布于BSD协议下。Clang将支持其普通lambda表达式、返回类型的简化处理以及更好的处理constexpr关键字。 Clang是一个C++编写、基于LLVM、发布于LLVM BSD许可证下的C/C++/Objective-C/Objective-C++编译器。它与GNU C语言规范几乎完全兼容(...

weixin_44091229的博客 6678

新能源充电桩充电枪口标准

建立的标准确保了新能源汽车充电的安全性、兼容性和效率,促进了新能源汽车产业的发展。

网络安全的研究者、新能源行业的追求者 4689

【BigWorld 游戏服务器引擎】Cell 架构设计介绍,及Java实现方案的探索

横向扩展(Scalability):通过动态增减CellApp和BaseApp的数量,可以轻松应对玩家人数的变化。世界可以做得非常大,只需增加更多的 Cell。负载分离(Load Separation):将不同性质的负载分离,避免了单一进程瓶颈。CPU 密集型的实时计算(CellApp)和 I/O 密集型的数据操作(BaseApp)互不影响。高效的视野管理(AOI):每个 Cell 只关心自己区域内和边界上的实体,大大降低了计算复杂度。容错性:某个CellApp。

代码时光 1205

【PLC梯形图转C语言实战宝典】:20年自动化专家首度公开3大转换引擎与5类避坑指南

解决工业PLC梯形图向C语言高效转换难题,提供3大专用转换引擎与5类典型避坑指南,覆盖产线改造、国产化替代等真实场景。基于20年自动化经验提炼,确保逻辑保真、可读性强、易集成部署,值得收藏。

CompiGap的博客 476

KEPServerEX物联网网关(IoT Gateway)REST客户端代理(非原创)

(中文版)资料来源于【OPC-KEPServerEX学习KEPWare交流】905485143群的【455196383】【零下一度】 一。KEPServerEX物联网网关REST客户端代理演示 在KSE中,首先构建一个带有通道/设备/标签的模拟器系统。 例如,下面是三个随机项目。 直接到IoT网关插件,添加新代理。 从类型列表中选择REST Client。 终结点...

-雲飛兄-博客 5807

PLC编译器实现例程资源文件介绍

PLC编译器实现例程资源文件介绍 去发现同类优质开源项目:https://gitcode.com/ 此资源文件包含一个专门用于PLC梯形图与逻辑语言转换的工程。以下是该资源文件的具体信息: 功能简介 转换功能:此工程的核心功能是实现PLC梯形图与逻辑语言之间的转换,以满足不同场景下的编程需求。 兼容性:PLC命令格式设计上与三菱的PLC指令集兼容,便于用户在使用过程中能够顺利进行编程与控制。 ...

gitblog_06794的博客 353

用 ABAP LSMW 的 Standard Batch / Direct Input 稳准快迁移物料主数据:从 MM01 录制到 RMDATIND 直入的落地指南

本文详细介绍了SAP数据迁移中LSMW工具的使用方法,重点分析了物料主数据迁移的两种主要路径:Batch Input Recording和Standard Batch/Direct Input。前者通过录制事务操作实现快速起步,后者通过调用预置接口程序实现稳定高效的批量处理。文章深入解析了Standard Direct Input的具体实施步骤,包括对象属性设置、源结构定义、字段映射规则等关键环节,并特别强调了迁移前的准备工作(如编号策略、视图策略等)对项目成功的重要性。通过对比两种方法的优缺点,为不同业务

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 155

基于Python的雪球网投资组合数据爬取与分析实战:从入门到精通

在当今数字化投资时代,数据已成为投资者最重要的资产之一。雪球网作为中国领先的投资社交平台,汇聚了大量优质的投资组合数据,这些数据对于量化投资研究和个人投资决策具有重要价值。本文将详细介绍如何使用Python最新技术栈构建一个高效、稳定的雪球网投资组合爬虫,并深入分析获取的数据。投资组合持仓明细及变动历史投资收益率曲线与风险指标投资者操作策略与调仓频率热门行业与个股关注度。

2201_76125261的博客 920

LinuxCNC学习(五)Classic Ladder软件PLC

Classic Ladder作为开源软件,运行于RT linux、RTAI或Xenomai提供的实时空间,当然也可用于普通的Linux(实时性不能保证,仅用于学习)。同时支持梯形图编程和顺序逻辑功能图编程。采用GTK作为GUI,以C语言实现的梯形图解释器。

不忘情贻 2925

基于TKVA与深度学习的量子点微型光谱仪光谱重建改进算法研究

本文提出了一种融合深度学习的改进TKVA算法(TKVA-DL),用于提升量子点微型光谱仪的光谱重建精度。该方法创新性地结合深度先验网络与注意力机制,通过自适应学习光谱隐式先验替代传统固定正则化项,并动态加权探测器响应通道。实验表明,所提方法在仿真和实测数据上均显著优于传统TKVA及主流深度学习算法,RMSE降低35%,PSNR提升4.2 dB,同时保持物理可解释性。完整MATLAB实现验证了方法的有效性与可复现性,为微型光谱仪的高精度重建提供了新思路。 关键词:量子点微型光谱仪;光谱重建;Tikhonov正

AI的内部世界的博客 83

【亲测免费】 PLC梯形图编译器 VC源码

PLC梯形图编译器 VC源码 【下载地址】PLC梯形图编译器VC源码 本仓库提供了一款用于工业程序控制器(PLC)的梯形图编译器的VC++源代码。PLC作为自动化控制的核心组件,在工业生产中扮演着至关重要的角色,尤其是其通过梯形图语言实现逻辑控制的能力,因其直观易懂而广受欢迎。然而,开发此类软件工具通常需要深入理解PLC...

gitblog_09820的博客 792

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

【亲测免费】 探索工业自动化的新境界:PLC梯形图编译器VC源码推荐

探索工业自动化的新境界:PLC梯形图编译器VC源码推荐 【下载地址】PLC梯形图编译器VC源码 本仓库提供了一款用于工业程序控制器(PLC)的梯形图编译器的VC++源代码。PLC作为自动化控制的核心组件,在工业生产中扮演着至关重要的角色,尤其是其通过梯形图语言实现逻辑控制的能力,因其直观易懂而广受欢迎。然而,开发此类软件...

gitblog_09786的博客 798

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

上一篇: Dify评估准确率提升至92.7%的关键技术路径(Judge模型蒸馏+动态Few-shot校准全拆解)
下一篇: REST API正在拖垮你的实时系统?MCP协议迁移ROI测算模型首次公开:6周回本,QPS提升2.4–5.1倍(限前500份)
QuickSolve
博客等级 码龄1年 137粉丝 2015原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值