nope/modules/net-analyzer/registry/siemens.parser.ts
Martin Karkowski 838d910c2f adding gojs
2020-12-01 13:05:35 +01:00

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.");
}
}