114 lines
3.1 KiB
TypeScript
114 lines
3.1 KiB
TypeScript
/**
|
|
* @author Martin Karkowski
|
|
* @email m.karkowski@zema.de
|
|
* @create date 2020-02-20 19:46:19
|
|
* @modify date 2020-11-25 07:36:29
|
|
* @desc [description]
|
|
*/
|
|
|
|
import * as handlebars from "handlebars";
|
|
import { IParsedLogic } from "../types/interface";
|
|
// declare const handlebars;
|
|
import { IParser } from "./default.parser";
|
|
|
|
|
|
export class SiemensParser implements IParser {
|
|
|
|
|
|
mainLoop(context: IParsedLogic): string {
|
|
const templates = {
|
|
ifHeaderTemplate: "{{#if isFirst}}IF{{/if}}{{#unless isFirst}}ELSIF{{/unless}}{{> testPrePlaces}}{{> testPostPlaces}}{{> testGuard}} THEN",
|
|
testPrePlaces: "{{#each inputs}} (\"{{placeTokenVar}}\"{{#if minTokens}} - \"{{minTokens}}\"{{/if}}) >= \"{{tokensToRemove}}\" AND{{/each}}",
|
|
testPostPlaces: "{{#each testOutputs}} (\"{{placeTokenVar}}\" + \"{{tokensToAdd}}\") <= {{maxTokens}}\" AND {{/each}}",
|
|
testGuard: " {{guard.external}}",
|
|
removeTokens: "{{#each inputs}}\"{{placeTokenVar}}\" := \"{{placeTokenVar}}\" - \"{{tokensToRemove}}\";{{/each}}",
|
|
addTokens: "{{#each outputs}}\"{{placeTokenVar}}\" := \"{{placeTokenVar}}\" + \"{{tokensToAdd}}\";{{/each}}"
|
|
};
|
|
|
|
for (const partial in templates) {
|
|
handlebars.registerPartial(partial, templates[partial]);
|
|
}
|
|
|
|
const functions: { [index: string]: (context: any) => string } = {
|
|
"plc.set": (context) => {
|
|
console.log(context);
|
|
return "";
|
|
}
|
|
};
|
|
|
|
// handlebars.registerHelper(require('handlebars-helpers/lib/array.js'))
|
|
|
|
handlebars.registerHelper("getFunctionCode", (context, name, paramers, dynParams) => {
|
|
console.log("FUNC", context, name, paramers, dynParams);
|
|
});
|
|
|
|
const mainTemplate = "" +
|
|
`
|
|
ORGANIZATION_BLOCK "Main"
|
|
TITLE = "Main Program Sweep (Cycle)"
|
|
{ S7_Optimized_Access := 'TRUE' }
|
|
VERSION : 0.1
|
|
|
|
BEGIN
|
|
|
|
{{#each transitions}}
|
|
// Test Transtion "{{{label}}}"
|
|
{{> ifHeaderTemplate}}
|
|
{{#if inputs}}
|
|
|
|
// Removing Tokens from Pre-Places.
|
|
{{> removeTokens}}
|
|
{{/if}}
|
|
{{#if outputs}}
|
|
|
|
// Adding Tokens to the Post-Places.
|
|
{{> addTokens}}
|
|
{{/if}}
|
|
{{#if funcName}}
|
|
|
|
// Execute the desired Function
|
|
{{#getFunctionCode funcName params dynamicParameters}}{{/getFunctionCode}}
|
|
{{/if}}
|
|
{{#if isLast}}
|
|
END_IF;
|
|
{{/if}}
|
|
{{/each}}
|
|
|
|
END_ORGANIZATION_BLOCK
|
|
`;
|
|
|
|
// handlebars.registerHelper("joinList", helpers_1.joinListHelper);
|
|
|
|
const render = handlebars.compile(mainTemplate);
|
|
return "";
|
|
}
|
|
|
|
variableDefinition(context: IParsedLogic): string {
|
|
const template = "" +
|
|
`
|
|
DATA_BLOCK "VARS_DB"
|
|
{ S7_Optimized_Access := 'FALSE' }
|
|
VERSION : 0.1
|
|
NON_RETAIN
|
|
VAR
|
|
{{#each variables}}
|
|
{{name}} : {{type}};
|
|
{{/each}}
|
|
END_VAR
|
|
BEGIN
|
|
{{#some variables "v=>(v.hasValue)"}}
|
|
{{#joinList this "\n" "v=>(v.hasValue)"}}
|
|
{{name}} := {{value}};
|
|
{{/joinList}}
|
|
{{/some}}
|
|
END_DATA_BLOCK
|
|
`;
|
|
|
|
const render = handlebars.compile(template);
|
|
return render(context);
|
|
}
|
|
|
|
instanceCreation(context: IParsedLogic): string {
|
|
throw new Error("Method not implemented.");
|
|
}
|
|
} |