Overview

FactoryStudio is an industrial automation software that enables the creation of SCADA and HMI applications to monitor and control industrial processes in real-time. The software supports various communication protocols and offers advanced visualization features, alarm and data logging capabilities to ensure operational efficiency of the industrial processes.

On this page:


Purpose and Key Concepts

Key concepts related to device communication in FactoryStudio include:

communication protocol

TX message

RX message

byte

communication driver

external device.


Communication Protocols

FactoryStudio supports multiple communication protocols, including Modbus, OPC UA, and AB Rockwell ControlLogix. Each protocol has its own specific characteristics and benefits that may be more suitable for different applications.

2.1 Modbus

Modbus is a widely used serial protocol with a master-slave architecture. It supports various data types and a wide variety of devices, including PLCs, sensors, and actuators.

2.2 OPC UA

OPC UA is a platform-independent protocol based on web services, offering interoperability between different platforms and devices, as well as enhanced security.

2.3 AB Rockwell ControlLogix

The AB Rockwell ControlLogix protocol is used to communicate with devices in the ControlLogix family from Rockwell Automation. It is widely used in the industry and is relatively easy to implement.

For more information related to a specific protocol, go to: Communication Drivers - v10 - Tatsoft LLC



Detailed Functionality



3.1 Communication Messages

Communication between FactoryStudio and external devices occurs through TX messages (sent from FactoryStudio to the device) and RX messages (sent from the device to FactoryStudio). Each byte within these messages has a specific meaning.


3.2 Protocol Example

A fictitious communication protocol is presented to illustrate how TX and RX messages are structured and how they can be interpreted.


3.3 ReadGroups and WriteGroups

ReadGroups and WriteGroups are created during the device module startup to handle the communication between FactoryStudio and external devices. They contain information regarding FS Tags and communication operands, and their amount must be less than the MaximumBlockSize.


3.4 Communication Optimization

Optimizing communication can be achieved by configuring points with sequential and continuous addresses, using NodeConnections for simultaneous TX/RX exchange, and prioritizing specific communication groups.


3.5 ReadOnDisplay AccessType

The ReadOnDisplay AccessType is a setting that enables the communication group if any data is on the screen. This can be useful for data that is not saved in history and is only displayed on the screens. However, it is important to understand its operation in detail, as it may not be very intuitive.

























Communication protocols exist so that there can be communication between two entities. In our case, we are talking about FactoryStudio and other external devices used in the field; mainly PLCs, but they can be other types of devices or software. 

Each device manufacturer and/or creator of a communication protocol defines the rules of communication messages. These messages are called TX and RX. TX messages are the messages that go from FactoryStudio to the device, and the RX messages are the messages that go from the device to FactoryStudio.

Each entity related to this “conversation” needs to know the communication protocol to understand what the TX and RX messages mean. Each byte within the message has a meaning. Let us consider a fictitious communication protocol definition, for example:


Protocol: [STX] [CMD] [OPR] [STA] [CNT] <DATA> [ETX]

Where:

  • [STX] Start Message : 02 hexa
  • [CMD] Command : 04 hexa — Read Action, 05 - hexa Write Action, 06 – Ack Answer
  • [OPR] Operand :  31 hexa — Integer (2bytes) , 32 hexa– Float (4bytes)
  • [STA] Start Address — Beginning address to read or write (two bytes)
  • [CNT] Counter — Quantity of bytes in the data packet to read or write (one byte) 
  • <data> - data bytes related to the content read or write (each operand can have 2 or 4 bytes)
  • [ETX]  End Message –– 0D hexa

 

Based on this definition, we could say that the TX and RX below are valid:

  • TX: 02 05 31 00 00 04 0D (FS send to Device)
  • RX: 02 06 31 00 00 04 00 00 00 00 0D (Device answer to FS)

This means - TX:

02[STX]

05[CMD RD]

31 [Integer]

00 00 [Start Address : 0]

04[Quantity: 4 bytes]

0D [ETX]

This means  - RX:

02 [STX]

06 [ACK ANSWER]

31 [Integer]

00 00 [Start Address : 0]

04 [Quantity: 4 bytes (two operands integer)]

00 00 [Operand 1 with data value 0]

00 00 [Operand 2 with data value 0]

0D [ETX]

After analyzing this fictitious protocol, we can conclude:

  • Since the CNT is a single byte that indicates the number of bytes and the FF hex means 255 bytes, a block of communication can have a maximum of 255 bytes. Thus, each TX / RX can transmit a maximum of 127 (integer) or 64 (floats), which are the operands limits per communication block. The CNT, or 255 in this case, is what we call the MaximumBlockSize, which is defined as the maximum size of the communication block. As defined by the communication protocol, the user generally cannot customize the MaximumBlockSize.
  • Since a device's available operands can be much larger than the MaximumBlockSize, multiple TX/RX exchanges can be required for it to read or write on all the data. 
  • In a TX/RX, a read dataset is called a ReadGroup. Each ReadGroup contains information regarding FS Tags and communication operands. Consequently, the amount of operands must be less than the MaximumBlockSize.
  • ReadGroups and WriteGroups are created during the device module startup. Also, the Points settings are sorted, and the Groups are sequentially created by taking into account the information of whether or not two different points can be in the same communication TX/RX. The information taken into account is: Node, Address (Operand, Address, Name), MaximumBlockSize, Read/Write Command, Polling Time.

 

Once the ReadGroups and WriteGroups are created and when the read or write event happens, the group is placed in a run queue. It is never queued more than once; it must run and exit the queue so that it can be queued again.

This execution queue is emptied by the execution of the communication driver. The communication driver takes the information the TX sends to the device, waits for the RX response, handles the data, assigns the values in the Tags if necessary, and gives the execution as complete. ******


It is important to realize that there is a wait time for the the RX response throughout this cycle. The wait time does not depend on FactoryStudio's execution; it depends on the device's execution, which can take more or less time — In general, a PLC program has an execution cycle time that directly influences the time of treatment and response of the communication, which means a PLC with a longer cycle time will take longer to respond to an RX.

If we imagine that this entire cycle takes around 20ms, we will have 50 TX/RX exchanges in 1s. By taking into account the maximum amount of operands for TX/RX, we know how many operands we can exchange in 1s.

This is the traditional form of communication for Master/Slave. However, many devices that accept TCPIP communication also accept multi master or multi connections, which means that more than one master can send a message at the same time. In FactoryStudio, this is done through the NodeConnections configuration. The NodeConnections is the amount of connections that each node will establish with the device for simultaneous TX/RX exchange.

In this case, instead of the PLC having to handle only one message per execution cycle, it will have to handle multiple messages, which can cause an increase in response time for each RX. Although we generally have a performance gain almost proportional to the number of node connections, it is important to remember that devices have a maximum number of connections allowed, ranging from equipment to equipment.

The most optimized form of communication is the configuration of points with sequential and continuous addresses because all of the byes belonging to the databuffer are used. When we set up points with address jumps, there is a waste of communication. For example: Read address 0, 10, 50, and 100. We will read only 4 operands in a buffer exchanged with 100 operands; this is a great waste of communication.

Once we know the criteria for generating a ReadGoup, we can use a new Node or a different pooling time to force the operand to be separate from the previous ReadGroup. In some cases, mainly serial communication, we can decrease the amount of bytes in communication by creating more groups with smaller sizes. In general, this optimization does not make much sense for TCPIP communication because the speed of the communication makes the number of groups end up having greater influence than the size of the groups.

Another important optimization is for when we have a large volume of communication groups and want to give priority to some of them. In this case, as long as the communication is TCPIP and the device accepts multiple connections, you must create a channel so that a smaller group of points communicate more frequently. If this is not done, these points will be together with other groups in the execution queue. Remember that the same group cannot be in the queue more than once.

Sometimes, communication is not saved in the history, and calculations are only displayed on the screens instead of being performed with the read field value. This type of data does not need to be read all the time, it can be read only when the screen that uses it is open. There is a setting in the AccessType ReadOnDisplay that enables the communication group if any data is on the screen. It is important to understand this operation in detail as it may not be very intuitive.

At device module startup, the ReadGroups and WriteGroups groups are created by taking into account all configured communication points, as already described earlier. At this point, we do not know if the AccessType configuration is ReadOnDisplay or Always; we simply create all the groups taking into account the factors already described in this document.

When a screen opens during execution, we check if there are points with the ReadOnDisplay setting and if the points are linked to the tags of the open screens. Points that have the ReadOnDisplay AccessType and that are not on the open screens are disabled, and the group related to it is only disabled if all of the configured points are also disabled — which may be enabled because they are the Always AccessType instead of ReadOnDisplay. This is relevant because the way groups are assembled is important when we think about the relationship of having only screen data or not. A group that always has a specific screen point along with an Always data will never be disabled, sparing no communication.



In this section...