OPC Use Case Examples

From Zenitel Wiki

Revision as of 01:59, 12 March 2021 by ZenitelAus (talk | contribs)

What is OPC?

OPC aims to standardise the communication between Hardware in the field (Zenitel) and Controlling Software (Building Management or Access Control System)

OPC is supported by many companies, with Siemens, Honeywell, Bosch and Indigovision to name a few.

OPC Server and Client model

The Manufacturer of the Field Equipment (Zenitel ICX-AlphaCom or AlphaCom XE) delivers an OPC Server Application. The communication between the OPC Server and the Field Equipment is Zenitel specific.

The Controlling Software manufacturer (i.e. Honeywell) deliver the OPC Client Application.

The OPC Server publishes a set of standardised capabilities to the OPC Client

An OPC Client can communicate with many OPC Servers

OPC Server Features

System Logging and Monitoring

  • Call Logging
  • Status of Intercom Stations; Busy, Free, Operational
  • Status of Intercom Nodes

Call Handling

  • Call Handling/Call queuing
  • Call setup and cancel
  • Emulate station keyboard (dialing, M-key, C-key, DAK button)
  • Activate group call and other features
  • Dispatch prerecorded alarm messages
  • Operate Remote Control Outputs (e.g. door control)
  • Monitor Remote Control Inputs

Installation and Configuration

Visit OPC Classic for AlphaCom - Installation

What does the OPC Server publish?

The OPC Server publishes a number of Data Points that relate to specific functions and endpoints in the ICX-AlphaCom system. Some points are Read Only, some points are Write only and some points are both Read and Write. These points can represent items such as the Read Only Operational tag; The Intercom is online and not in fault. The Operational Data Point is a single 1 or 0 point. The 1 represents Operational and the 0 represents Non-operational. An example of a Write Only tag is the Connect tag; This tag is used to connect one Station to another Station using a preset Master Station list. The Master Station list relates down the Node and Directory Number of an extension into a single number. If you have configured Node 3 Station 1254 as Master Station 1, then writing 1 in the Connect tag of a Substation will initiate the connection, and writing a 0 will end the connection. An example of a Read/Write tag is the Relatedto tag; This tag can be used to view the B party in a conversation from an A party, and it's displayed in Node.Station format. A Substation in call with the Master Station in the example above will have a Relatedto tag that reads Node3.Station1254 and the Master Station will have the reciprocal information. If the Node and Station number is written into this tag, then the call will be set up to this extension and should the string 'null' be written to this tag, the call will be cancelled.

Real World examples

I would like to monitor the status of a Node in AlphaNet.

Read the tag Node{nn}.NodeStatus where nn = the AlphaNet Node Number. A response of 1 means that the Node is connected and can be polled. A 0 will indicate a fault. Other options also exist.

I would like to monitor the pure connection status of an Intercom station.

Read the tag Node{nn}.Station{xxx}.Operational where xxx = the Directory Number of the Station. A response of 1 means the Station is connected and a 0 will indicate a fault.

But I also want to know why an Intercom Station is offline.

Read the tag Node{nn}.Station{xxx}.linestate. A number of responses are available that show both operational, but also failure modes for both IP and Analogue equipment.

And I want to know if the unit has passed the Tone Test of the speaker and microphone.

Read the tag Node{nn}.Station{xxx}.tonetest. Every repetition of the Tone Test will update this tag with a 0 for Test OK and a 1 for a failed test.

I want to monitor the pure busy state of an Intercom Station, so that I know when a unit is blocked during dialing or conversation.

Read the tag Node{nn}.Station{xxx}.busy. A 0 indicates the station is free, and a 1 indicates the station is busy.

But I also want to know why the Intercom Station is busy.

Read the tag Node{nn}.Station{xxx}.callmode. A 0 indicates a free station, but other 4 other options are exposed such as Private Ringing, Busy and Connected.

I just want to display the Display Text from an Extension.

Read the tag Node{nn}.Station{xxx}.text. The Display Text configured in the ICX-AlphaCom for the Directory number will be displayed.

What about the Station Hardware Type?

Read the tag Node{nn}.Station{xxx}.hwtype for the Hardware Type as displayed in AlphaWeb.

I want to know when a Station input has been activated.

Read the tag Node{nn}.Station{xxx}.input{oo} tag where oo is the input number and depending on the number of inputs per station, this can be a number between 1 and 10. A 0 will indicate the input is not activated, and 1 will show the input is activated.

I want to activate the output of a Station.

Write to the tag Node{nn}.Station{xxx}.ouput{oo} tag where oo is the output number and depending on the number of inputs per station, this can be a number between 1 and 10. A 1 will activate the output and a 0 will deactivate.

I want to know when a Substation has initiated a Call Request.

Read the tag Node{nn}.Station{xxx}.signalled. This tag will be 1 when there is an active call request waiting to be answered from this Station, and a 0 when there is no Call Request.

How do I know where the Call Request should be answered?

Read the tag Node{nn}.Station{xxx}.mailqueue from all Control Room Stations. Stations will a mailqueue of 1 have waiting calls to be answered, and Stations with a mailqueue of 0 do not have any unanswered calls.

But I want to know how many calls are waiting to be answered at a Control Room Station.

Read the tag Node{nn}.Station{xxx}.cr_queue_length. This tag will display the number of calls in the queue at this station.

But I also want to know the Node and Station number of the calls in the queue at the Control Room Station.

Read the tag Node{nn}.Station{xxx}.cr_iterate_station whilst writing to cr_iterate_command. Writing "First" to cr_iterate_command will return the node{nn}.station{xxx} of the first call waiting to be answered. Writing "Next" will retrieve the next station in the queue. This process can be repeated to retrieve all members of the queue, and the system will return "eol" when the last queue member has been retrieved.

I want to answer a call in the queue.

Write to the tag Node{nn}.Station{xxx}.connect where xxx is the directory number of the Substation you want to connect to. The Master Station number is per-defined in the OPC Server Configurator. Writing a 0 to this tag will cancel the call.

I want to delete the call in the queue without answering.

Write to the tag Node{nn}.Station{xxx}.cr_delete_command where {xxx} is the Control Room Station number. Use the Node{nn}.Station{xxx} notation of the call in the queue you wish to delete without answering.

While in the call, I want to monitor who the B party to the call is.

Read the tag Node{nn}.Station{xxx}.related_to. The B party will be displayed in node{nn}.station{xxx} format, and the reciprocal information is available from the B party.

But didn't you say earlier that we can also write to the related_to tag?

Sure. Write to the tag Node{nn}.Station{xxx}.related_to as an alternative to the connect tag. Writing an extension in the node{nn}.station{xxx} format will connect to this extension. You can also write AlphaNet reference strings such as L for local directory number to access Group Call and Conference numbers.

While in the call, I want to use Simplex (Push to Talk) audio.

Write to the tag Node{nn}.Station{xxx}.mkey where {xxx} is the Control Room Station number. Writing a 1 will press the M key on the Master Station and writing a 0 will release the M key.

In fact, I want to emulate all dialing at the Control Room Station.

Write to the tag Node{nn}.Station{xxx}.dialdigits. Up to 9 digits can be dialed in a single command, and multiple commands can be stacked to achieve complex dialing requirements.

What about the C key and DAK keys?

Write to the tag Node{nn}.Station{xxx}.ckey or Node{nn}.Station{xxx}.dialdak. Dialdak accepts inputs from 1 to 100 allowing for all programmed DAK keys from AlphaPro to be accessed, including the Queue navigation keys (21-24). The ckey tag uses only the 1 value to press the C key. There is no release action.

I want to trigger a pre-recorded message to a Group of Stations.

Write to the tag Node{nn}.groups.g{x}.playmsg where x is the Group number to play the message to. Writing a message number as uploaded to the ICX-AlphaCom will initiate a single playback with Group Call Gong and Normal Priority. Many more options exist for repetitions, Gongs and Priorities. .stopmsg can be used to stop a current playback event and .alarmmsg can be used to trigger alarms will Volume and Handset Override.

I want to do something else not listed here.

Send a request to technical support. The Event Handler in the ICX-AlphaCom can be used to create functionality, and this can be exposed using Inputs, Outputs or a Custom Parameter tag.