A method includes accessing a shared industrial automation project file, creating a local copy of an industrial automation project file representative of the shared industrial automation project file on a storage component accessible by the one or more processors, receiving, via a graphical user interface (gui), an input indicative of one or more modifications to the local copy of the industrial automation project file, implementing the one or more modifications to the local copy of the industrial automation project file based on the input, identifying one or more differences between the local copy of the industrial automation project file and the shared industrial automation project file, wherein the one or more differences are associated with the one or more modifications, and presenting a notification indicative of the one or more differences between the local copy of the industrial automation project file and the shared industrial automation project file.
|
9. A method, comprising:
accessing, via one or more processors, a shared industrial automation project file, wherein the shared industrial automation project file comprises computer code representative of a plurality of industrial automation components, and wherein the shared industrial automation project file is utilized during performance of an industrial automation process;
creating a local copy of an industrial automation project file representative of the shared industrial automation project file on a memory accessible by the one or more processors;
receiving, via a first graphical user interface (gui), a first input indicative of one or more modifications to the local copy of the industrial automation project file;
implementing, via the one or more processors, the one or more modifications to the local copy of the industrial automation project file based on the first input;
identifying, via the one or more processors, one or more differences between the local copy of the industrial automation project file and the shared industrial automation project file, wherein the one or more differences result from the one or more modifications;
presenting, via the one or more processors, a notification indicative of the one or more differences between the local copy of the industrial automation project file and the shared industrial automation project file, wherein the notification comprises:
a first selectable option indicative of a first command to merge the local copy of the industrial automation project file and the shared industrial automation project file;
a second selectable option indicative of a second command to implement the one or more modifications to the shared industrial automation project file; and
a third selectable option indicative of a third command not to implement the one or more modifications to the shared industrial automation project file;
presenting, via the one or more processors, the notification via the first gui; and
in response to receiving a second input indicative of a selection of the first selectable option, presenting, via the one or more processors, a second gui comprising a first representation of the local copy of the industrial automation project file, a second representation of the shared industrial automation project file, and a third representation of a merged industrial automation project file based on the local copy of the industrial automation project file and the shared industrial automation project file.
1. A non-transitory, tangible, computer-readable medium, comprising computer-executable instructions that, when executed by one or more processors, cause the one or more processors to perform operations comprising:
accessing a shared industrial automation project file, wherein the shared industrial automation project file comprises computer code representative of a plurality of industrial automation components, and wherein the shared industrial automation project file is utilized during performance of an industrial automation process;
creating a local copy of an industrial automation project file representative of the shared industrial automation project file on a storage component accessible by the one or more processors;
receiving, via a graphical user interface (gui), an input indicative of one or more modifications to the local copy of the industrial automation project file;
implementing the one or more modifications to the local copy of the industrial automation project file based on the input;
identifying one or more differences between the local copy of the industrial automation project file and the shared industrial automation project file, wherein the one or more differences are associated with the one or more modifications;
presenting a notification indicative of the one or more differences between the local copy of the industrial automation project file and the shared industrial automation project file, wherein the notification comprises:
a first selectable option indicative of a first command to merge the local copy of the industrial automation project file and the shared industrial automation project file;
a second selectable option indicative of a second command to implement the one or more modifications to the shared industrial automation project file; and
a third selectable option indicative of a third command to prevent the one or more modifications from being implemented to the shared industrial automation project file;
presenting the notification via the gui; and
in response to receiving a second input indicative of a selection of the first selectable option, presenting a second gui comprising a first representation of the local copy of the industrial automation project file, a second representation of the shared industrial automation project file, and a third representation of a merged industrial automation project file based on the local copy of the industrial automation project file and the shared industrial automation project file.
15. A non-transitory, tangible, computer readable medium comprising instructions that, when executed by a processor, causes the processor to perform actions comprising:
accessing a shared industrial automation project file, wherein the shared industrial automation project file comprises computer code representative of a plurality of industrial automation components, and wherein the shared industrial automation project file is utilized during performance of an industrial automation process;
creating a local copy of an industrial automation project file representative of the shared industrial automation project file on a memory accessible by the processor;
receiving, via a first graphical user interface (gui), a first input indicative of one or more modifications to the local copy of the industrial automation project file;
implementing the one or more modifications to the local copy of the industrial automation project file based on the first input;
identifying one or more differences between the local copy of the industrial automation project file and the shared industrial automation project file, wherein the one or more differences result from the one or more modifications;
displaying a notification indicative of the one or more differences between the local copy of the industrial automation project file and the shared industrial automation project file, wherein the notification comprises:
a first selectable option indicative of a first command to merge the local copy of the industrial automation project file and the shared industrial automation project file;
a second selectable option indicative of a second command to implement the one or more modifications to the shared industrial automation project file; and
a third selectable option indicative of a third command preventing the one or more modifications from being implemented to the shared industrial automation project file; and
presenting the notification via the first gui;
in response to receiving a second input indicative of a selection of the first selectable option, presenting a second gui comprising a first representation of the local copy of the industrial automation project file, a second representation of the shared industrial automation project file, and a third representation of a merged industrial automation project file based on the local copy of the industrial automation project file and the shared industrial automation project file;
displaying a third gui comprising a representation of the one or more modifications to the local copy of the industrial automation project file in response to receiving a third input indicative of a first selection of the first selectable option;
receiving a fourth input indicative of a second selection of a subset of the one or more modifications to the local copy of the industrial automation project file to be implemented in the shared industrial automation project file; and
implementing the subset of the one or more modifications to the shared industrial automation project file.
2. The non-transitory, tangible, computer readable medium of
in response to receiving a third input indicative of a selection of the first selectable option or the second selectable option, updating the shared industrial automation project file based on the third input.
3. The non-transitory, tangible, computer readable medium of
in response to receiving a fourth input indicative of a selection of the third selectable option, preventing the one or more modifications from being implemented to the shared industrial automation project file.
4. The non-transitory, tangible, computer readable medium of
in response to receiving a fourth input indicative of an approval of the merged industrial automation project file, replacing the shared industrial automation project file with the merged industrial automation project file.
5. The non-transitory, tangible, computer readable medium of
in response to receiving a fifth input indicative of a selection of the first selectable option, presenting a third gui comprising a second representation of the one or more modifications to the local copy of the industrial automation project file;
receiving a sixth input indicative of a second selection of a subset of the one or more modifications to the local copy of the industrial automation project file to be implemented in the shared industrial automation project file; and
implementing the subset of the one or more modifications to the shared industrial automation project file.
6. The non-transitory, tangible, computer readable medium of
presenting a second notification indicative of a number of users accessing the shared industrial automation project file.
7. The non-transitory, tangible, computer readable medium of
8. The non-transitory, tangible, computer readable medium of
10. The method of
in response to receiving a third input indicative of a second selection of the first selectable option or the second selectable option, updating, via the one or more processors, the shared industrial automation project file based on the third input; and
in response to receiving a fourth input indicative of a third selection of the third selectable option, preventing, via the one or more processors, the one or more modifications from being implemented to the shared industrial automation project file.
11. The method of
in response to receiving a fifth input indicative of an approval of the merged industrial automation project file, replacing, via the one or more processors, the shared industrial automation project file with the merged industrial automation project file.
12. The method of
13. The method of
14. The method of
16. The non-transitory, tangible, computer readable medium of
updating the shared industrial automation project file based on a fifth input indicative of the selection of the first selectable option or the second selectable option; and
preventing the one or more modifications from being implemented to the shared industrial automation project file in response to receiving a sixth input indicative of a selection of the third selectable option.
17. The non-transitory, tangible, computer readable medium of
18. The non-transitory, tangible, computer readable medium of
19. The non-transitory, tangible, computer readable medium of
|
This application is a continuation of U.S. patent application Ser. No. 16/586,165, filed Sep. 27, 2019, entitled “SYSTEM AND METHOD FOR INDUSTRIAL AUTOMATION RULES ENGINE,” which is incorporated by reference for all purposes.
Embodiments of the present disclosure relate generally to the field of automation control and monitoring systems. More particularly, embodiments of the present disclosure relate to techniques for designing, monitoring, and troubleshooting automation control systems.
This section is intended to introduce the reader to various aspects of art that may be related to various aspects of the present techniques, which are described and/or claimed below. This discussion is believed to be helpful in providing the reader with background information to facilitate a better understanding of the various aspects of the present disclosure. Accordingly, it should be understood that these statements are to be read in this light, and not as admissions of prior art.
Design of industrial automation systems typically involves a designer writing portions of programmatic code for each device and/or object within the industrial automation system. Accordingly, design of even relatively simple industrial automation systems involves a designer having multiple windows of code open at a time and paying close attention to making sure the various portions of code properly function with one another. Though certain combinations of devices or objects may be used frequently together, when used in a particular industrial automation system, the designer writes code for each component as though they have never been used together before. Further, in existing design environments, the designer is free to use incompatible objects together, or form invalid connections between objects, without any warning that design actions taken may render the industrial automation system inoperable. This may result in designer spending a great deal of time reviewing previous designs and/or specifications of candidate objects or devices. If a problem arises, the designer is left on his or her own to troubleshoot the programmatic code for the industrial automation system without any guidance as to what the issue is and how to resolve it. Additionally, if designer wishes to employ a particular naming convention for objects or devices within an industrial automation system, the designer manually updates names of objects or devices when a name change is warranted by the naming convention. Accordingly, if the designer wishes to insert, remove, or relocate an object, the naming convention may dictate that the names of objects upstream and/or downstream of the change should be updated accordingly. Typically, a designer would manually update the names one by one. Further, if the designer wishes to change naming conventions, the designer manually derives new object names according to the new naming convention and then goes through and updates the names one by one. Not only is manually updating the names of objects in the industrial automation system time consuming and tedious, but when each component has an associated portion of programmatic code that may reference other components in the industrial automation system by name, manually updating component names may be subject to human error.
As a result of these factors, designers of industrial automation systems are a relatively small, highly trained, and highly experienced group. Accordingly, rather than designing industrial automation systems themselves, customers typically hire as a designer as a contractor to design an industrial automation system, or pay a vendor to design an industrial automation system and deliver the programmatic code for the customer to implement. Accordingly, the customer may have limited understanding of a design for an industrial automation system that it operates, making modifications to that industrial automation system difficult and resource intensive. Further, once a design is implemented, the resultant industrial automation system may be operated by an operator via a run-time environment. However, the run time environment may not provide the operator with avenues to make small adjustments or modifications to the industrial automation system to troubleshoot the industrial automation system when an issue arises. Instead, the industrial automation system may be taken offline and an engineer or designer brought in to diagnose and resolve the problem.
When designing industrial automation systems with existing design software, designers are free to use incompatible objects with one another, create invalid connections between objects, or otherwise take actions that do not comply with best practices or internal guidelines for designing industrial automation systems. If a designer takes multiple actions that do not comply with best practices or guidelines during design of an industrial automation system, issues that arise from taking these actions may not present themselves until later in the design process. Attempting to resolve the issue later in the design process, when the offending action is stacked under multiple subsequent design actions, may be time consuming and challenging to unpack and resolve. The disclosed techniques include applying a set of industrial automation system design rules to determine whether each action taken by a designer (e.g., adding an object to a project, drawing connections between objects, etc.) is allowed by the rules. The rules may act as “design guardrails” to help designers design better systems more efficiently, avoiding long periods of time spent troubleshooting. In some cases, designers may be entirely prevented from taking prohibited actions, whereas in other cases, designers having certain specified credentials may be able to override the warning message that a given design action does not follow the guidelines.
Typically, designers designing industrial automation systems manually select components they want to include in a system and define connections between those components. Accordingly, the designer may spend a significant amount of time reviewing previous designs of industrial automation systems and reviewing specification sheets of components to determine the suitability of a given component for use in the industrial automation system and the component's compatibility with other components within the system. The disclosed techniques include using AI and/or machine learning to consider actions taken by a designer in view of previous designs and known component specifications to suggest design actions, which the designer may accept or reject. Suggestions may include, for example, using specific models of components, adding connections between components, inserting additional components, replacing end of life components with replacement components, and so forth. When an action is suggested, the designer may choose whether to accept the suggestion or dismiss the suggestion. In some cases, the system may also provide the designer with contact information or hyperlinks to vendors or manufacturers of the suggested component, or other avenues to purchase the suggested component.
Typically, designers of industrial automation systems are left to their own devices when troubleshooting a design of an industrial automation system. Accordingly, designers are left to develop their own processes for troubleshooting designs. As a result, a designer's proficiency in troubleshooting a design depends upon the troubleshooting processes he or she has developed, as well as the experience of the designer in troubleshooting a wide range of circumstances. The disclosed techniques include using AI and/or machine learning to analyze a historical data set, identify when the instant issue has been encountered before, and suggest a remedial action to the designer. For example, the system may recognize that a problem has been encountered and use a historical data set to identify when the problem has been encountered in the past. The system may then consider what was done in those previous occurrences to remedy the problem. The system may then identify one or more possible remedial actions to address the problem. In some cases, the system may rank or otherwise evaluate the possible remedial actions to identify a likelihood of success for each possible remedial action. The system may then suggest one or more of the remedial actions to the designer. For example, the system may communicate to the designer, “The last time this problem occurred, we took this remedial action.” In some cases, the designer may have the option to automatically implement the suggested remedial action, see instructions for manually implementing the suggested remedial action, or dismiss the suggestion.
Industrial automation system software is typically separated into design-time environments and run-time environments. Design-time environments are used by designers to design industrial automation systems and develop the code that runs these systems. Typically, design of industrial automation systems occurs at a location remote from the industrial automation system. In contrast, run-time environments are used by operators, on site, to monitor the operation of the industrial automation system. Sometimes issues arise during operation of an industrial automation system that only require minor adjustments to resolve (e.g., reset component, adjust set point, adjust threshold, etc.). Run-time environments typically do not have the capability to make even minor adjustments to industrial automation systems. Accordingly, when an issue arises, the industrial automation system may be stopped and a designer or engineer brought in to resolve an issue that may only require minor adjustments. The disclosed techniques include a light engineering client environment, which is similar to a run-time environment, but includes some functionality of the design-time environment, allowing operators to make minor adjustments to an industrial automation system to resolve minor issues. In some embodiments, the light engineering client may also be capable of providing recommendations for how to resolve issues that arise.
When designing industrial automation systems, designers typically write a portion of code for each object or device in the industrial automation system. Though a group of components may be used together frequently (e.g., a tank, a valve, and a pump), for each instance in which the group of components is used, the designer has to write new code defining the interactions between the components. This can be tedious and resource intensive. The disclosed techniques include using component libraries that include objects that are programmed to interact with one another in known ways. Accordingly, the designer may drag components from a library into a design window, and the system may understand how the components are intended to interact with each other. Using the example from above, a user may drag a tank, a valve, and a pump into a design environment, and the system may automatically arrange the components and connect the components accordingly to how they are frequently implemented. Each component in a library may have a respective portion of code that defines the operation of the respective component. Based on how the components are arranged and connected in the design window, the system may then generate or modify program code for the components so the designer is not burdened with writing the code for the system.
Typically, if a customer or designer wishes to use a naming convention for one or more industrial automation systems, it is the responsibility of the designer to manually edit the names of components in libraries and/or components used in industrial automation systems. Thus, creating a new naming convention and updating the names of existing components to adhere to the naming convention can be time consuming. Additionally, some frequently used naming conventions may give unique names to each instantiation of a component within an industrial automation system. In such a naming convention, the names may include fields that increase or decrease along a flow path of the industrial automation system (e.g., motor_1, motor_2, motor_3, etc.). However, when a component is inserted into, removed from, or rearranged within, the middle of an industrial automation system, it may be up to the designer to manually adjust the names of the other components in the industrial automation system to maintain the naming convention. Because this is tedious and time consuming, a designer may choose to break the naming convention or not make the modification to the industrial automation system, even though it would improve the performance of the industrial automation system, because of the work involved in making the modification. The disclosed techniques include using AI and/or machine learning to learn new naming conventions and propagate the new naming convention through one or more industrial automation systems and/or libraries, and to automatically adjust component names to maintain a naming convention when components are added, removed, or rearranged within the system.
Writing project code files for industrial automation systems is typically outsourced to contractors or third parties who are paid to deliver a project code file for an industrial automation system and then are subsequently not involved in the operation of the industrial automation system. Accordingly, the person who created the project code file for a particular industrial automation system is frequently not available to make adjustments to the project code file or answer questions about the project code file. Accordingly, while the customer that paid to have the project code file generated may have possession of the project code file, the customer may not be intimately familiar with the structure of the project code file (e.g., the structure of the project code file, the quality of the project code file, etc.), and may not have the ability to modify the project code file. The disclosed techniques include a project code file analysis algorithm that may be applied to project code files and generate a report for the project code file. The project code analysis algorithm may be configured to determine a structure of the project code file, create a visualization of the project code file, identify dead code (i.e., code that is not executed) within the project code file, identify dead ends within the project code file, identify inefficient tag usage, identify parallel concurrent tasks, consider the validity of connections between components, identify overload situations, calculate a complexity score for the code, determine whether the project code file meets an acceptance criteria, and so forth. Further, once the project code file has been analyzed, a database may be updated with data from the analysis. As the database is populated with data from analyzing numerous project code files, adjustments may be made to the project code analysis algorithm, such that the project code analysis algorithm improves over time.
These and other features, aspects, and advantages of the present embodiments will become better understood when the following detailed description is read with reference to the accompanying drawings in which like characters represent like parts throughout the drawings, wherein:
One or more specific embodiments will be described below. In an effort to provide a concise description of these embodiments, not all features of an actual implementation are described in the specification. It should be appreciated that in the development of any such actual implementation, as in any engineering or design project, numerous implementation-specific decisions must be made to achieve the developers' specific goals, such as compliance with system-related and business-related constraints, which may vary from one implementation to another. Moreover, it should be appreciated that such a development effort might be complex and time consuming, but would nevertheless be a routine undertaking of design, fabrication, and manufacture for those of ordinary skill having the benefit of this disclosure.
When introducing elements of various embodiments of the present disclosure, the articles “a,” “an,” “the,” and “said” are intended to mean that there are one or more of the elements. The terms “comprising,” “including,” and “having” are intended to be inclusive and mean that there may be additional elements other than the listed elements.
As shown, each subsystem may include one or more combinations of components, referred to as modules. For example, the first industrial subsystem 12 shown in
The schematic of the industrial system 10 may be displayed to a user within a dashboard on a display of a computing device (e.g., a HMI, a programming terminal, a desktop computer, a tablet, a mobile device, a smartphone, etc.) that may allow a user to design, configure, modify, monitor, and/or troubleshoot the industrial system 10 or one or more of the industrial subsystems 12, 14, 16, 18 of the industrial system 10.
The industrial system 10 may be configured to run a process 58. For example, the process 58 may include a compressor station, an oil refinery, a batch operation for making food items, a mechanized assembly line, and so forth. Accordingly, the process 58 may include a variety of operational components, such as electric motors, valves, actuators, sensors, or a myriad of manufacturing, processing, material handling, and other applications. Further, the process 58 may include control and monitoring equipment (e.g., an industrial controller 20) for regulating process variables through automation and/or observation. The control/monitoring device 20 may include, for example, automation controllers, programmable logic controllers (PLCs), programmable automation controllers (PACs), or any other controllers used in automation control. The illustrated process 58 may include one or more sensors 60 and/or one or more actuators 62. The sensors 60 may include any number of devices adapted to provide information regarding process conditions, such as temperature sensors, pressure sensors, position sensors, motion sensors, accelerometers, flow sensors, chemical sensors, and so forth. Similarly, the actuators 62 may include any number of devices adapted to perform a mechanical action in response to an input signal (e.g., linear motors, servos, electric motors, pumps, etc.).
As illustrated, the sensors 60 and actuators 62 are in communication with the control/monitoring device 20 (e.g., industrial automation controller) and may be assigned a particular address in the control/monitoring device 20 that is accessible by the computing devices 52, via the application integration platform 56 and database 54. In some embodiments, the sensors 60 and actuators 62 may be in communication with one or more of the computing devices (e.g., an HMI), via the control/monitoring device 20, to operate equipment associated with the process 58. Indeed, the sensors 60 and actuators 62 may be utilized within process loops that are monitored and controlled by the control/monitoring device 20 and/or one or more of the computing devices 52 (e.g., an HMI). Such a process loop may be activated based on process inputs (e.g., input from a sensor 60) or direct inputs (e.g., operator input received through the computing device 52).
The control/monitoring device 20 and the database 54 may be in communication via a communication link 64, the database 54 and the application integration platform 56 may be in communication via a communication link 64, and the application integration platform 56 and the computing devices 52 may be in communication via communication links 64. Note that, as shown and described with regard to
As the process 58 operates, the sensors 60 and actuators 62 acquire/produce operational data over time, such that the operational data is provided to the control/monitoring device 20. The operational data indicates the current status of the sensors 60 and actuators 62, such as parameters, pressure, temperature, speed, energy usage, operational equipment effectiveness (OEE), mean time between failure (MTBF), mean time to repair (MTTR), voltage, throughput volumes, times, tank levels, or any other performance status metrics. In some embodiments, the operational data may include dynamic charts or trends, real-time video, or some other graphical content. The control/monitoring device 20 is capable of transferring the operational data over the communication link 64 to the database 54, the application integration platform 56, and/or the computing devices 52, typically via a communication links 64, which make up a communication network. The database 54 may be stored on one or more memory devices on premises, on a remote server, or in the cloud (e.g., public cloud, private cloud, etc.). Accordingly, the database 54 may reside in a single device or may be distributed among multiple memory devices.
The application integration platform 56 may include a processing system, a communication transceiver, a router, a server, a data storage system, and a power supply, or some combination thereof. As with the database 54, the application integration platform 56 may reside in a single device or may be distributed across multiple devices. The application integration platform 56 may be a discrete system or may be integrated within other systems, including other systems within industrial automation environment 50. In some examples, the application integration platform 56 could comprise a FACTORYTALK VANTAGEPOINT server system provided by Rockwell Automation, Inc.
The communication links 64 over which data is exchanged between the process 58, the sensors 60, the actuators 62, the control/monitoring device 20, the database 54, the application integration platform 56, and the computing devices 52 could utilize metal, air, space, optical fiber such as glass or plastic, or some other material as the transport medium, including combinations thereof. Further, the communication links 64 could include one or more network elements such as routers, gateways, telecommunication switches, servers, processing systems, or other communication equipment and systems for providing communication and data services. These communication links 64 may use various communication protocols, such as time-division multiplexing (TDM), Internet Protocol (IP), Ethernet, telephony, optical networking, packet networks, wireless mesh networks (WMN), local area networks (LAN), metropolitan area networks (MAN), wide area networks (WAN), hybrid fiber coax (HFC), communication signaling, wireless protocols, communication signaling, peer-to-peer networking over Bluetooth, Bluetooth low energy, Wi-Fi Direct, near field communication (NFC), or some other communication format, including combinations thereof. The communication links 64 could be direct links or may include intermediate networks, systems, or devices.
The computing devices 52 may be representative of any computing apparatus, system, or systems on which the disclosed techniques for designing, configuring, modifying, monitoring, and/or troubleshooting industrial automation systems 10 may be suitably implemented. The computing devices 52 provide may be used as either servers or client devices in some implementations, although such devices could have alternative configurations. The computing devices 52 could include, for example, mobile computing devices, such as cell phones, tablet computers, laptop computers, notebook computers, and gaming devices, as well as any other type of mobile computing devices and any combination or variation thereof, whether designed specifically for industrial automation applications (e.g., HMI), or not. The computing devices 52 may also include desktop computers, server computers, and virtual machines, as well as any other type of computing systems, variations, or combinations thereof. In some implementations, the computing devices 52 could include a mobile device capable of operating in a server-like fashion which, among other uses, could be utilized in a wireless mesh network.
As shown in
The memory device 68 may include any computer-readable storage media capable of storing software 70 and readable by processor 66. The memory device 68 may include volatile and nonvolatile, removable and non-removable media implemented in any method or technology for storage of information, such as computer-readable instructions, data structures, program modules, or other data. The memory device 68 may be implemented as a single storage device but may also be implemented across multiple storage devices or subsystems co-located or distributed relative to each other. The memory device 68 may include additional elements, such as a controller, capable of communicating with the processor 66. Examples of storage media include random-access memory, read-only memory, magnetic disks, optical disks, flash memory, virtual memory and non-virtual memory, magnetic cassettes, magnetic tape, magnetic disk storage or other magnetic storage devices, or any other medium which can be used to store the desired information and that may be accessed by an instruction execution system, as well as any combination or variation thereof, or any other type of storage media.
In operation, in conjunction with the user interface 74 and the display 76, the processor loads and executes portions of software 70 to render a graphical user interface for one or more applications 80 for display by display 76. The software 70 may be implemented in program instructions and among other functions may, when executed by the processor 66, cause an HMI associated with the industrial automation system to display a plurality of graphical elements that represent one or more industrial devices. The software 70 may include, for example, an operating system 78 and one or more applications 80. For example, the computing devices 52 may include one or more applications 80 for designing, configuring, modifying, monitoring, and/or troubleshooting the industrial system 10. Examples of operating systems include Windows, iOS, and Android, as well as any other suitable operating system. The software 70 may also include firmware or some other form of machine-readable processing instructions (e.g., non-transitory) executable by processor 66. In general, the software 70 may, when loaded into the processor 66 and executed, transform the computing device 52 from a general-purpose computing device into a special-purpose computing system customized to facilitate designing, configuring, modifying, monitoring, and/or troubleshooting industrial automation systems 10. For example, encoding software 70 on the memory device 68 may transform the physical structure of the storage media of the memory device 68. The specific transformation of the physical structure may depend on various factors in different implementations of this description. Examples of such factors may include, but are not limited to, the technology used to implement the storage media of the memory device and whether the computer-storage media are characterized as primary or secondary storage.
In some examples, if the computer-storage media are implemented as semiconductor-based memory, software 70 may transform the physical state of the semiconductor memory when the program is encoded therein. For example, software 70 may transform the state of transistors, capacitors, or other discrete circuit elements constituting the semiconductor memory. A similar transformation may occur with respect to magnetic or optical media. Other transformations of physical media are possible without departing from the scope of the present description, with the foregoing examples provided only to facilitate this discussion.
It should be understood that the computing device 52 is generally intended to represent a computing system with which software 70 is deployed and executed in order to implement applications 80 for designing, configuring, modifying, monitoring, and/or troubleshooting industrial automation systems 10. Further, the application integration platform 56 may run on one or more computing devices 52, and computing devices 52 may store and maintain the database 52. However, the computing system 52 may also represent any computing system on which software 70 may be staged and from which software 70 may be distributed, transported, downloaded, or otherwise provided to yet another computing device 52 for deployment and execution, or yet additional distribution. For example, computing device 52 could be configured to deploy software 70 over the internet to one or more client computing systems for execution thereon, such as in a cloud-based deployment scenario.
The communication interface 72 may include communication connections and devices that allow for communication between the computing devices 52 or services, over a communication network or a collection of networks. In some implementations, the communication interface 72 receives dynamic data over the communication network via one or more communication links 64. Examples of connections and devices that together allow for inter-system communication may include network interface cards, antennas, power amplifiers, RF circuitry, transceivers, and other communication circuitry, and so forth.
The user interface 74, which may or may not include the display 76, may include a voice input device, a touch input device for receiving a gesture from a user, a motion input device for detecting non-touch gestures and other motions by a user, and other comparable input devices and associated processing elements capable of receiving user input from a user. Output devices such as the display 76, speakers, haptic devices, and other types of output devices may also be included in the user interface 74. The user interface 74 may also include associated user interface software executable by processor 66 in support of the various user input and output devices discussed above. Separately or in conjunction with each other and other hardware and software elements, the user interface software and devices may provide a graphical user interface, a natural user interface, or any other kind of user interface. The user interface 74 may be omitted in some implementations. Along these lines, the computing devices 52 may also include additional devices, features, or functionality not discussed here for purposes of brevity.
Design-Time, Run-Time, and Light Engineering Client Environments
The computing devices 52 may include applications 80 that enable a user to design, configure, modify, monitor, and/or troubleshoot industrial automation systems 10. The computing devices 52 may run (e.g., execute) a single application 80 or multiple applications 80 that provide a design-time environment for designing, configuring, modifying, and making major changes to the industrial automation systems 10, a run-time environment for monitoring the operations of one or more components within the industrial automation systems 10, and a light engineering client environment for troubleshooting, or otherwise making minor changes (e.g., relative to the changes made in the design-time environment) to the industrial automation systems 10.
The framework 50 includes three interrelated software environments that can reside on a single system (e.g., computing device), or be distributed among multiple computing devices. Specifically, a design-time environment 102 permits a designer (e.g., a human user) to design, configure, and make modifications to the industrial automation systems. A run-time environment 104 enables an operator (e.g., a human user) to interact with an application, such as a process during run-time (e.g., during use of the interface, typically during interaction with or observance of a process in operation). For example, an industrial automation system may be graphically represented with run-time information to an operator via the run-time environment 104 on a display (e.g., computing device or interface device screen). A light engineering client 106 enables an operator to troubleshoot and/or make limited adjustments to the process in operation when a problem is encountered during operation or the operator wishes to make adjustments to the system without shifting to the design-time environment 102. The environments interact as described below, in innovative ways to provide greatly enhanced programming via a computing device, such that the operation of the computing device itself is more efficient.
The run-time environment 104 includes or provides access to objects 108. The objects 108 are software components that may include any accessible or configurable element in a software environment. For example, the objects 108 may include software components that are managed by the run-time environment 104. Accordingly, it should be understood that “objects” may include any components or self-sufficient programs that can be run as quasi-independent elements. Objects generally include four features: properties, methods, connections (or connection points) and communications interfaces. Properties, in this context, are attributes that can be adjusted, such as to define an image or representation of the element in a screen view, as well as its location on the screen, and so forth. In this context, a method is an executable function (sometimes referred to herein as the element's “functionality” or “state engine”), and defines an operation performed by execution of the element. A connection, in this context, is a link between elements, and can be used to cause data (read from a memory or written to a memory) to be sent to another element.
Specific examples of objects 108 may include software pushbuttons, timers, gauges, PLC communication servers, visualizations (such as screens that illustrate state of components within the automation control and monitoring system), and applications. In general, virtually any identifiable function may be configured as such an element. For example, such elements may include controllers, input/output (I/O) modules, motor control centers, motors, human machine interfaces (HMIs), operator interfaces, contactors, starters, sensors, drives, relays, protection devices, switchgear, compressors, network switches (e.g., Ethernet switches, modular-managed, fixed-managed, service-router, industrial, unmanaged, etc.), scanners, gauges, valves, flow meters, and the like. Moreover, as discussed below, such elements may communicate with one another to perform a wide range of display, monitoring operations and control functions. It should be noted that objects 108 do not require special limitations for supporting a design mode. Also, while elements associated with an image are quite useful, particularly for visualizations, many elements may not have a visual representation, but may perform functions within an HMI or other computing device, such as calculations, or even management and data exchange between other elements.
The run-time environment 104 typically operates using a communications subsystem 110 adapted to interconnect the objects 108. In practice, the communications subsystem 110 may be thought of as including the connections of the objects 108. However, it may include a range of software, hardware and firmware that send data to and receive data from external circuits, such as automation controllers, other computers, networks, satellites, sensors, actuators, and so forth.
The run-time environment 104 typically operates using a behavioral subsystem 112, which is adapted to manage the behavior of the objects 108. For example, responsibilities of the behavioral subsystem 112 may include place and move objects, modify objects, group objects on interchangeable screens, save and restore screen layouts, manage security, save and restore connection lists, and supply remote access to the run-time environment 104. Such behaviors may be defined as part of the profile (i.e., the “method” or “state engine”) of each object.
The design-time environment 102 includes an advanced implementation of the behavioral subsystem 112 that facilitates direct or indirect manipulation of the run-time environment 104, without impeding or compromising the behavior of the run-time environment 104. That is, design and reconfiguration of the objects 108 can be done while an interface is operating. In some instances, the behavioral subsystem 112 may extend access to the run-time environment 104 via remote provision of the design-time environment 102, such as in a conventional browser or an application run on a computing device. The behavioral subsystem 112 allows a designer to interact with and change aspects of the run-time environment 104 of an HMI via a separate computing device (e.g., a remote programming terminal) by serving the design-time environment 102 or aspects thereof to the programming terminal from the HMI. For example, an HMI communicatively coupled to a laptop via a wired or wireless network connection may provide a user with configuration capabilities by serving up a specific design-time environment 102 to the laptop via the network.
By facilitating changes to objects 108, the design-time environment 102 allows the designer to make interchangeable design-time models or specialized implementations of the behavioral subsystem 112. A specific example of a design-time implementation of the behavioral subsystem 112 includes a Web-based or application-based design-time environment 102, which extends access to a run-time environment 104 on an HMI or other computing device via a wired or wireless connection between the HMI and a remote device. The Web-based or application-based design-time environment 102 facilitates management of the objects without compromising run-time performance or security. In one implementation, the behavioral subsystem 112 gives designers the ability to manipulate aspects of the run-time environment 104 using a Web browser or application that is capable of accessing a related interface or HMI.
As described in more detail below, the light engineering client environment 106 may bring aspects of the design-time environment 102 into an environment that has more in common with the run-time environment 104 than the design-time environment 102. As previously described, the design-time environment 102 is primarily used by a designer to design, configure, and/or modify the industrial automation system. After the industrial automation system has been configured, the designer likely moves on to other projects. In contrast, the run-time environment 104 is primarily used by an operator within an industrial automation environment to monitor the industrial automation system as a process runs. Use of the design-time environment 102 may involve the writing and/or manipulation of computer code, which may be largely absent from the run-time environment 104. As such, the design-time environment 102 and the run-time environment 104 may be designed for different users having different skillsets and different capabilities. However, if a problem arises during operation of the industrial automation system 10 that is relatively simple to resolve, it may not be an efficient use of resources to stop the operation of the industrial automation system 10, exit the run-time environment 104, and have a designer or engineer diagnose the problem and resolve the problem using the design-time environment 102. Accordingly, if a problem arises, the light engineering client environment 106 may be available to the operator to troubleshoot the problem, attempt to diagnose the problem, and use the more limited design capabilities of the light engineering client environment 106 to address the problem and resume operations with minimal downtime. If the operator is unable to resolve the problem via the light engineering client environment 106, a designer, engineer, or service technician may be brought in to diagnose and resolve the issue via the design-time environment 104 or the like.
Design-Time Environment Dashboard
The information displayed within the primary window 206 is dependent upon which of a plurality of tabs 210 extending along a top edge of the primary window 206 is selected, as well as selections within the explorer window 204. As shown in
Creating New Projects and Editing Existing Projects in the Design-Time Environment
The start window 300 provides a user with shortcuts to build out the project. In the embodiment shown in
The system status window 302 displays one or more system status indicators of the system. Because the project is new and does not yet have any components, the system status window 302 does not display a system status. Similarly, because the project is new and no devices or libraries have been added to the project, the device window 304 and library window 306 do not display any devices or libraries, respectively. The device window 304 displays an add device button 314 that, when selected, allows the user to select devices to add to the project. Similarly, the library window 306 displays an add library button 316 that, when selected, allows the user to select one or more libraries to add to the project.
The team window 308 facilitates communication between members of a team that are working on the project. As shown, the team window 308 includes a messages tab 318, an activity tab 320, and a members tab 322. The information displayed in the team window 308 is controlled by which tab is selected. In the screenshot shown in
Though
The dashboard 200 shown in
The devices window 304 displays a scrollable list of devices within the project. Each device listing may include a name given to the device, a model name, a status, and so forth. As shown, the top of the devices window 304 may display the total number of devices within the project, as well as the add device button 314, allowing a user to add devices to the project. Selection of a device within the devices window 304 may display more detailed information about the selected device.
The library window 306 displays one or more libraries of components that have been imported or otherwise linked to the project. For example, the libraries may include libraries created for the project by the customer, public and/or private libraries created by a service provider, and public and/or private libraries created by a third party. The add library button 316, allows a user to add libraries to the project. Selection of a library within the library window 306 may display more detailed information about the selected library.
In the embodiment shown in
In the instant embodiment, the library is grouped by definitions, add on instructions (AOIs), add on graphics (AOGs) and user-defined data types (UDTs). As a user navigates the library and selects and item, the primary window 206 may update to display more information about the selected item. It should be understood, however, that the specific contents of the library shown in
Historical data may also be referenced for determining compatibility and/or interaction between objects. Accordingly, when a user selects a set of commonly combined objects for a project, the library may anticipate how those objects are going to interact with each other and may as far as generating or retrieving code that defines the operation of the objects and the interaction between the objects so the designer does not have to write the code from scratch. In some embodiments, the automatically generated or retrieved code may be accessible by the designer for editing to fine tune the code to the intended use.
Because populating a library for a complex project from scratch is a substantial undertaking for the team working on the project, in some embodiments, a service provider may populate a library of items to be used by its customers.
Additionally, the customer may populate libraries intended to be used across multiple projects. For example, an oil and gas company, a food processing company, or any other entity may design and build multiple facilities that perform the same or similar functions in different geographical locations. Accordingly, selection of the customer process library tab 454 may cause the primary window 206 to display a navigable library (e.g., expandable/collapsible listing) populated by the customer to be used in multiple projects and linked to by the current project.
As previously described, a user may navigate through the various libraries (e.g., the project library, the service provider library, the customer process library, etc.) to arrive at a specific item, or find the specific item via the devices tab 266. Upon selection of the item, the primary window updates to display more details information about the selected item. For example,
Drag and Drop Design Interface
In the design-time environment, the dashboard 200 utilizes a drag-and-drop style interface that allows a user to drag items from a library into a design window. Previously, to configure a group of items to work with one another, a user would open a programming window for each item in the group and individually write programming code specifying operation of the item and how the item interacts with other items in the group (e.g., inputs, outputs, settings, algorithms, routines, and so forth). Though such a system may work well for users that are proficient in programming and are looking to program an item or a group of items to perform a somewhat uncommon task, for other users, such a system is challenging, time consuming, inefficient, and prone to human error.
As shown in
After an area has been selected, the design window 550 updates to show only the selected area. In the instant embodiment, the user has selected the guide roll area 554, so the design window 550 has been updated to show the guide roll area 554.
After the roller control object 600 has been placed in the design window 500, other objects may be selected and dragged into the design window 500 to join the roller control object 600 in the guide roll area 554.
After multiple objects have been placed in an area, the inputs, outputs, statuses, and other interface elements of the object may be identified and displayed.
The system may be configured to monitor actions by the user in designing the system and reference historical data to anticipate future actions and make suggestions. These may include, for example, adding one or more objects, adding one or more connections, specific configurations of objects, etc. In some embodiments, the system may reference historical data to find previous instances of the monitored actions taking place. The system may then, based on the historical data, identify a set of possible next actions. The set of next actions may then be assigned a probability based on the historical data. For example, the system may consider what percentage of instances in the historical data set when a specific combination of objects were being used that the next object added to the project was object A. In some embodiments, when the probability of a specific possible next action exceeds some threshold value, the system may generate a recommendation for the specific possible next action. In other embodiments, at certain intervals or upon certain actions taking place, the system may select the specific possible next action having the highest probability and generate a recommendation for the specific possible next action.
Further, as with the incompatible objects described above, the system may utilize historical data, compatibility data, preference data, and/or a set of rules to determine when connections provided by the user violate connection rules or are otherwise invalid.
In addition to objects from the definitions window 564, the user can drag objects from other windows into the design window.
As previously discussed, each object in the library may have a corresponding file of computer code or portion of computer code that defines object and the object's interaction with other objects within the library. When the design of a project is complete, or at intermittent time periods during development, the system may take the portions of code for each object in the project and modify the code based on the other objects in the project such that each object interacts with the other objects in the project as depicted in the design window 550. The modified portions of code may then be combined into a project code file that defines the operation of the entire project. By automatically generating the project code file, writing all of the code for the project code file is no longer the responsibility of the designer.
Customer-Specific Naming Conventions
A user may develop custom customer-specific naming conventions for objects in the design-time environment, via the dashboard 200, which may then be propagated through one or more projects and/or one or more libraries used by the corresponding customer. That is, different clients may use different naming conventions (e.g., formats) to designate an identity of each device. For example, motors may be designated as “MOTOR_1,” “MOTOR_2,” and so on. In addition, the naming convention may provide some information regarding a hierarchical level of the respective device. For instance, for systems that are organized according to areas, sections, and devices, motors may be designated as “SECTION1_MOTOR2.” Updating libraries and/or projects of objects to adhere to naming conventions may be resource intensive, tedious, and prone to human error. Accordingly, the following techniques may be used to learn a naming convention and apply the naming convention to one or more groups of objects by giving the objects new names that comply with the new naming convention. Additionally, as the number of devices in a system grows, it becomes increasingly challenging to add new devices into an existing system's naming convention. That is, a new motor installed in a system that should be associated with a particular number because of its location may be provided a different number because of the particular number is already used to represent another motor. However, by employing the embodiments described herein, any device may receive the correct or appropriate naming designation and name changes for other relevant devices may be automatically incorporated throughout the system.
By way of example,
In other embodiments, the user may provide a definition or a partial definition of the underlying naming convention. For example, the user may define the various fields of a naming conventions, open or closed lists of examples for possible values for one or more fields, and/or provide rules for how the naming convention is applied to a project, library, etc. For example, the user may define a naming convention as including an object type field, a model name/number field, and/or an instantiation number field, where the object type field represents a respective object type (e.g., motor, controller, routing, pump, valve, etc.), the model name/number field represents the model name/number of the device, and the instantiation number field represents the number of instantiations of the object type within the area or the project. In some embodiments, the naming convention may also include an area field representing the area of the project in which the object is disposed. It should be understood, however, that these are merely examples and that any naming convention the user desires may be used. In some embodiments, fields may be omitted from an object's name when the object is in the library, and then added to the name of an instantiation of the object when added to a project. For example, the instantiation and/or area fields may be omitted from an object's name when the object is in a library, as the object in the library is not tied to a particular instantiation or area. However, when an instantiation of the object is placed in a project, the name of the instantiation of the object may appear with an instantiation field, an area field, and/or one or more additional field. This is described in more detail below with regard to
The user may also provide rules or guidelines for how the naming convention is to be implemented. For example, the user may specify that the instantiation number field counts upward for the whole project or resets for each area. Further, the user may specify that the instantiation field may be omitted for the first object of a given object type until a second object of the object type is added, at which point the instantiation field for the first object is included as having a value of “1” and the instantiation field for the second object is given a value of “2”.
At block 624, a machine learning algorithm may be applied to the received example names and/or naming convention definitions to derive one or more rules for defining the naming convention. In some embodiments, the machine learning algorithm may also use otherwise known information about the objects associated with the example object names (e.g., object type, instantiation number, area, etc.) when deriving the rules for defining the naming convention. For example, the machine learning algorithm may recognize alphanumeric character strings that correspond to known object types, known area names, known instantiation numbers, known component manufacturers, known part model names/numbers, known serial numbers, other known alphanumeric character strings, and/or known abbreviations of these known alphanumeric character strings. In some embodiments, because naming conventions may follow a handful of common forms, the naming convention may be identified with an acceptable level of confidence (e.g., 70%, 80%, 90%, etc.) based on a small number of example names.
In some cases the underlying naming convention may even be identified with an acceptable level of confidence based on a single example. For example, the design window 550 in the dashboard 200 shown in
At block 626, other devices to which the naming convention applies are identified. This may include, for example, searching the instant project, one or more other projects, the instant library of objects, one or more other libraries of objects, objects corresponding to industrial automation devices connected to the network, etc. The naming convention may be determined to apply to an object or industrial automation device based on the item being of a known object type, the item being used in an area of a project, used in a specific project, existing in a specific library, the data for all of the fields in the naming convention being known for an object, etc. In some embodiments, once the devices are identified, the devices in question may be presented to a user (e.g., via a GUI) to confirm that the user wishes to apply the naming convention to the identified devices. In some embodiments, if the user wishes not to apply the naming convention to an identified device, the machine learning algorithm may be updated to reflect that the user wishes to exclude the identified devices from the naming convention.
At block 628, the derived rules defining the naming convention are used to generate a derived new name for the one or more identified devices. For example, in the example given above with respect to
At block 644, a name for the object instantiation is determined according to a naming convention. In some embodiments, the name of the instantiation may be the same as appears in the library. In other embodiments, the name of the particular instantiation of the object may be different from the name shown in the library. For example, fields may be added to the name (e.g., area field, instantiation number field, etc.), fields may be changed, fields may be removed, etc. to reflect the location of the object instantiation within the project and the object instantiation's interactions with other objects. For example, an object for a motor may appear as “Motor” in the library, but when the object is inserted into a project, the name for the particular instantiation of the object may be “Motor_1” or “Section1_Motor2”. At block 646, an icon for the object and the determined name for the object instantiation, or an abbreviation of the determined name for the object instantiation, may be displayed within the design window. The user may then provide inputs adjusting the position of the object within the design window and specifying how the object is to interact with other objects in the project.
At block 648, the underlying portion of code for the instantiation of the object may be updated to reflect the new name. For example, the portion of code may include place holders for the name for the object instantiation. The portion of code may be searched for the place holders, which are then replaced with the new name for the object instantiation. In other embodiments, the portion of code for the object instantiation may include one or more instances of an old name for the object instantiation. In such embodiments, the portion of code may be searched for instances of the old name. Once an instance of the old name is identified, the portion of code may be modified to replace the instance of the old name with the new name. Further, in some embodiments, the underlying portions of code for the other objects in the project may be updated to reflect the new name of the instantiation of the object. For example, the portions of code associated with other objects in the project may reference the instantiation of the object (e.g., receive input from object instantiation, send output to object instantiation, receive control signal from object instantiation, send control signal to object instantiation, receive set point from object instantiation, send set point to object instantiation, receive measurement value from object instantiation, send measurement value to object instantiation, and so forth.). In such embodiments, the portions of code associated with the other objects in the project may be searched for references to the object instantiation (e.g., place holders, the old name for the object instantiation, etc.) and replaced with the new name for the object instantiation.
As previously described, as the number of devices in a system grows, maintaining a logical naming convention may be difficult as objects are added, removed, and/or rearranged. A logical naming convention may dictate, for example, that values for one or more fields within a name increase or decrease with each instantiation along a flow path of a system. In one embodiment, a value for a field of a first object upstream of a second object may be higher than that of the second object. In another embodiment, the value for the field of the first object upstream of the second object may be lower than that of the second object. As such, the value for the field may count upward or downward in the direction of flow. The direction of flow may refer to the flow of product within the system, the flow of data within a system, the flow of logic within the system, the actual physical arrangement of components within the system, the sequential flow of steps of a process, and so forth. For example, a project may include motors named “Motor_1”, “Motor_2”, “Motor_3”, and “Motor 4”. If a user adds a new motor between Motor_2 and Motor_3, based on the location of the new motor, the logical name for the new motor may be “Motor_3” and, as such, the names of Motor_3 and Motor_4 should be adjusted accordingly (e.g., Motor_3 becomes Motor_4, and Motor_4 becomes Motor_5). However, adjusting the names of the other components and the underlying associated portions of code may be extremely resource intensive, tedious, and prone to human error, especially for systems with many more than 4 or 5 motors. Accordingly, the likely result is that the user names the new motor “Motor_5” and locates the motor between Motor_2 and Motor_3, or decides not to add the additional motor at all, even though it would improve the operation of the system.
Accordingly, the disclosed techniques may be used to adjust the names of other objects in a project based on the addition, removal, or relocation of an object.
At block 664, a name for the object instantiation is determined according to a naming convention, based on the object instantiation's position within the design window relative to other objects. The name of the instantiation may be the same as appears in the library, or the name of the particular instantiation of the object may be different from the name shown in the library. For example, the name of the particular instantiation may include fields omitted from the listing of the object in the library (e.g., area field, instantiation number field, etc.). In other embodiments, fields may be changed, fields may be removed, etc. to reflect the location of the object instantiation within the project and the object instantiation's interactions with other objects.
At block 666, a determination is made that the names of one or more other object instantiations within the project should be revised to account for the new object instantiation. For example, values for some fields may be adjusted to account for the insertion of the new object instantiation. In the example described above, a user adds a new motor between Motor_2 and Motor_3 of a system containing Motor_1, Motor_2, Motor_3, and Motor_4. Based on the location of the new motor, it is determined that the new motor should be named “Motor_3” and the names of Motor_3 and Motor_4 adjusted accordingly to become becomes Motor_4 and Motor_5, respectively. At block 668, new names for the surrounding objects are generated based on the insertion of the object instantiation. At block 670, the underlying portions of code for the instantiation of the object and one or more other object instantiations in the project may be updated to reflect the new names for the object instantiations and the other object instantiations in the project. For example, the portions of code for the various object instantiations may include place holders for the names of object instantiations or old names of the object instantiations. Accordingly, the portion of code may be searched for the place holders or old names, which are then replaced with the new names for the object instantiations.
Though the above techniques are for situations in which an object instantiation has been added to a project, it should be understood that similar techniques may be used when an object instantiation is removed from a project, modified, or relocated within a project such that the names of other object instantiations within the project should be changed. For example, when an object instantiation is removed from the project, the names for other object instantiations within the project, and portions of code referencing those object instantiations, may be revised with new names. Using the example described above, if a user adds removes Motor_2 from a system containing Motor_1, Motor_2, Motor_3, and Motor_4. The names of Motor_3 and Motor_4 may be adjusted accordingly to become Motor_2 and Motor_3, respectively. Correspondingly, when an object instantiation is relocated within the project, the names for other object instantiations within the project, and portions of code referencing those object instantiations, may be revised with new names. Continuing with the same example described above, if a user moves Motor_2 within a system containing Motor_1, Motor_2, Motor_3, and Motor_4 to a location between Motor_3 and Motor_4, the names of Motor_2, Motor_3, and Motor_4 may be adjusted accordingly such that Motor_3 becomes Motor_2, and Motor_2 becomes Motor_3. Accordingly, the to reduce the tedious workload on designers to rename objects within a system in response to addition, removal, or relocation of objects, which is also prone to human error, and to incentivize designers to implement designs of systems that are going to maximize performance, the names of components within a project and the underlying portions of code may be automatically updated in response to the addition, removal, or relocation of an object within the project.
Design Environment View Options
In the design-time environment, the dashboard 200 may be configured to display projects in several different view styles that are selectable by the user. In
A user may toggle between various available view options using the drop-down view menu 708.
Periodically, the system may generate an alarm, an alert, or an informational notification (collectively referred to as notifications) for a specific component or group of components. As shown in
In some embodiments, the logic view style may include a logic diagnostics tool that occupies a logic diagnostics tool window 812 within the primary window 206. The logic diagnostics tool may run one or more scripts or algorithms and/or apply a set of rules to analyze the logic within a project. In some embodiments, the scope of the logic diagnostics tool may be limited to a single selected component. In other embodiments, the logic diagnostics tool may consider a module having a number of components, multiple modules of components, an area, multiple areas, a whole project, etc. The logic diagnostics tool window 812 includes a logic diagnostics tool banner 814, which provides a summary 816 of results of a logic diagnostics run, including for example, the number of errors, the number of warnings, the number of informational messages, etc. A user may select specific items within the summary 816 to view more detailed information. Below the logic diagnostics tool banner 814, the logic diagnostics tool window 812 displays the detailed results 818 of the logic diagnostics run.
Similarly, when the tags tab 804 is selected, the primary window 206 updates to display the various tags assigned to the selected component. When the HMI tab 806 is selected, the primary window 206 displays information about the HMI associated with the selected component and interactions between the selected component and the HMI. When the alarms tab 808 is selected, the primary window 206 displays information about the various alarms associated with the selected component.
A user may also select multiple objects in the explorer window 204 to create a split screen view within the primary window 206.
Manipulating Existing Projects
Creating areas for a project was shown and described with regard to
The dashboard 200 may also be used to generate and/or edit tags for a project.
A tag is a text-based name for an area of a component's memory in which specific data is sported. Thus, creating a tag is somewhat like creating a partition within the memory. Before tags, data location was identified by an network or memory address. Thus, using tags within a project is a mechanism for allocating memory of components within the system. Typically, the amount of memory allocated to a tag varies from tag to tag, but is at least four bytes. As shown, the tags/parameters editing window 952 includes a tag table 954 that lists the tags associated with a selected component. Within the tag table 954, each tag occupies a row. The row may include various data fields that define or describe the tag. For example, in the embodiment shown in
As shown in
The dashboard 200 may also be used to add logic to an existing project or a component within an existing project.
Suggesting Components
The ability of the dashboard 200 to use historical data to suggest connections between components is shown and described above with reference to
In some embodiments, the about object option may send a user to a website for the vendor of the object. The about object option may also provide contact information for the vendor of the object and provide the user with guideline as to how to purchase the object, if a purchase is appropriate. Further, the object preferences option may allow a user to define his or her preferences with regard to certain objects, such as preferred vendors, preferred models, budgets, preferred programming languages, compliance with preferred standards, preference for objects designed for specific industries, etc. In other embodiments, the object preferences option may allow a user to view and edit the settings for a given object. When multiple objects are suggested, as is the case in
As shown in
In the embodiments shown and described with regard to
In some embodiments, the system may also recognize when a component of a project has reached, or will soon reach, the end of its suggested life cycle, has become, or is expected to become, obsolete for lack of software/firmware updates, or has otherwise become an end of life product. In such a situation, the system may generate an end of life notification and suggest a replacement product.
The system may also detect when known hardware components have disconnected from the network and when new hardware components have connected to the network.
Simultaneous Edits by Multiple Users
As described above with regard to
In some embodiments, multiple users may be editing a master copy of the project, which is hosted by an on-premises (on-prem) server, a remote server, a private cloud network, a public cloud network, or some other way that is simultaneously accessible by multiple users, and updated in real time or near real time (e.g., within seconds of an edit being made). However, in some embodiments, a user's computing device may make a local copy of the project to edit rather than working from the master. Differences or conflicts between the master and the local copy may be considered at set intervals (e.g., seconds, minutes, hours, days), or upon some triggering activity (e.g., certain number of changes made, user selects save button, or requests to sync master and local copy, when a user closes their local copy, etc.). Upon noticing one or more conflicts, the user may be prompted as to how to deal with the realized conflicts.
Retrospective Project Code File Analysis
As discussed with regard to
For example, as shown in
At block 1208, the system may analyze the project code file to identify its code structure. This may include, for example, recognizing the larger portions of the code, as well as identifying modules of code, loops, interactions between portions of code, etc. For example, the system may suggest alternate structures for certain portions of the project code file, such as suggesting an if, then, else structure. In instances in which the project code file was written by a person who is no longer available (e.g., departed employee, contractor, employee of third party hired to develop the project code file), identifying the structure of a project code file may help an owner of the project code file to understand how the project code file is constructed. At block 1210, the system may generate one or more visualizations of the project code file. The visualizations may include, for example, a map of data flow within the project code file, a call graph, etc.
At block 1212, the system may identify dead code within the project code file. For example, the system may find portions of code within the project code file that are not run because of how the code is written (e.g., portions of code are not called upon). Further, in block 1214, the system may identify dead ends in the project code file. If the system finds portions of dead code or dead ends within the project code file, the system may suggest one or more steps for addressing the dead code or dead ends. In block 1216, the system may identify improper or inefficient tag usage within the project code file. If the system finds improper or inefficient tag usage, the system may suggest one or more steps for addressing the improper or inefficient tag usage. In block 1218, the system identifies overlapping and/or concurrent tasks within the project code file and determines whether those tasks should be separated and how to go about separating the overlapping and/or concurrent tasks. At block 1220, the system considers whether connections between components are valid. That is, the system considered whether connections between components comply with one or more sets of rules or guidelines. If one or more connections are found to be invalid, the system may recommend one or more steps for bringing the one or more connections into compliance with the one or more sets of rules or guidelines. At block 1222, the system identifies overload situations for a component or a group of components (e.g., when a component is running too many processes simultaneously) and provides suggestions for addressing the overload situations.
At block 1224, the system calculates a code complexity score for the project code file. Calculating the code complexity score may include applying an algorithm to determine a single numerical value that represents the complexity of the project code file. It should be understood, however that the project code file analysis in sub-process 1206 may include calculating other scores for the project code file that ascertain, for example, the extent to which the project code file complies with various rules or guidelines, such as, well-organized structure, lack of dead code and dead ends in code, efficiency of tag usage, amount of parallel overlapping/concurrent tasks, lack of overload situations, etc. Accordingly, in some embodiments, calculating the code complexity score may utilize the results of other blocks within the project code file analysis sub-process 1206. At block 1226, the system determines whether the project code file meets an acceptance criteria. The acceptance criteria may include one or more sets of rules or guidelines that define best practices for project code files. In some embodiments, the output of whether the project code file meets the acceptance criteria may be a binary yes/no, pass/fail, etc. However, in other embodiments, the output may include a selection of one or multiple gradations, such as letter grades, poor/satisfactory/good/excellent, etc. In further embodiments, the output of whether the project code file meets the acceptance criteria may be a numerical score. However, other embodiments for the output of whether the project code file meets the acceptance criteria are also envisaged.
At block 1228, the system generates and outputs a report summarizing the analysis of the project code file sub-process 1206. Accordingly, the report may include results from blocks within the sub-process 1206, as well as other information. The report may be displayed within the dashboard, within a different GUI, output as a PDF, or provided in some other fashion. At block 1230, data from the analysis sub-process 1206 may be added to a database or other store of historical data, where the data may be further analyzed. At block 1232, data collected from analyzing the project code file, as well as other project code files may be used to update the rules and/or analysis algorithms. Updating the rules and/or analysis algorithms may occur at set intervals (e.g., daily, weekly, monthly, quarterly, annually, etc.), upon some triggering event (e.g., threshold number of project code files analyzed, a request to update rules and/or analysis algorithms, change in processes, etc.).
Alerts
In some embodiments, the system may reference historical data and make one or more suggestions as to how to address the alarm. For example, the system may utilize machine learning or artificial intelligence trained based on collected historical data. The system may recognize that the same or similar situation has occurred in the past and been resolved. The system may recognize the solution that worked previously and suggest the solution to a user. The system may provide instructions for implementing the suggested solution, or provide the user with an option to automatically implement the suggested solution. In some embodiments, where multiple possible solutions are available, the system may present multiple possible solutions. In further embodiments, the system may be configured to evaluate and rank the possible solutions. The system may provide, for example, a predicted likelihood of success for each possible solution.
Light Engineering Client
As described above with regard to
The data window 1308 may be configured to display data associated with one or more connected components or objects. In some embodiments, the data may be displayed via one or more visualizations. In other embodiments, the data may be displayed via one or more scores. What is displayed within the data window 1308 may also be customizable by the operator. The devices window 1310 displays one or more devices associated with the HMI 30 and may include one or more pieces of information for the one or more devices. The system model window 1312 may list one or more models associated with the HMI 30, which the user may select to view the selected model. The alarm window 1314 displays a list of alarms experienced by the HMI 30, or components associated with the HMI 30.
The home screen of the light engineering client dashboard 1300 may be visible when a home screen tab 1316 has been selected. Selection of an alarm tab 1318 may cause the primary window 1306 to update to display information associated with one or more alarms.
In some embodiments, the user may minimize the explorer window 1302 and the connected devices window 1304 such that the primary window 1306 occupies the entirety of the HMI screen 30.
In some embodiments, the system may be configured to reference historical data and make one or more suggestions as to how to address the alarm. For example, the system may utilize machine learning or artificial intelligence trained based on collected historical data. The system may recognize that the same or similar situation has occurred in the past and been resolved. The system may recognize the solution that worked previously and suggest the solution to a user. The system may provide instructions for implementing the suggested solution, or provide the user with an option to automatically implement the suggested solution. In some embodiments, where multiple possible solutions are available, the system may present multiple possible solutions. In further embodiments, the system may evaluate and rank the possible solutions. The system may provide, for example, a predicted likelihood of success for each possible solution.
The disclosed techniques include applying a set of industrial automation system design rules to determine whether each action taken by a designer (e.g., adding an object to a project, drawing connections between objects, etc.) is allowed by the rules. The rules may act as “design guardrails” to help designers design better systems more efficiently, avoiding long periods of time spent troubleshooting. In some cases, designers may be entirely prevented from taking prohibited actions, whereas in other cases, designers having certain specified credentials may be able to override the warning message that a given design action does not follow the guidelines.
The disclosed techniques also include using AI and/or machine learning to consider actions taken by a designer in view of previous designs and known component specifications to suggest design actions, which the designer may accept or reject. Suggestions may include, for example, using specific models of components, adding connections between components, inserting additional components, replacing end of life components with replacement components, and so forth. When an action is suggested, the designer may choose whether to accept the suggestion or dismiss the suggestion. In some cases, the system may also provide the designer with contact information or hyperlinks to vendors or manufacturers of the suggested component, or other avenues to purchase the suggested component.
Further, the disclosed techniques include using AI and/or machine learning to analyze a historical data set, identify when the instant issue has been encountered before, and suggest a remedial action to the designer. For example, the system may recognize that a problem has been encountered and use a historical data set to identify when the problem has been encountered in the past. The system may then consider what was done in those previous occurrences to remedy the problem. The system may then identify one or more possible remedial actions to address the problem. In some cases, the system may rank or otherwise evaluate the possible remedial actions to identify a likelihood of success for each possible remedial action. The system may then suggest one or more of the remedial actions to the designer. For example, the system may communicate to the designer, “The last time this problem occurred, we took this remedial action.” In some cases, the designer may have the option to automatically implement the suggested remedial action, see instructions for manually implementing the suggested remedial action, or dismiss the suggestion.
The disclosed techniques include a light engineering client environment, which is similar to a run-time environment, but includes some functionality of the design-time environment, allowing operators to make minor adjustments to an industrial automation system to resolve minor issues. In some embodiments, the light engineering client may also be capable of providing recommendations for how to resolve issues that arise.
The disclosed techniques further include using component libraries that include objects that are programmed to interact with one another in known ways. Accordingly, the designer may drag components from a library into a design window, and the system may understand how the components are intended to interact with each other. The system may automatically arrange components and connect the components accordingly to how they are frequently implemented. Each component in a library may have a respective portion of code that defines the operation of the respective component. Based on how the components are arranged and connected in the design window, the system may then generate or modify program code for the components so the designer is not burdened with writing the code for the system.
The disclosed techniques include using AI and/or machine learning to learn new naming conventions and propagate the new naming convention through one or more industrial automation systems and/or libraries, and to automatically adjust component names to maintain a naming convention when components are added, removed, or rearranged within the system.
The disclosed techniques include a project code file analysis algorithm that may be applied to project code files and generate a report for the project code file. The project code analysis algorithm may be configured to determine a structure of the project code file, create a visualization of the project code file, identify dead code (i.e., code that is not executed) within the project code file, identify dead ends within the project code file, identify inefficient tag usage, identify parallel concurrent tasks, consider the validity of connections between components, identify overload situations, calculate a complexity score for the code, determine whether the project code file meets an acceptance criteria, and so forth. Further, once the project code file has been analyzed, a database may be updated with data from the analysis. As the database is populated with data from analyzing numerous project code files, adjustments may be made to the project code analysis algorithm, such that the project code analysis algorithm improves over time.
While only certain features of the present disclosure have been illustrated and described herein, many modifications and changes will occur to those skilled in the art. It is, therefore, to be understood that the appended claims are intended to cover all such modifications and changes as fall within the true spirit of the embodiments described herein.
Stump, Andrew R., Josipovic, Srdjan, Ericsson, Matthew R., Kalan, Michael D., Carrara, Anthony, Como, Christopher W., Srinivasan, Eashwer, Billi-Duran, Sharon
Patent | Priority | Assignee | Title |
Patent | Priority | Assignee | Title |
6240414, | Sep 28 1997 | Open Text SA ULC | Method of resolving data conflicts in a shared data environment |
20040177343, | |||
20080235579, | |||
20110246961, | |||
20120192055, | |||
20140006352, | |||
20150365303, | |||
20160378737, | |||
20200142545, |
Executed on | Assignor | Assignee | Conveyance | Frame | Reel | Doc |
Nov 23 2020 | Rockwell Automation Technologies, Inc. | (assignment on the face of the patent) | / |
Date | Maintenance Fee Events |
Nov 23 2020 | BIG: Entity status set to Undiscounted (note the period is included in the code). |
Date | Maintenance Schedule |
Aug 23 2025 | 4 years fee payment window open |
Feb 23 2026 | 6 months grace period start (w surcharge) |
Aug 23 2026 | patent expiry (for year 4) |
Aug 23 2028 | 2 years to revive unintentionally abandoned end. (for year 4) |
Aug 23 2029 | 8 years fee payment window open |
Feb 23 2030 | 6 months grace period start (w surcharge) |
Aug 23 2030 | patent expiry (for year 8) |
Aug 23 2032 | 2 years to revive unintentionally abandoned end. (for year 8) |
Aug 23 2033 | 12 years fee payment window open |
Feb 23 2034 | 6 months grace period start (w surcharge) |
Aug 23 2034 | patent expiry (for year 12) |
Aug 23 2036 | 2 years to revive unintentionally abandoned end. (for year 12) |