oley

Forum Replies Created

Viewing 15 posts - 1 through 15 (of 67 total)
  • Author
    Posts
  • in reply to: Backup strategy for distributed system #17916
    oley
    Participant

    I have gaps in the historical data (from couple hours ago) on the main server, but RapidGATE isn’t filling in those gaps.

    in reply to: Backup strategy for distributed system #17915
    oley
    Participant

    Update: I created specific user with the Application role, and try opposite direction: RapidGate on local SCADA.
    Now the log looks like:

    --------------------------------------------------------------------------------
    2026-05-02 09:49:46 Module ModRapidGate 6.1.1.1 started
    2026-05-02 09:49:46 Check ModRapidGate registration: Registration key is valid. Expiration date is 02/05/2026.
    Computer code: =F2ABEFB92DB5AEB9-4AFA2B2EE4EA954E-69CE185AC8AF0D03-08C262988238E2BA-1A67F09752CCC18F-0CD2C7725F4B6C01-F0B7B8E7A118FEEA-E59F5CF46611CD5B-0B5645B04B1D4750-E905B6A2AB8B487E-D617E9425CCA10E2-A4CA3976AC9F1747-397A9F2508AA0055-60CCB8ADAB3A9209-59D39F054257525B-D6185D9A7A70FE16-E1D733A61A4BDD71-94242B73E648DE5E=
    Registration key: F571B75D9A2A40C6-1FD3E855CB38C3FD-48EDD2EBB6CD2FCA
    2026-05-02 09:49:46 Start gates
    
    in reply to: Backup strategy for distributed system #17913
    oley
    Participant

    Hi,

    I’ve found some time to revisit the topic of redundancy.
    At one of the objects where GSM communication outages occur, I installed a miniPC running RapidSCADA configured specifically for that object.
    And now the question: where should RapidGate be configured? On the main server serving all locations, or on the local SCADA system?
    A quick test with RapidGate on the main server doesn’t work:

    
    2026-05-02 09:33:23 Error transferring event:
    Scada.ScadaException: Client is not logged in. Try again later.
       at Scada.Client.ClientBase.RestoreConnection()
       at Scada.Client.ScadaClient.WriteEvent(Int32 archiveMask, Event ev)
       at e.i()
    2026-05-02 09:33:24 Error transferring command:
    Scada.ScadaException: Client is not logged in. Try again later.
       at Scada.Client.ClientBase.RestoreConnection()
       at Scada.Client.ScadaClient.SendCommand(TeleCommand command, WriteCommandFlags flags)
       at e.g()
    2026-05-02 09:33:27 Error transferring current data:
    Scada.ScadaException: Insufficient rights
       at Scada.Client.ClientBase.RestoreConnection()
       at Scada.Client.ScadaClient.WriteChannelData(Int32 archiveMask, ICollection
    1 slices, WriteDataFlags flags)
       at e.k()
    

    I use admin/scada credentials and secret key copied from the object local SCADA in the connection config.

    • This reply was modified 3 weeks, 3 days ago by oley.
    in reply to: Setting multiple channels at once. #17882
    oley
    Participant

    I put this as output formula:

    public double SetPowerAll()
    {
        double value = CmdVal;
    
        SetData(800205, 0, 1);
        SetData(800204, value, 1);
        SetData(800205, 1, 1);
    
        return value;
    }
    

    and it does not work.

    in reply to: Setting multiple channels at once. #17880
    oley
    Participant

    Hi,

    it works indeed with broadcast address 0 on separate device and without polling (only on command).
    Now I do not need the loop, but unfortunately the device need this acknowledgment on separate channel.
    What do you mean with “The formula looks incorrect. It should return a double value or byte array”? SetPowerAll() is used as an output formula. I will try it for one pair of channels.

    in reply to: Entering future data #17789
    oley
    Participant

    Hi,

    My example isn’t made up: the energy exchange publishes prices for the entire next 24 hours. I already have tomorrow’s prices and am entering them into the database:
    0:00-1:00 100
    1:00-1:00 500

    23:00-24:00 333

    Now I’m querying the database constantly, comparing the time to the current time, but the simplest solution would be to once enter data with future times into the channel.
    I wouldn’t burden the system with queries, and I’d see future data in the table.

    in reply to: Delayed control sequence #17774
    oley
    Participant

    Hi,

    I have a problem with my fallback trigger.
    Would you look on my ACM config:

    https://ibb.co/yBhJM43w
    https://ibb.co/WvFwRSDk
    https://ibb.co/Q3PXKnSd
    https://ibb.co/6Jt3jdJ4
    https://ibb.co/Kc4hhQpf
    https://ibb.co/5hY5GjqK
    https://ibb.co/S7x3ny1w
    https://ibb.co/gLMbVgHH

    Logs:

    2026-03-21 11:00:00 Trigger state “PowerAdjustment\Limit_28 [280120]”: Delay before firing 1 sec
    2026-03-21 11:00:00 Trigger state “PowerAdjustment\NoLimit_28 [280120]”: Waiting
    2026-03-21 11:00:00 No trigger commands to send
    2026-03-21 11:00:00 No trigger events to send
    2026-03-21 11:00:00 Trigger state “PowerAdjustment\Limit_41 [410120]”: Delay before firing 1 sec
    2026-03-21 11:00:01 Trigger state “PowerAdjustment\Limit_13 [130120]”: Firing
    2026-03-21 11:00:01 Send command. Channel 132204
    2026-03-21 11:00:01 Sending trigger commands completed
    2026-03-21 11:00:01 Sending trigger events completed
    2026-03-21 11:00:01 Trigger state “PowerAdjustment\Limit_28 [280120]”: Firing
    2026-03-21 11:00:01 Send command. Channel 282202
    2026-03-21 11:00:01 Command is enqueued to be sent at 11:05:01. Channel 281208
    2026-03-21 11:00:01 Sending trigger commands completed
    2026-03-21 11:00:01 Sending trigger events completed
    2026-03-21 11:00:01 Trigger state “PowerAdjustment\Limit_41 [410120]”: Firing
    2026-03-21 11:00:01 Send command. Channel 412204
    2026-03-21 11:00:01 Sending trigger commands completed
    2026-03-21 11:00:01 Sending trigger events completed
    2026-03-21 11:05:01 Send command with a delay. Channel 281208

    My calculated channel:

    https://ibb.co/DPZFRTTG

    public bool IsPowerNotLimited()
    {
        return DataRel(-100).Val > 10;
    }
    

    First command is sent: Send command with a delay. Channel 281208, but no reaction of the trigger on 281208.

    • This reply was modified 2 months ago by oley.
    in reply to: Delayed control sequence #17769
    oley
    Participant

    Some update:

    I used the same trigger with delayed command to this calculated channel.
    Additionally I created another trigger for this calculated channel with two commands which control the switches. I have to test it in my environment.

    Channel script looks like:

    public bool IsPowerNotLimited()
    {
        return DataRel(-100).Val > 10;
    }
    
    • This reply was modified 2 months, 1 week ago by oley.
    in reply to: Delayed control sequence #17767
    oley
    Participant

    I’m a bit stuck:
    I created a trigger identical to the one I use to limit power, but with a 300-second delay.
    The channel with the current power is channel 108.
    I linked the command to a new channel (208) of type Output with the formula:

    IsPowerNotLimited() ? CmdVal : double.NaN

    public double IsPowerNotLimited()
    {
        var ret = DataRel(-100).Val > 10 ? 1 : 0;
        SetVal(CnlNum, ret);
        return ret;
    }

    If the value on channel 108 is > 10, I need to shut down the system by setting channels 802 and 803 to 1.

    Do I need to create a trigger for changes to this new channel 208?

    in reply to: Delayed control sequence #17766
    oley
    Participant

    Hi Mikhail,

    I will try this.
    Thanks!

    in reply to: Custom modbus driver #17590
    oley
    Participant

    My problem now is that now I become evens which looks like defined channel data event:

    21/01/2026 07:07:13	PV	TANGO	TangoEventCode	Defined, 311.000		
    21/01/2026 07:07:13	PV 	TANGO	TangoEventCode	Defined, 310.000		
    21/01/2026 07:07:13	PV 	TANGO	TangoEventCode	Defined, 271.000		
    21/01/2026 07:07:13	PV 	TANGO	TangoEventCode	Defined, 270.000		
    

    But I create a proper description for my device event in the driver (event is simple code, but has its meaning).

    Recent Events
    +---------------------+----------------+-------------------------------------+
    | Timestamp           | Tag            | Description                         |
    +---------------------+----------------+-------------------------------------+
    | 20/01/2026 19:08:04 | TangoEventCode | <strong>ODWZB. WE 31</strong>                        |
    +---------------------+----------------+-------------------------------------+
    | 20/01/2026 19:08:04 | TangoEventCode | POB. WE 18                          |
    +---------------------+----------------+-------------------------------------+
    | 20/01/2026 19:08:04 | TangoEventCode | ZAMKNIĘCIE OPERACYJNE ŁĄCZNIKA 1 
    7 |
    +---------------------+----------------+-------------------------------------+
    | 21/01/2026 07:07:13 | TangoEventCode | ODWZB. ZAB. f<2                     |
    +---------------------+----------------+-------------------------------------+
    | 21/01/2026 07:07:13 | TangoEventCode | POB. ZAB. f<2 
    0 -100270580 2       |
    +---------------------+----------------+-------------------------------------+
    | 21/01/2026 07:07:13 | TangoEventCode | ODWZB. ZAB. f>2                     |
    +---------------------+----------------+-------------------------------------+
    | 21/01/2026 07:07:13 | TangoEventCode | POB. ZAB. f>2 
    0 -8.214282E+11 2    |
    +---------------------+----------------+-------------------------------------+
    

    I want to see the description in rapid scada event table, in column description. Is this possible?

    in reply to: Transfer historical data to DB #17589
    oley
    Participant

    Hi,

    is there a specification of the dat file format?
    How to export complete historian data to csv?
    Writing an importer to existing DB with ef.core will not be a problem.

    in reply to: Custom modbus driver #17584
    oley
    Participant

    Hi Mikhail,

    I tried to do this similar to DrvSimulator.

    internal static class TagCode
    {
        public const string TangoEventCode = nameof(TangoEventCode);
    }
    public static List<CnlPrototypeGroup> GetGroups()
    {
        List<CnlPrototypeGroup> groups = new List<CnlPrototypeGroup>();
    
        CnlPrototypeGroup group = new CnlPrototypeGroup("Events");
        group.AddCnlPrototype(TagCode.TangoEventCode, "TangoEvent");
        groups.Add(group);
    
        return groups;
    }
    DeviceTag eventTag = null;
    
    if (DeviceTags != null)
    {
        eventTag = DeviceTags[TagCode.TangoEventCode];
    }
    
    DeviceEvent devEvent = eventTag != null
        ? new DeviceEvent(eventTag)
        : new DeviceEvent();
    
    devEvent.Timestamp = eventUtcTime;
    devEvent.CnlVal = code;
    devEvent.CnlStat = CnlStatusID.Defined;
    devEvent.Descr = descr;
    
    DeviceData.EnqueueEvent(devEvent);

    I have created a channel in Scada bound to TangoEventCode tag.
    Now I become an event in web app, but this contains Defined, <code> not my description of the event.

    Do I need to create a channel in Scada? If I use this driver for all my devices I have to gave this tag unique name with device number coded or similar.

    I want to see my generated event with the description I created for it.

    in reply to: rapidgate #17503
    oley
    Participant

    Hi Mikhail,

    I take a look at RapidGate and another backup strategies.
    The link to the English document does not work.
    Would you provide a valid link?

    in reply to: Events and Limits #17382
    oley
    Participant

    Hi Mikhail,

    I tried yesterday and have success with type 3. Channel value has changed.
    Unfortunately (it’s not so bad) I need 2 triggers: switch opened and switch closed.
    Type 2. Channel data has changed fires every time I’m uploading configuration, and another disadvantage: I can’t define range of channels.

Viewing 15 posts - 1 through 15 (of 67 total)