Applies To:
  • CitectSCADA 5.xx

Summary:
I have a system consisting of two workstations utilizing Citect 5.21. I have the same test project installed on each computer, and they are configured as Primary and Standby A/T/R and IOServers. Within the project from a command button, I perform a remote procedure call from one workstation WS1 to an other WS2. The system works fine until I log onto the secondary system, i.e. WS2. The procedure call

does not get executed. This is the code I am calling from a button:

FUNCTION
Test_Call(STRING sTest1)
    INT hMsg;

    hMsg = MsgOpen("WS2",2,0);
    MsgRPC(hMsg,"Test_Message","^"" + sTest1 + "^"",1);
    MsgClose("WS2",hMsg);

END

 

Solution:
Change hMsg = MsgOpen("WS2",2,0); to hMsg = MsgOpen("Alarm",3,0).

Mode 2 is reserved for sessions between a server and display clients, whereas mode 3 is designed to use a message session between redundant servers. Remember that you are never creating extra network sessions but using Citect's existing sessions. That is why you cannot MsgRPC from one client to another as there is no existing session open between clients. They are all Client to Server and Server to Server.

In this particular case, specifying the node name, and using mode 2 resulted in the Standby server trying to use the Redundant Report connection. But the relationship between the 2 Servers is not truly client/server and hence the MsgRPC call using this session subsequently failed. Whilst this may be rectified in future Citect versions, it is not considered critical as there is a satisfactory workaround as shown above.

 

Keywords:
 

Attachments