• Not Answered

Silence horn

   Hello experts,

   I was wondering if any of you could help me.

   I need to silence the horn using a DI: when a push button is pressed in the field, the DI is activated and should silence the horn.

   I've tried to use an ACT block with '^/THISUSER/HORN.CV' := 0 but it does not work.

Thanks,

Samuel.

3 Replies

  • Samuel -
    I wouldn't suggest trying to attack the whole problem using a control module, because working directly with the HORN.CV parameter has a number of implied security and configuration requirements.

    - A user with sufficient security to silence the HORN is always logged in to every workstation. (This one scares me a little, because that would mean a View Only user must have write access to HORN.CV.)
    - All users have identical plant area assignments. (Depending on your site's policies, this may not be possible.)
    - All workstations have identical plant area assignments. (If you're at DeltaV <12.3, this may present a licensing challenge.)
    - All workstations are part of the Global Horn Acknowledgement Group. (Could be a safety concern if people from one room can acknowledge the horn on workstations in a different room.)

    One method I've used in the past is a module with just a DI function block, and an event-based Scheduler to do the silencing. Configure the Scheduler to look for the pressed state of the button (whether logical 1 or 0). For example, DVSYS.MyModule/DI1/OUT_D.F_CV = 1, assuming pressing the button closes the circuit, and have that evaluate On True.

    From here, you can add a VBA subroutine to your scheduler that uses the "HornSilence" argument of the frsCommonTasks function. Something like this:

    Private Sub ButtonPressed_OnTrue()
    On Error GoTo ErrorHandler
    frsCommonTasks "HornSilence" ' Check out the iFiX help in the VBA Editor. There are lots of gems like this already built into the product!
    Exit Sub
    ErrorHandler:
    frsHandleError
    End Sub

    Putting on the Safety hat for a moment: Depending on your plant's physical arrangement, you may want to consider multiple buttons based on the locations of your workstations. If you're in a centralized control room, you probably only need one. If you're highly distributed, the above may be too general, and multiple buttons / control modules / scheduler events may be appropriate.

    Hope this helps!
  • In reply to Ray Emerson:

    Hi Ray,
    Thanks for the feedback.
    The push button is located in a CAP panel inside CCR, so there will be only 1 button.
    I'm not a specialist in VB, but according to your suggestion, this scheduler must be running in all workstations, in case one goes down, right? If the answer is true, for maintenance and future migration, there must be a spcial attention for this.
    That's why I tried to let the controller do the job and the logic would be only in 1 place.
  • In reply to Samuel Bandeira:

    Samuel -
    I understand the desire to run this all in the controller. I've had the same request many times from my users, and I've never found a workable scenario to do this in a module without compromising system security.

    One challenge is that THISUSER has scope limitations, both to the current logged-in DeltaV user, and to the workstation that user is logged in to. If you're executing a write to HORN.CV within a controller, the path lacks context.

    You MAY be able to get this working if you write to <WORKSTATION NAME>/HORN.CV, rather than THISUSER. You'll need a separate ACT block for each workstation to allow for straightforward troubleshooting, and to ensure the write goes to every workstation.

    The Scheduler must be running on each workstation because the frsCommonTasks function works locally, not on all workstations in the system.

    I'd still advocate the Scheduler approach. It is absolutely "one more thing" to keep track of during an upgrade, but it's a robust solution I've come back to several times.