[ { "id": "9db6b568f20ad5b3", "type": "inject", "z": "b39cb88ac5f3b543", "name": "", "props": [ { "p": "payload" }, { "p": "topic", "vt": "str" } ], "repeat": "2", "crontab": "", "once": false, "onceDelay": 0.1, "topic": "", "payload": "", "payloadType": "date", "x": 150, "y": 180, "wires": [ [ "6158576bb727a90f" ] ] }, { "id": "ba0d5f9ce19205e3", "type": "opcua-compact-server", "z": "b39cb88ac5f3b543", "port": 54845, "endpoint": "", "productUri": "", "acceptExternalCommands": true, "maxAllowedSessionNumber": "10", "maxConnectionsPerEndpoint": "10", "maxAllowedSubscriptionNumber": "100", "alternateHostname": "", "name": "", "showStatusActivities": false, "showErrors": true, "allowAnonymous": true, "individualCerts": false, "isAuditing": false, "serverDiscovery": true, "users": [], "xmlsetsOPCUA": [], "publicCertificateFile": "", "privateCertificateFile": "", "registerServerMethod": "1", "discoveryServerEndpointUrl": "", "capabilitiesForMDNS": "", "maxNodesPerRead": 1000, "maxNodesPerWrite": 1000, "maxNodesPerHistoryReadData": 100, "maxNodesPerBrowse": 3000, "maxBrowseContinuationPoints": "10", "maxHistoryContinuationPoints": "10", "delayToInit": "1000", "delayToClose": "200", "serverShutdownTimeout": "100", "addressSpaceScript": "function constructAlarmAddressSpace(server, addressSpace, eventObjects, done) {\n const opcua = coreServer.choreCompact.opcua;\n const LocalizedText = opcua.LocalizedText;\n const namespace = addressSpace.getOwnNamespace();\n const Variant = opcua.Variant;\n const DataType = opcua.DataType;\n const DataValue = opcua.DataValue;\n\n var flexServerInternals = this;\n\n // Inicializa variáveis no FlowContext\n this.sandboxFlowContext.set(\"variavelModbusEntrada\", 0);\n this.sandboxFlowContext.set(\"variavelModbusSaida\", 0);\n\n // Configura a leitura da variável Modbus a cada 500ms\n this.setInterval(() => {\n // Obtém o valor da variável Modbus armazenado no contexto de fluxo\n var valorEntrada = flexServerInternals.sandboxFlowContext.get(\"variavelModbusEntrada\");\n flexServerInternals.sandboxFlowContext.set(\"variavelModbusEntrada\", valorEntrada);\n }, 500);\n\n this.setInterval(() => {\n var valorSaida = flexServerInternals.sandboxFlowContext.get(\"variavelModbusSaida\");\n flexServerInternals.sandboxFlowContext.set(\"variavelModbusSaida\", valorSaida);\n }, 500);\n\n coreServer.debugLog(\"Initializing dynamic address space\");\n const rootFolder = addressSpace.findNode(\"RootFolder\");\n node.warn(\"Constructing new address space for OPC UA\");\n\n const myDevice = namespace.addFolder(rootFolder.objects, {\n \"browseName\": \"BRANQS\"\n });\n\n // Variável de entrada - Modbus\n const variavelModbusEntrada = namespace.addVariable({\n \"organizedBy\": myDevice,\n \"browseName\": \"variavelModbusEntrada\",\n \"nodeId\": \"ns=1;s=variavelModbusEntrada\",\n \"dataType\": \"Double\",\n \"value\": {\n \"get\": function () {\n return new Variant({\n \"dataType\": DataType.Double,\n \"value\": flexServerInternals.sandboxFlowContext.get(\"variavelModbusEntrada\") || 0\n });\n },\n \"set\": function (variant) {\n flexServerInternals.sandboxFlowContext.set(\"variavelModbusEntrada\", parseFloat(variant.value));\n return opcua.StatusCodes.Good;\n }\n }\n });\n\n // Variável de saída - Modbus\n const variavelModbusSaida = namespace.addVariable({\n \"organizedBy\": myDevice,\n \"browseName\": \"variavelModbusSaida\",\n \"nodeId\": \"ns=1;s=variavelModbusSaida\",\n \"dataType\": \"Double\",\n \"value\": {\n \"get\": function () {\n return new Variant({\n \"dataType\": DataType.Double,\n \"value\": flexServerInternals.sandboxFlowContext.get(\"variavelModbusSaida\") || 0\n });\n },\n \"set\": function (variant) {\n flexServerInternals.sandboxFlowContext.set(\"variavelModbusSaida\", parseFloat(variant.value));\n return opcua.StatusCodes.Good;\n }\n }\n });\n\n // Criação das views para as variáveis\n const viewEntrada = namespace.addView({\n \"organizedBy\": rootFolder.views,\n \"browseName\": \"Test-Branqs-Var-Entrada\"\n });\n\n const viewSaida = namespace.addView({\n \"organizedBy\": rootFolder.views,\n \"browseName\": \"Test-Branqs-Var-Saida\"\n });\n\n // Adicionando as variáveis nas views\n viewEntrada.addReference({\n \"referenceType\": \"Organizes\",\n \"nodeId\": variavelModbusEntrada.nodeId\n });\n\n viewSaida.addReference({\n \"referenceType\": \"Organizes\",\n \"nodeId\": variavelModbusSaida.nodeId\n });\n\n coreServer.debugLog(\"Dynamic address space creation completed\");\n node.warn(\"New address space for OPC UA constructed successfully\");\n\n done();\n}\n", "x": 640, "y": 340, "wires": [] }, { "id": "7dacd6704213c475", "type": "function", "z": "b39cb88ac5f3b543", "name": "Set Flow Input", "func": "var valorLido = msg.payload.value[0];\nflow.set(\"variavelModbusEntrada\", valorLido);\nreturn msg;", "outputs": 1, "timeout": "", "noerr": 0, "initialize": "", "finalize": "", "libs": [], "x": 560, "y": 200, "wires": [ [ "eeb717b2f6ab6d65" ] ] }, { "id": "eeb717b2f6ab6d65", "type": "function", "z": "b39cb88ac5f3b543", "name": "Set Flow Output", "func": "var valorModbusEntrada = flow.get(\"variavelModbusEntrada\");\nmsg.payload = { variavelModbusEntrada: valorModbusEntrada };\nreturn msg;", "outputs": 1, "noerr": 0, "initialize": "", "finalize": "", "x": 760, "y": 200, "wires": [ [ "a9413a1f2f120571" ] ] }, { "id": "6158576bb727a90f", "type": "modbus-getter", "z": "b39cb88ac5f3b543", "name": "teste", "showStatusActivities": false, "showErrors": false, "showWarnings": true, "logIOActivities": false, "unitid": "5", "dataType": "HoldingRegister", "adr": "0", "quantity": "2", "server": "01f369c31c588de8", "useIOFile": false, "ioFile": "", "useIOForPayload": false, "emptyMsgOnFail": false, "keepMsgProperties": false, "delayOnStart": false, "startDelayTime": "", "x": 330, "y": 200, "wires": [ [ "7dacd6704213c475" ], [ "badc543cf9d8fbf7" ] ] }, { "id": "a9413a1f2f120571", "type": "debug", "z": "b39cb88ac5f3b543", "name": "debug 1", "active": true, "tosidebar": true, "console": true, "tostatus": true, "complete": "payload", "targetType": "msg", "statusVal": "payload", "statusType": "auto", "x": 860, "y": 300, "wires": [] }, { "id": "2814028832555578", "type": "inject", "z": "b39cb88ac5f3b543", "name": "", "repeat": "1", "crontab": "", "once": true, "onceDelay": "0.5", "topic": "", "payload": "", "payloadType": "date", "x": 150, "y": 300, "wires": [ [ "40e574e5c95986cb" ] ] }, { "id": "40e574e5c95986cb", "type": "function", "z": "b39cb88ac5f3b543", "name": "set flow context Inputs", "func": "msg.payload = [\n flow.get(\"variavelModbusEntrada\")\n];\nreturn msg;\n", "outputs": 1, "timeout": "", "noerr": 0, "initialize": "", "finalize": "", "libs": [], "x": 390, "y": 300, "wires": [ [] ] }, { "id": "8c7baffaebe60a49", "type": "inject", "z": "b39cb88ac5f3b543", "name": "", "repeat": "1", "crontab": "", "once": true, "onceDelay": "0.5", "topic": "", "payload": "", "payloadType": "date", "x": 150, "y": 360, "wires": [ [ "dfe1d584c3538aa1" ] ] }, { "id": "dfe1d584c3538aa1", "type": "function", "z": "b39cb88ac5f3b543", "name": "set flow context Outputs", "func": "msg.payload = [\n flow.get(\"variavelModbusSaida\")\n];\nreturn msg;\n", "outputs": 1, "timeout": "", "noerr": 0, "initialize": "", "finalize": "", "libs": [], "x": 400, "y": 360, "wires": [ [] ] }, { "id": "badc543cf9d8fbf7", "type": "debug", "z": "b39cb88ac5f3b543", "name": "debug 2", "active": true, "tosidebar": true, "console": true, "tostatus": true, "complete": "payload", "targetType": "msg", "statusVal": "payload", "statusType": "auto", "x": 400, "y": 120, "wires": [] }, { "id": "01f369c31c588de8", "type": "modbus-client", "name": "teste server", "clienttype": "serial", "bufferCommands": true, "stateLogEnabled": false, "queueLogEnabled": false, "failureLogEnabled": true, "tcpHost": "127.0.0.1", "tcpPort": "502", "tcpType": "DEFAULT", "serialPort": "/dev/ttyS0", "serialType": "RTU-BUFFERD", "serialBaudrate": "9600", "serialDatabits": "8", "serialStopbits": "1", "serialParity": "none", "serialConnectionDelay": "100", "serialAsciiResponseStartDelimiter": "0x3A", "unit_id": "5", "commandDelay": "1", "clientTimeout": "2000", "reconnectOnTimeout": true, "reconnectTimeout": "2000", "parallelUnitIdsAllowed": true, "showErrors": false, "showWarnings": true, "showLogs": true } ]