Tag Server Overview::
To accommodate applications where the complexity and expense of a full featured SCADA system are not warranted, ScadaTEC offers a variety of Tag Server applications. These Tag Servers differ in the way that collect data from the field, but all provide a common OLE server interface which can be polled by client programs such as ScadaPhone or ScadaLogger.
ScadaTEC currently offers three different Tag Server applications: ModbusTagServer, ASCIITagServer, and TCPTagServer.
ModbusTagServer uses one or two RS232 ports to communicate with field devices that support either Modbus ASCII or Modbus RTU protocols. Communications can be implemented via various equipment such as telemetry radios, dial-up modems, RS485 line drivers, or RS232 null modem cable.
ModbusTagServer can be used to monitor up to 250 remote sites. Polling the remote sites can be done continuously or scheduled to occur on a periodic basis. If a remote site needs to alert ModbusTagServer that an alarm has been triggered, the remote site can force itself to be polled by transmitting a simple polling request command: "POLL#15" (the number after the "#" corresponds to the PLC module ID).
ASCIITagServer provides an interface for non-Modbus RTUs that are capable of formatting and sending ASCII strings over an RS232 link. The ASCIITagServer is typically used in conjunction with dial-up modems but it can also be used in conjunction with a RS232 direct connection (null modem) cable.
ASCIITagServer does not poll for data in the typical way; it passively waits for data to be sent to from the RTU. However, ASCIITagServer can be configured to call specific RTUs at specific times; once a modem connection has been established (i.e. carrier has been detected) the RTU can be programmed to transmit an unlimited number of data packets and then to end the call. If the RTU needs to call in to ASCIITagServer to report alarms or other significant status changes, ASCIITagServer will answer the incoming call and wait for the data to be transmitted.
When an RTU is sending data to ASCIITagServer, the strings transmitted from the RTU must be formatted as follows:
[SiteName]:[Tag1]=[Tag1Value],[Tag2]=[Tag2Value],...<CR><LF>.
For example, if the RTU needs to report an alarm containing an alarm bit and two associated analogs, the read packet could look something like this:
TankFarm:Tank1HighLevel=1,Tank1Level=12.3,Tank1Outflow=23.7<CR><LF>.
When ASCIITagServer receives this example message, 3 tags will automatically be created: TankFarm.Tank1HighLevel, TankFarm.Tank1Level, and TankFarm.Tank1Outflow (note that the site name is inserted at the beginning of the tag name and separated with a period). Once these tags have been created in the tag server, they will be available to read via the OLE server interface.
TCPTagServer is quite similar to ASCIITagServer with the following exceptions: communication is conducted over a TCP/IP network connection and there is no provision to schedule call-outs (due to the fact that there are no modems involved). TCPTagServer passively monitors TCP/IP port number 6712 and accepts text messages in the same format as ASCIITagServer. TCPTagServer can accept multiple messages from multiple RTUs simultaneously, so any number of RTUs can be configured to send status updates at regular intervals to keep the tag values in TCPTagServer up to date.
Typically, RTUs use Network Interface Modules (such as the Lantronix UDS-10) to convert their RS232 output into TCP/IP over Ethernet. These modules must be configured so that they send their output to the static IP address of the machine running TCPTagServer and to port number 6712 at that IP address. The network can either be a private network or internet based.
In summary, ScadaTEC's tag server applications provide an inexpensive means for collecting data from remote sites and making that data available to OLE client applications such as ScadaPhone and ScadaLogger. If your application involves collection of data to be utilized by a custom made client program, obtaining the data from any of these servers is as simple as this:
TCPTagServer = CreateOLEObject('TCPTagServer.OLEServer');
TagValueString = TCPTagServer.GetValueAsString('TagName');
