I’m trying to setup my RTS-N-LCD with a T3-TB, and have some questions. My RTS (two actually) are connected to the main RS485 port of the T3-TB at 9600 baud and all devices are using Bacnet. I’m able to read from (AI2) and read/write (AV31) to the devices. The T3000 software and firmware for all devices is up to date.
First question - Outdoor Temperature:
The T3000 software information page for RTS allows the scroll display to be selected to show (among other things) Outdoor Temperature and User Message. Although I can enable the Outdoor Temperature on the Scroll, I can’t figure out how to send a temperature to the RTS from a Control Basic program on the T3. There is no Bacnet AVx for outside temperature. There is a modbus registry (181), but I don’t see how this can be used over Bacnet. From the T3000 software source code, I see that the modbus registers can be accessed over bacnet using a private structure - is this exposed in Control Basic, or is the only way to send the Outdoor Temperature to switch to Modbus?
Second question - User Message:
If I enable the user message on the scroll display it shows the text “Welcome”. How can this be changed?
Third question - TX / RX:
These are currently showing 0 always on the scroll display (Bacnet is configured). Is this normal? I’m sure I saw values earlier when I had temporarily switched to using Modbus to update the firmware.
Fourth question - Modbus or Bacnet:
For a new setup, where I can choose either, which is preferred? I was leaning towards Bacnet (ease of programming as described elsewhere in the forum), but if the bacnet registers are just a small subset of the modbus ones, then I may switch.
Last question - open source:
Is the RTS firmware source on github like the T3-TB fimware. Although I have no way to cross-compile into ARM, I’d find it useful to figure out what is going on in the background?
Thanks for spending so much time on this, Iam replying from my phone while on the road so this is brief. We’ll work up a solution for you. It will probably take a firmware update but we’ll get this going ASAP.
Thanks. Enjoy your road trip. I’m jealous, we’re pretty locked down here due to the pandemic - but then again that gives me lots of time to work with my new devices!
I switched to Modbus to see if I could successfully set the outdoor temperature. But then, since I’m switching between Bacnet and Modbus to see the possibilities available to each mode, I tried to write a program which would grab the remote room temperature (RTx) and setpoints (SPx) and would work for both Bacnet and Modbus.
5 IF MB_REG61 = 7 THEN MM = 1 ELSE MM = 0
10 REM BACNET
20 IF MM = 0 THEN RT1 = 4997AI2
30 IF MM = 0 THEN RT2 = 1937AI2
40 IF MM = 0 THEN SP1 = 4997AV31
50 IF MM = 0 THEN SP2 = 1937AV31
60 REM MODBUS
70 IF MM = 1 THEN RT1 = 1.10.MB_REG119 / 10
80 IF MM = 1 THEN RT2 = 1.9.MB_REG119 / 10
90 IF MM = 1 THEN SP1 = 1.10.MB_REG167 / 10
100 IF MM = 1 THEN SP2 = 1.9.MB_REG167 / 10
Of the program, everything works (albeit not very optimized) - except for line 5.
What’s the syntax to read the T3-TB local register 61?
Panel number is 1.
I tried 1.1.MB_REG61 - but after a send/refresh cycle it dropped the “1.1.”
The product has been updated quite a lot since that version was out. if you could make do with the existing features for those units it would be appreciated. the latest production has these issues fixed as well as many new features.
if you have a lot of devices out there in the field we’ll support you.
Sorry are you referring to the T3-TB, or the RTS or both? I just purchased all of my units a few weeks ago. I don’t understand why I wasn’t sent the latest production versions?
Modbus seems to be better supported on the RTS than Bacnet. I’ll switch and test some more.
Chelsea will check into this.
I tried with Modbus, and although I can write into the register, the value does not display correctly.
This is the Control Basic program:
40 REM OUTDOOR TEMP
50 RTS_OT = INT ( IN1 * 10 )
60 1.10.MB_REG181 = RTS_OT
70 1.11.MB_REG181 = RTS_OT
The problem seems to be that internal variables are float datatype, and the value is not converted to an integer when writing into the register. EDIT - this was an incorrect analysis on my part. See my later post.
For example the temperature probe (IN1) is reading 19.9 degrees, but what gets written is 51143 (instead of 199), which the RTS displays as -1439.3.
Is there any way to force writing an integer value instead of a float similar (but opposite) to the way MB_REG_FLOAT_ABCD converts to a float?
REG181 is an invalid register on RTS , if you want to write ambient temperature value to calibrate RTS ,please change your program REG181 to REG119 .
I spent some time using the Modbus Poll utility and have discovered what is happening when the RTS Outdoor Temperature register MB_REG181 (ref: 03ModbusBacnetRegistersList.xls) is is being written to. I also spent some time to create a program to get around the weirdness and can now successfully (most of the time) display the outdoor temp on the RTS. Yay!
When the register is written to, the existing value is bit shifted left 8 bits, then the new value is inserted using a bitwise ‘or’ function. I don’t know why this occurs - it doesn’t seem to happen with other registers.
Here’s an example using hex notation:
original value 0x00fa (integer value 250, showing on the RTS 25.0)
new value written 0x0103 (integer value 259)
when the value is written, the original value gets shifted left 8 bits (to 0xfa00)
then the new value is concatenated with bitwise 'or'
so 0xfa00 | 0x0103 => 0xfb03 (integer value -1277, showing on the RTS -127.7)
the next value written will be concatenated with bitwise 'or' to 0x0300
The only way I found around this is to first write 0x0 to clear the lower 8 bits, then write the temperature I actually want displayed. An incorrect value will briefly show, but if we quickly write 0x0, then the value, and finally wait before refreshing the display, then the correct value will be displayed most of the time.
It’s a fairly ugly workaround, but it works!
40 REM OUTDOOR TEMP
50 REM WHEN WE WRITE TO REG181 IT SHIFTS LEFT ONE BYTE, THEN OR'S WITH VALUE SENT
60 REM EG IF EXISTING VALUE IS 0X1234, THEN 0XABCD IS SENT
70 REM RESULT IS 0X3400 | 0XABCD == 0X20CD
80 RTS_OT_NOW = INT ( IN1 * 10 )
90 IF 0.500 > ABS ( CNT ) AND 0.500 < ABS ( RTS_OT_NOW - RTS_OT ) THEN Z = 1 ELSE Z = 0
100 IF Z THEN 1.10.MB_REG181 = 0
110 IF Z THEN 1.11.MB_REG181 = 0
120 IF 0.500 > ABS ( CNT ) AND NOT Z THEN CNT = 60
130 IF -0.500 > CNT THEN Z = 1 ELSE Z = 0
140 IF Z THEN 1.10.MB_REG181 = RTS_OT_NOW
150 IF Z THEN 1.11.MB_REG181 = RTS_OT_NOW
160 IF Z THEN RTS_OT = RTS_OT_NOW
170 IF Z THEN CNT = 60
180 CNT = MIN ( CNT - 1 , 60 )
220 REM RUN EVERY SECOND EXCEPT WHEN UPDATING OUTDOOR TEMP
230 IF NOT Z THEN WAIT 0.01
I hope this helps someone else.
Sorry about all the hoops you have had to jump through with this. the team will check through your work and make it easier in modbus. our focus has been with bacnet.
T3-XB dont support R/W of local register.
Sorry, REG181 is the wrong register number, we have updated our register list for the next release of T3000. REG119 is the correct register for reading the temperature.
Thanks for you reply, and yes I agree with you that REG119 contains the output of the temperature sensor on the RTS-N-LCD, but reading the temperature is not the goal of the above post. The goal of the program is to send a value (obtained from a T3-TB analog input) to the RTS and display it as the Outdoor temperature.
The Outdoor temperature can be activated on the bottom scrolling line via the T3000 setup:
REG181 is documented in 03ModbusBacnetRegistersList.xls as the register for the outdoor temperature:
Here is a screenshot from Modbus Poll showing both REG181 (which was set using the above program), and REG119 (which the unit sets itself using the onboard sensor). REG181 contains the value 167, and REG119 contains the value 181:
A photo of the RTS shows the Outdoor temperature as 16.7 degrees and the Temperature as 18.1 degrees. Both of which correspond to the values in REG181 / REG119:
Seems simple, but the program can’t simply write into REG181. There is manipulation of the data sent, and the value put into in the registry isn’t exactly what is written. I investigated this manipulation, and by luck I found exactly what was happening and a workaround (details about the manipulation are in the above post). The posted program gets around the manipulation is by writing twice - first write the value of 0 and secondly write the desired display value. For a fraction of a second, between the first 0 and the desired value, the displayed Outdoor temperature is incorrect. For example, with a temperature of 16.7 (registry contains hex value 0x00A7), the display will briefly show -2278.4 deg (registry contains hex value 0xA700 after 0 is written). Then on the second write the desired value is shown. To minimize the incorrect values, the program only updates the temperature once a minute, and only when the temperature has changed.
This has been fixed some time ago, you can update to the latest firmware rev35 for RTS by navigating to T3000->Help->Check for Update->Download Firmware and Update.
Thanks for the fix.
I can confirm that with the CO2_Node_rev35.hex firmware uploaded yesterday, that the Outdoor Temperature on the scroll now updates properly when REG181 is written (and there is no need to write twice as described in my previous posts in this thread).