mmd604

MrPLC Member
  • Content count

    38
  • Joined

  • Last visited

Community Reputation

1 Neutral

About mmd604

  • Rank
    Sparky

Profile Information

  • Country Canada
  1. CVE-2021-22681 - Logix 5000 Security Alert

    Shodan.io if your interested in learning how not to setup your network 
  2. Ethernet MAC Address

    Youtube!.  Wireshark is actually very easy and powerful to use 
  3. connect between deltav and ifix

    Deltva has a OPC server.  Any application that has access to the data essentially is a OPC client  
  4. .cha vs .mer

    Thanks Alan it worked!
  5. .cha vs .mer

    So i am linking one plc and hmi on range 10.0.41. to another plc and hmi on range  192.168.0. I want to put the plc 192.168.0.2 and hmi 192.168.0.3 on range 10.0.41.  When I make this change I would change IP in terminal settings on the hmi and change IP on plc via Studio5000. Also would I have to change anything in the Runtime file because I am using tags from the PLC.   The file uploaded from hmi is .cha instead of .mer.  How do i convert the file so I can edit the hmi like I would be able to in application manager. 
  6. PLC Keyswitch Default Position

    We have no machines connected to the internet on are process network and we port forward instead of opening ports.  You can protect against script kiddies but a good hacker good luck with that.
  7. Scale Data telnet

    Thank you kindly
  8. I need to get scale data from a mettler toledo scale into a sql server.  The live scale data is hosted at a ip on port 23(telnet) any ideas?
  9. Distributed SE Restore

    If your talk about restoring a mer file to a runtime so you can edit a hmi application in factorytalk SE yes I have ran into that problem.  Try using a different version to restore for instance I was trying version 10 SE then I attempted version 9 SE and it worked. 
  10. DeltaV

    We have the physical I/O we just need more licensing to actual implement the I/O in control studio
  11. Export Data Files to .txt or .csv file?

    Node Red works great for getting data from studio 5000 and populating a excel spread sheet
  12. DeltaV

    I am curious as deltav is the only dcs system I have worked on.  Do most dcs systems charge for use of input and outputs I find this outrageous
  13. I have a opc client(deltav) at one facility and a OPC server(Lighthouse) at another location.  I would like to read and write data to the server via the client over the web has anybody done this ?
  14. Data Collection and Display

    Download and install node red and then install this pallet "node-red-contrib-opcua-server"   
  15. Data Collection and Display

    function constructAlarmAddressSpace(server, addressSpace, eventObjects, done) {   // server = the created node-opcua server   // addressSpace = address space of the node-opcua server   // eventObjects = add event variables here to hold them in memory from this script   // internal sandbox objects are:   // node = the compact server node,   // coreServer = core compact server object for debug and access to NodeOPCUA   // this.sandboxNodeContext = node context node-red   // this.sandboxFlowContext = flow context node-red   // this.sandboxGlobalContext = global context node-red   // this.sandboxEnv = env variables   // timeout and interval functions as expected from nodejs   const opcua = coreServer.choreCompact.opcua;   const LocalizedText = opcua.LocalizedText;   const namespace = addressSpace.getOwnNamespace();   const Variant = opcua.Variant;   const DataType = opcua.DataType;   const DataValue = opcua.DataValue;   var flexServerInternals = this;   this.sandboxFlowContext.set("isoInput1", 0);   this.setInterval(() => {     flexServerInternals.sandboxFlowContext.set(       "isoInput1",       Math.random() + 50.0     );   }, 500);   this.sandboxFlowContext.set("isoInput2", 0);   this.sandboxFlowContext.set("isoInput3", 0);   this.sandboxFlowContext.set("isoInput4", 0);   this.sandboxFlowContext.set("isoInput5", 0);   this.sandboxFlowContext.set("isoInput6", 0);   this.sandboxFlowContext.set("isoInput7", 0);   this.sandboxFlowContext.set("isoInput8", 0);   this.sandboxFlowContext.set("isoInput9", 0);   this.sandboxFlowContext.set("isoOutput1", 0);   this.setInterval(() => {     flexServerInternals.sandboxFlowContext.set(       "isoOutput1",       Math.random() + 10.0     );   }, 500);   this.sandboxFlowContext.set("isoOutput2", 0);   this.sandboxFlowContext.set("isoOutput3", 0);   this.sandboxFlowContext.set("isoOutput4", 0);   this.sandboxFlowContext.set("isoOutput5", 0);   this.sandboxFlowContext.set("isoOutput6", 0);   this.sandboxFlowContext.set("isoOutput7", 0);   this.sandboxFlowContext.set("isoOutput8", 0);   this.sandboxFlowContext.set("isoOutput9", 0);   coreServer.debugLog("init dynamic address space");   const rootFolder = addressSpace.findNode("RootFolder");   node.warn("construct new address space for OPC UA");   const myDevice = namespace.addFolder(rootFolder.objects, {     "browseName": "RaspberryPI-Zero-WLAN"   });   const gpioFolder = namespace.addFolder(myDevice, { "browseName": "GPIO" });   const isoInputs = namespace.addFolder(gpioFolder, {     "browseName": "Inputs"   });   const isoOutputs = namespace.addFolder(gpioFolder, {     "browseName": "Outputs"   });   const gpioDI1 = namespace.addVariable({     "organizedBy": isoInputs,     "browseName": "I1",     "nodeId": "ns=1;s=Isolated_Input1",     "dataType": "Double",     "value": {       "get": function() {         return new Variant({           "dataType": DataType.Double,           "value": flexServerInternals.sandboxFlowContext.get("isoInput1")         });       },       "set": function(variant) {         flexServerInternals.sandboxFlowContext.set(           "isoInput1",           parseFloat(variant.value)         );         return opcua.StatusCodes.Good;       }     }   });   const gpioDI2 = namespace.addVariable({     "organizedBy": isoInputs,     "browseName": "I2",     "nodeId": "ns=1;s=Isolated_Input2",     "dataType": "Double",     "value": {       "get": function() {         return new Variant({           "dataType": DataType.Double,           "value": flexServerInternals.sandboxFlowContext.get("isoInput2")         });       },       "set": function(variant) {         flexServerInternals.sandboxFlowContext.set(           "isoInput2",           parseFloat(variant.value)         );         return opcua.StatusCodes.Good;       }     }   });   const gpioDI3 = namespace.addVariable({     "organizedBy": isoInputs,     "browseName": "I3",     "nodeId": "ns=1;s=Isolated_Input3",     "dataType": "Double",     "value": {       "get": function() {         return new Variant({           "dataType": DataType.Double,           "value": flexServerInternals.sandboxFlowContext.get("isoInput3")         });       },       "set": function(variant) {         flexServerInternals.sandboxFlowContext.set(           "isoInput3",           parseFloat(variant.value)         );         return opcua.StatusCodes.Good;       }     }   });   const gpioDI4 = namespace.addVariable({     "organizedBy": isoInputs,     "browseName": "I4",     "nodeId": "ns=1;s=Isolated_Input4",     "dataType": "Double",     "value": {       "get": function() {         return new Variant({           "dataType": DataType.Double,           "value": flexServerInternals.sandboxFlowContext.get("isoInput4")         });       },       "set": function(variant) {         flexServerInternals.sandboxFlowContext.set(           "isoInput4",           parseFloat(variant.value)         );         return opcua.StatusCodes.Good;       }     }   });   const gpioDI5 = namespace.addVariable({     "organizedBy": isoInputs,     "browseName": "I5",     "nodeId": "ns=1;s=Isolated_Input5",     "dataType": "Double",     "value": {       "get": function() {         return new Variant({           "dataType": DataType.Double,           "value": flexServerInternals.sandboxFlowContext.get("isoInput5")         });       },       "set": function(variant) {         flexServerInternals.sandboxFlowContext.set(           "isoInput5",           parseFloat(variant.value)         );         return opcua.StatusCodes.Good;       }     }   });   const gpioDI6 = namespace.addVariable({     "organizedBy": isoInputs,     "browseName": "I6",     "nodeId": "ns=1;s=Isolated_Input6",     "dataType": "Double",     "value": {       "get": function() {         return new Variant({           "dataType": DataType.Double,           "value": flexServerInternals.sandboxFlowContext.get("isoInput6")         });       },       "set": function(variant) {         flexServerInternals.sandboxFlowContext.set(           "isoInput6",           parseFloat(variant.value)         );         return opcua.StatusCodes.Good;       }     }   });   const gpioDI7 = namespace.addVariable({     "organizedBy": isoInputs,     "browseName": "I7",     "nodeId": "ns=1;s=Isolated_Input7",     "dataType": "Double",     "value": {       "get": function() {         return new Variant({           "dataType": DataType.Double,           "value": flexServerInternals.sandboxFlowContext.get("isoInput7")         });       },       "set": function(variant) {         flexServerInternals.sandboxFlowContext.set(           "isoInput7",           parseFloat(variant.value)         );         return opcua.StatusCodes.Good;       }     }   });   const gpioDI8 = namespace.addVariable({     "organizedBy": isoInputs,     "browseName": "I8",     "nodeId": "ns=1;s=Isolated_Input8",     "dataType": "Double",     "value": {       "get": function() {         return new Variant({           "dataType": DataType.Double,           "value": flexServerInternals.sandboxFlowContext.get("isoInput8")         });       },       "set": function(variant) {         flexServerInternals.sandboxFlowContext.set(           "isoInput8",           parseFloat(variant.value)         );         return opcua.StatusCodes.Good;       }     }   });     const gpioDI9 = namespace.addVariable({     "organizedBy": isoInputs,     "browseName": "I9",     "nodeId": "ns=1;s=Isolated_Input9",     "dataType": "Double",     "value": {       "get": function() {         return new Variant({           "dataType": DataType.Double,           "value": flexServerInternals.sandboxFlowContext.get("isoInput9")         });       },       "set": function(variant) {         flexServerInternals.sandboxFlowContext.set(           "isoInput9",           parseFloat(variant.value)         );         return opcua.StatusCodes.Good;       }     }   });   const gpioDO1 = namespace.addVariable({     "organizedBy": isoOutputs,     "browseName": "O1",     "nodeId": "ns=1;s=Isolated_Output1",     "dataType": "Double",     "value": {       "get": function() {         return new Variant({           "dataType": DataType.Double,           "value": flexServerInternals.sandboxFlowContext.get("isoOutput1")         });       },       "set": function(variant) {         flexServerInternals.sandboxFlowContext.set(           "isoOutput1",           parseFloat(variant.value)         );         return opcua.StatusCodes.Good;       }     }   });   const gpioDO2 = namespace.addVariable({     "organizedBy": isoOutputs,     "browseName": "O2",     "nodeId": "ns=1;s=Isolated_Output2",     "dataType": "Double",     "value": {       "get": function() {         return new Variant({           "dataType": DataType.Double,           "value": flexServerInternals.sandboxFlowContext.get("isoOutput2")         });       },       "set": function(variant) {         flexServerInternals.sandboxFlowContext.set(           "isoOutput2",           parseFloat(variant.value)         );         return opcua.StatusCodes.Good;       }     }   });   const gpioDO3 = namespace.addVariable({     "organizedBy": isoOutputs,     "browseName": "O3",     "nodeId": "ns=1;s=Isolated_Output3",     "dataType": "Double",     "value": {       "get": function() {         return new Variant({           "dataType": DataType.Double,           "value": flexServerInternals.sandboxFlowContext.get("isoOutput3")         });       },       "set": function(variant) {         flexServerInternals.sandboxFlowContext.set(           "isoOutput3",           parseFloat(variant.value)         );         return opcua.StatusCodes.Good;       }     }   });   const gpioDO4 = namespace.addVariable({     "organizedBy": isoOutputs,     "browseName": "O4",     "nodeId": "ns=1;s=Isolated_Output4",     "dataType": "Double",     "value": {       "get": function() {         return new Variant({           "dataType": DataType.Double,           "value": flexServerInternals.sandboxFlowContext.get("isoOutput4")         });       },       "set": function(variant) {         flexServerInternals.sandboxFlowContext.set(           "isoOutput4",           parseFloat(variant.value)         );         return opcua.StatusCodes.Good;       }     }   });   const gpioDO5 = namespace.addVariable({     "organizedBy": isoOutputs,     "browseName": "O5",     "nodeId": "ns=1;s=Isolated_Output5",     "dataType": "Double",     "value": {       "get": function() {         return new Variant({           "dataType": DataType.Double,           "value": flexServerInternals.sandboxFlowContext.get("isoOutput5")         });       },       "set": function(variant) {         flexServerInternals.sandboxFlowContext.set(           "isoOutput5",           parseFloat(variant.value)         );         return opcua.StatusCodes.Good;       }     }   });   const gpioDO6 = namespace.addVariable({     "organizedBy": isoOutputs,     "browseName": "O6",     "nodeId": "ns=1;s=Isolated_Output6",     "dataType": "Double",     "value": {       "get": function() {         return new Variant({           "dataType": DataType.Double,           "value": flexServerInternals.sandboxFlowContext.get("isoOutput6")         });       },       "set": function(variant) {         flexServerInternals.sandboxFlowContext.set(           "isoOutput6",           parseFloat(variant.value)         );         return opcua.StatusCodes.Good;       }     }   });   const gpioDO7 = namespace.addVariable({     "organizedBy": isoOutputs,     "browseName": "O7",     "nodeId": "ns=1;s=Isolated_Output7",     "dataType": "Double",     "value": {       "get": function() {         return new Variant({           "dataType": DataType.Double,           "value": flexServerInternals.sandboxFlowContext.get("isoOutput7")         });       },       "set": function(variant) {         flexServerInternals.sandboxFlowContext.set(           "isoOutput7",           parseFloat(variant.value)         );         return opcua.StatusCodes.Good;       }     }   });   const gpioDO8 = namespace.addVariable({     "organizedBy": isoOutputs,     "browseName": "O8",     "nodeId": "ns=1;s=Isolated_Output8",     "dataType": "Double",     "value": {       "get": function() {         return new Variant({           "dataType": DataType.Double,           "value": flexServerInternals.sandboxFlowContext.get("isoOutput8")         });       },       "set": function(variant) {         flexServerInternals.sandboxFlowContext.set(           "isoOutput8",           parseFloat(variant.value)         );         return opcua.StatusCodes.Good;       }     }   });   const gpioDO9 = namespace.addVariable({     "organizedBy": isoOutputs,     "browseName": "O9",     "nodeId": "ns=1;s=Isolated_Output9",     "dataType": "Double",     "value": {       "get": function() {         return new Variant({           "dataType": DataType.Double,           "value": flexServerInternals.sandboxFlowContext.get("isoOutput9")         });       },       "set": function(variant) {         flexServerInternals.sandboxFlowContext.set(           "isoOutput9",           parseFloat(variant.value)         );         return opcua.StatusCodes.Good;       }     }   });   //------------------------------------------------------------------------------   // Add a view   //------------------------------------------------------------------------------   const viewDI = namespace.addView({     "organizedBy": rootFolder.views,     "browseName": "RPIW0-Digital-Ins"   });   const viewDO = namespace.addView({     "organizedBy": rootFolder.views,     "browseName": "RPIW0-Digital-Outs"   });   viewDI.addReference({     "referenceType": "Organizes",     "nodeId": gpioDI1.nodeId   });   viewDI.addReference({     "referenceType": "Organizes",     "nodeId": gpioDI2.nodeId   });   viewDI.addReference({     "referenceType": "Organizes",     "nodeId": gpioDI3.nodeId   });   viewDI.addReference({     "referenceType": "Organizes",     "nodeId": gpioDI4.nodeId   });   viewDI.addReference({     "referenceType": "Organizes",     "nodeId": gpioDI5.nodeId   });   viewDI.addReference({     "referenceType": "Organizes",     "nodeId": gpioDI6.nodeId   });   viewDI.addReference({     "referenceType": "Organizes",     "nodeId": gpioDI7.nodeId   });   viewDI.addReference({     "referenceType": "Organizes",     "nodeId": gpioDI8.nodeId   });          viewDI.addReference({     "referenceType": "Organizes",     "nodeId": gpioDI9.nodeId   });     viewDO.addReference({     "referenceType": "Organizes",     "nodeId": gpioDO1.nodeId   });   viewDO.addReference({     "referenceType": "Organizes",     "nodeId": gpioDO2.nodeId   });   viewDO.addReference({     "referenceType": "Organizes",     "nodeId": gpioDO3.nodeId   });   viewDO.addReference({     "referenceType": "Organizes",     "nodeId": gpioDO4.nodeId   });   viewDO.addReference({     "referenceType": "Organizes",     "nodeId": gpioDO5.nodeId   });   viewDO.addReference({     "referenceType": "Organizes",     "nodeId": gpioDO6.nodeId   });   viewDO.addReference({     "referenceType": "Organizes",     "nodeId": gpioDO7.nodeId   });   viewDO.addReference({     "referenceType": "Organizes",     "nodeId": gpioDO8.nodeId   });    viewDO.addReference({     "referenceType": "Organizes",     "nodeId": gpioDO9.nodeId   });   coreServer.debugLog("create dynamic address space done");   node.warn("construction of new address space for OPC UA done");   done(); }