0

我正在编写代码生成器,但没有足够的资源来完成它。我只有带有 ST 语言编译器的旧软件。我想做的是从这个编译器的输出中,编写我的代码生成器,也许不是最好的方法,但我能做到的最好。

我的问题是,任何人都知道“.4asm”扩展是什么意思,我该如何编写代码生成器?

ps:一些输出代码:

.prg program1
clssid 13
var    bool rst
var    u295_initvar inizializzazioni
var    u295_cicloprova cicloprova
var    u295_elaboratest elaboratest
var    u295_salvadati salvadati
var    u295_assegnazioni assegnazioni
var    u295_allarmi allarmi
var    udint d
var    bool testen
var    u295_ricercazero ricercazero
var    u295_startmotore startmotore
var    uint count
var    u295_default default
var    dint j
var    u295_tara tara
var    uint countdelay
var    u295_blinkled blinkled
bp              0   ;"(27,2)"
stmtbeg         2   ;"(27,2)"
PSHD_IN_32      d
PSHC_01_32
add_udint       
POPD_IN_32      d

stmtbeg         3   ;"(28,2)"
PSHC_00_32
POPD_IN_32      j

stmtbeg         4   ;"(29,13)"
PSHC_TX         '1.10'
LEAO_ID         objid(__global_inst) offsetof(__global,revisioneplc)
MOVE_STRING     

stmtbeg         5   ;"(30,1)"
PSHD_IN_1       rst
not_bool        
PSHD_GI_8       ch0_in_16_23
PSHC_VV_8       byte#16#f0
and_byte        
PSHC_VV_8       byte#16#a0
eq_byte         
PSHD_IN_1       testen
or_bool         
and_bool        
jmpcn           @L0  ;to else
    stmtbeg         6   ;"(32,5)"
    PSHC_01_1
    POPD_IN_1       rst

    stmtbeg         7   ;"(33,2)"
    CALB_PN         clsid(u295_initvar) inizializzazioni

    stmtbeg         8   ;"(34,2)"
    PSHC_00_1
    POPO_IN_1       ricercazero offsetof(u295_ricercazero,start)
    CALB_PN         clsid(u295_ricercazero) ricercazero

...

4

1 回答 1

0

因此,您所拥有的是由 ST 语言的编译器生成的汇编语言源代码。ST指:

PLC 结构化文本语言,由 IEC 1131-3 PLC 语言规范 (IEC, 1993) 定义。结构化文本 (ST) 是用于 PLC 的高级、块结构、基于文本的语言。它与 Pascal 类似,但有许多源自其 PLC 应用程序的重要区别。ST 程序在 PLC 扫描中重复执行,并在固定的 PLC 内存映射 I/O 基础上运行。大多数 ST 实施符合 IEC 1131-3 ST 规范24。附录 A 中提供了有关 ST 一般特征的更多信息。

如果您有 ST 中的源代码程序,那么您可以使用 ST 编译器对其进行编译。如果您有 PLC,那么您应该拥有将生成的代码编译成它可以接受的形式所需的工具。如果你没有这些东西,这将是一场艰苦的战斗。

如果此代码位于名为 .4asm 的文件中,那么这是编译到特定 PLC 中的汇编语言。如果你知道什么PLC,你就知道什么编译器。

代码看起来意大利摩托车。我认为你需要找一个比通常在这里找到的更专业的人。

于 2014-05-08T11:48:09.437 回答