Runtime access to the Modbus TCP subscription list requires changing two access modifiers in ModbusBase.vb. Making only SubscriptionList public fails because its element type, SubscriptionInfo, remains private.
Root Cause of the Accessibility Error
SubscriptionList is declared as List(Of SubscriptionInfo). A public member cannot expose a private nested type, which causes the compiler message: SubscriptionList cannot expose type ModbusBase.SubscriptionInfo in namespace AdvancedHMIDrivers through class ModbusBase.
| Declaration | Original access | Required access |
|---|---|---|
SubscriptionList |
Private |
Public |
SubscriptionInfo |
Private |
Public |
Expose the Subscription List
- Open
ModbusBase.vband locate the subscription-list declaration, reported at approximately line 290. - Change
Private SubscriptionList As New List(Of SubscriptionInfo)to a public declaration. - Locate
Private Structure SubscriptionInfoa few lines below it and change that declaration to public as well.
Public SubscriptionList As New List(Of SubscriptionInfo)
Public Structure SubscriptionInfo
' Existing structure members remain unchanged.
End Structure
Read Subscribed Addresses at Runtime
Access the list through the Modbus TCP communication instance. The following loop reads each subscription and writes its address to the console:
For i = 0 To ModbusTCPCom1.SubscriptionList.Count - 1
Console.WriteLine(ModbusTCPCom1.SubscriptionList(i).Address.Address)
Next
The same iteration can supply a runtime ListBox click handler; replace the console output with the existing ListBox insertion method. The evidence does not define a specific ListBox control name or insertion call.
Verification and Scope
Verify that the accessibility error is cleared and that the loop returns the addresses currently held by ModbusTCPCom1.SubscriptionList. This change exposes the existing collection directly; the evidence does not establish whether modifying that collection externally is supported, so use it for inspection unless the driver implementation confirms otherwise.
FAQ
Why can’t a public SubscriptionList use the private SubscriptionInfo type?
The public list exposes SubscriptionInfo through its signature. Change both SubscriptionList and SubscriptionInfo from Private to Public.
How do I read Modbus TCP subscribed addresses at runtime?
Iterate from 0 through ModbusTCPCom1.SubscriptionList.Count - 1 and read SubscriptionList(i).Address.Address.
Where is the Modbus subscription list declared?
It is declared in ModbusBase.vb as Private SubscriptionList As New List(Of SubscriptionInfo), reported at approximately line 290 in the referenced code.