Spare I/O to BACnet

I have noticed that “unused” Inputs and Outputs in the tables (ie IN_n or OUT_n above the physical limits of a given controller) are able to be “addressed” by the T3 controller. This makes them useful as additional quasi-global variables so the results can be directly monitored.

However when compiling a BACnet tag list, these upper INs and OUTs are omitted/ignored - I presume because they are categorised as “virtual”. Either digital or analog “range” can be selected but this does not convert them into Digital/Binary Value or Analog Value in BACnet.

In T3000 the physical UIs and OUTs have their type (A or D) allocated by the selected Range - and this feeds into BACnet tags.

Would it be possible to allocate high-order INs and OUTs to type A or D based on their selected Range (rather than be Virtual), and thereby have them included in the BACnet tag list??
It might be useful to indicate virtual I/O by a different colour than “real I/O”.

For a T3-BB this would make another 72 BACnet variables available making 200 global variables in total.

Yes, the spare IO can be used as global vars just like vars. Its a good trick to get more vars in your program. I’ll encourage you to check out the latest firmware which supports dynamic allocation of the resources. The space left from the unused IO can be directly used for more vars, I will update this post shortly with just how many vars you can get now.

The issue you report about Bacnet not properly recognizing virtual IO, as long as the range field is filled in from the default of ‘unused’ it will show up as a bacnet objects as far as I am aware. You could show a couple screen shots of what you’re seeing and we’ll check into this.

There is nothing to show on a screenshot - my query is about what’s missing from the screenshot!

eg, I set up IN40 with range/units Off/On (range: digital 1). I can write to it in PLC, and see the value changing in the Input Table. It has type “Virtual”.

I upload all the BACnet tags to my BACnet HMI referencing tag numbers (not tag names), but there is no Binary Input 40 nor Binary Value 40 to be seen in the resulting tag list. I have no idea how/where the BACnet taglist is generated - does the T3-BB generate a tag table and export it? or does the HMI interrogate the various I/O/V tables and import from them?

I confirm that if units/range “unused” is set for hardware I/O they too do not appear in the BACnet Taglist.

Another minor point about Units/Range selection, in some instances I just need to put a numeric value into a variable - with no engineering units. It works if I use “count” or I can set up a custom unts/range - “number”, but I wonder if there is a case for a standard option for number/constant/dimensionless ?label?

Integrating Bacnet HMI:
I would use the T3000 → tools → Bacnet tool (Yabe) to debug any issues integrating your PLC to the T3 contollers. It will show you the ‘ground truth’ of what bacnet objects are present and their properties. Once you verify that you can turn your attention to the PLC and better understand why it may not be seeing the same things as Yabe is seeing.

Unitless Vars:
The counter is the best option for now, I have previosly written up a todo item for the team to add a unitless range as well, I’ll follow up on that.

I looked at the BACnet tag list using BACnet tools - and found all the “range-assigned” inputs, and when I imported the full tag list into my HMI - they were all there as well. I think it might take a T3000 save to populate the full lists.

Yabe and most bacnet tools do a discover on startup. If you make changes you need to do the discovery once again.

Within T3000, are there any restrictions or limitations on how/where “unpopulated I/O as global variables” can be used? Ie, can these be used in just the same way, same functions etc as the 128 global variables??

There are some new features and I beleive when you do an update you will get them.

The gist of it is you dont have to use tricks to get more variables, memory is dynamically allocated to variables from the overall ins/outs/vars pool. Just keep adding more till you run out of ram. Chelsea will log in soon and give the full details.

Starting from firmware revision 68.5, all virtual I/O channels support mapping to BACnet points. It supports 64 IN(AI+BI), 64 OUT(AO+BO), 128VAR(AV + BV).You may update your firmware to enable this feature.

The feature Maurice mentions, dynamic allocation of resources, is done but not fully tested. I will push it out as a firmware update in the next day or two. If you only use 10 ins/outs in your system the 118 unused IO can be used as vars. You just have to configure the vars and they are automatically assigned from the pool as you work.

I have already allocated many of the “spare” I/O as variables. Will these allocations “survive” the firmware update? Or, will I need to re-define these?

I have not used contiguous groups of virtual I/O - will that cause a problem?

The items will survive the firmware update but you can save the prog file just in case. Contiguous or not should not matter as well.

After the firmware update, the original bacnet instance number and object ordering will remain unchanged, your existing functionality will not be affected.