Greetings! A refrigeration/EMS guy is here to learn something new

Hello!

My name is Mike and I apologize if this is the wrong forum for this, but I didn’t see another more applicable. I feel the need to introduce myself because I am sure I will be asking you fine folks questions rather frequently as I struggle to make my T3-TB into the box that I want it to be.

I’m a refrigeration service engineer by trade on the east coast of the USA with 13 years in the industry doing supermarket refrigeration & EMS. I primarily deal with Danfoss equipment and have become very proficient at it. I’ve worked extensively on everything from the Z-panel to the 880 doing service work and control overlays. I know my way around a building controller, but I’ve never had to build the logic from scratch.

Danfoss makes good equipment, but it’s expensive. I have many smaller customers (restaurants, churches, etc.) who have walk-in boxes and other equipment that they would like to have monitored for temperature alarms, but giving them a price of $3k+ to install an 880 and the necessary boards is simply cost prohibitive. In addition, not everything I’d like to control comes as a built-in feature. Some things still be need to be run from custom ‘calculations’ as they are referred to by Danfoss.

When I stumbled across the T3000 controller, I got excited! I had found what appeared to be a very capable little controller for a very reasonable price. Four-days later it’s hooked up and reading a 10k sensor on my desk! It’s not much, but it’s a start.

My current vision for the box is for it to be a walk-in controller capable of emailing temperature alarms using a tablet PC as the front end so the owner can have a nice little visual display and so the service tech doesn’t need a laptop to change set points (the vast majority of techs are not sophisticated enough to deal with this sort of thing).

From looking at the programming examples it looks to me like I will have to set things up the following way:
Inputs: Box temp sensor, evap coil sensor (for defrost termination), possibly a box-door switch (to kill fans on a freezer when someone opens the door).

Outputs: compressor, defrost relay, fans, lights, alarm strobe

Variables (where I will need the most help):
Time (A box has to defrost at a set interval / based off the temp of the defrost termination sensor)
Target temp (desired box temperature)
Differential ( cut in / cut out for condensing unit. Ex: Target 32f with differential of 2 cuts in at 34 and out at 30)
Defrost Duration Min / Max (if something happens to the termination sensor, the box will defrost for a minimum of X amount of time, but will terminate on temperature after that minimum has been exceeded OR will continue to defrost until the MAX time has been reached)
Termination temperature (the system should cancel defrost and return to cooling after a set temp is reached either by the space temp OR termination sensor reading)
Alarm Delay (If box temp is 48f > for 60 minutes then energize alarm relay)

I’m sure I’ve forgotten something, but basic control is all I’m concerned with at this moment. I apologize in advance for asking what many of you guys who are comfortable writing code will consider dumb questions. I just ask that you bear with me while I struggle!

I am looking forward to the experience!

Here’s a quick program I whipped up. First step is to enter the inputs, outputs and the many variables. You’ll notice there’s a lot of variables, its an interactive process of tweaking the logic and adding variables.

And here’s the program which covers most of what I could gather from your sequence. There’s a bit of work left to be done on the defrost termination, send some feedback and I can work on it more.
10 REM **** WALK IN COOLER #1 **********
20 IF RM1TEMP > RM1SP + RM1DELT / 2 THEN START RM1COOL
30 IF RM1TEMP < RM1DEF - RM1DELT / 2 THEN STOP RM1COOL
40 IF NOT RM1COOL AND NOT RM1DEF THEN STOP RM1COMP
50 REM ******* FAN *******
60 IF RM1COMP THEN START RM1FAN ELSE STOP RM1FAN
70 REM ******* DEFROST VALVE *********
80 IF RM1DEFM THEN START RM1DEF ELSE STOP RM1DEF
90 REM ****** TIMERS **********
100 RM1TSD = TIME-OFF ( RM1DEF )
110 RM1TTD = RM1DINT - RM1TSD
120 IF RM1TTD < 00:00:00 THEN RM1TTD = 00:00:00
130 RM1DTMR = TIME-ON ( RM1DEFM )
140 RM1DTL = RM1DD - RM1DTMR
150 IF RM1DTL < 00:00:00 THEN RM1DTL = 00:00:00
160 REM ****** DEFROST MODE *******
170 IF+ RM1TTD = 00:00:00 THEN START RM1DEFM
180 IF+ RM1DTL = 00:00:00 THEN STOP RM1DEFM
190 REM ***** * TERMINATE DEFROST MODE WHEN EVAP TEMP OR ROOM TEMP IS LOW ********
191 REM TBD: NEEDS SOME WORK HERE
200 IF RM1DEFM AND RM1TEMP < RM1DTT THEN START RM1DTM
210 IF RM1TEMP < 30 THEN STOP RM1DTM
220 IF- RM1DEFM THEN STOP RM1DTM
230 REM NOT SURE IF WE NEED THIS CATCHALL STATEMENT:
240 REM IF TIME-ON ( RM1DEFM ) > 00:10:00 THEN STOP RM1DTM

Here’s the program which generates the alarms, after 1000 seconds the alarm will be triggered, adjust at will.

And here’s the email setup for the alarms. One note on the emailed alarms feature is this is a new feature for us tested out on only a couple of mail servers. SSL and TLS are not supported just yet so your choice of mail servers is limited these days. We’re working on adding encryption and will be pushing out an update soon. Send me an email and I’ll set you up with a free smtp server and account.

image

Here’s a graphic image with the i/o and various settings on a system graphic.

And here’s a trend log of the defrost cycle, its currently set up for a very small interval for debugging purposes.

Here’s the program developed for this example:

ColdStorageRev0.prog (64.5 KB)

2 Likes

Mike,
You’ll soon see that Maurice is, hands-down, the best feature of the T3-xx world. And we have found the T3 to be very cost-effective for building automation. I can see by his response that Maurice has taken very good care of you. And the T3000 software has continued to mature with excellent addition of email outputs. The only additional advice I have for you is to get one personal spare T3-TB or LB. They’re pretty inexpensive and that way you’ll have it for instant turn-around if trouble ever pops up on a mission critical application. I have 3 T3-LB’s that control or monitor virtually every mechanical system in our 7 story, central chilled, condo building. I sleep better at night knowing I have a spare if any go bad.

2 Likes

Wooooow… Maurice… you didn’t have to do that, but holy moly have you saved me a lot of time! I am blown away. Thank you! I will check out the program and certainly let you know.

1 Like

Thank you again for the foundation for this program Maurice. I wasn’t smart enough to get that program to actually DO anything but I managed to understand enough to get the program working as I would like to see it save some bells and whistles.

Here is the program I came up with using yours as a starting block:

10 REM **** WALK IN FREEZER #1 ****
11 REM **** SOLENOID / TEMP CONTROL *********
20 IF RM1TEMP > RM1SP + RM1DELTA THEN START RM1COOL
30 IF RM1TEMP < RM1SP - RM1DELTA THEN STOP RM1COOL
40 IF RM1COOL THEN START RM1SOL
41 REM
50 REM **** DOOR SWITCH FOR FANS***********
60 IF RM1DOOR THEN START RM1FAN
61 IF NOT RM1DOOR THEN STOP RM1SOL
62 REM
70 REM ******* DEFROST TASKS *********
80 IF RM1DEFM THEN START RM1DEF ELSE STOP RM1DEF
81 IF RM1DEFM THEN STOP RM1SOL
82 IF RM1DEFM THEN STOP RM1FAN
83 REM
90 REM ****** TIMERS **********
100 RM1TSD = TIME-OFF ( RM1DEF )
110 RM1TTD = RM1DINT - RM1TSD
120 IF RM1TTD < 00:00:00 THEN RM1TTD = 00:00:00
130 RM1DTMR = TIME-ON ( RM1DEFM )
140 RM1DTL = RM1DMAX - RM1DTMR
150 IF RM1DTL < 00:00:00 THEN RM1DTL = 00:00:00
151 REM
160 REM ****** DEFROST MODE *******
170 IF+ RM1TTD = 00:00:00 THEN START RM1DEFM
180 IF+ RM1DTL = 00:00:00 THEN STOP RM1DEFM
181 REM
190 REM *****TERMINATE DEFROST ON TIME OR TEMPERATURE ********
200 IF RM1DEFM AND RM1TEMP > RM1DTT AND TIME-ON ( RM1DEFM ) > RM1DMIN THEN START RM1DTM ELSE STOP RM1DTM
201 IF RM1DTM THEN STOP RM1DEFM
202 REM
203 REM *TERMINATE DEFROST ON DURATION, NO MATTER WHAT
210 IF TIME-ON ( RM1DEFM ) > RM1DMAX THEN STOP RM1DEFM


Those bare REM’s are there just so I can separate the text enough to make it easier on my eyes. I am sure this code is rather brutal and could be much more elegantly written, but I understand it and am not sophisticated enough yet to make it work any other way.

This program is set up for a walk-in freezer scenario with electric / hot gas defrost terminated off minimum defrost time / box temp OR a maximum failsafe duration. The times in the program are there for testing and will surely need to be changed. From what I can tell, it is working as intended. I even managed to get the conditional defrost termination happening. One thing I haven’t been able to do is figure out how to store and display the last defrost duration. I tried setting RM1DTMR to VAR14 but it just resets after defrost like the other timer. I will have to work on that.

I haven’t looked much at the alarm or history tabs yet. It took me most of the day to get this far! Let me know what you think. I appreciate any and all input!
ColdStorageRev1.prog (64.5 KB)

1 Like

Looks like you are well under way here and the program looks functional. There’s no need to make it more elegant, stick to one simple rule or bit of logic per line and your life will be much easier when you come back to make changes later. Lines lower in the program will override the earlier ones so there’s no need to make long complicated programming statements.

Standing by to help more as you finish things up.

1 Like

Mike,
Mike here, I’ve been down the same path for sometime now. I’ve been on and off the project for almost a year now. I was going down the PM5e as a case controller, however it is not ready for that yet. It is supposed to have the same programmability as a T3 controller in the near future. So I made this program up real quick as a bases for when it was ready I would wire it in to a stand alone case to test.
For now it is is sort of limited to 4 defrosts a day due to the limit of the built in schedules. it is real simple for now with room to grow. I still don’t know how to create graphics in the t3000 software as of yet, but the theory is the end user can change the case setpoint and differential, defrost setpoint and times of defrost in the graphics so no need to get into the program for them. I was also going to have a momentary button for the ever infamous fix for all cases “force a defrost”. So the local tech can press the button and the case will go through a normal defrost when not scheduled to do so.

I also forgot to mention I had this setup to control superheat with a EEV, having problems getting a PT chart into the controller to perform superheat calculations right now.

Anyway here it is.

1 Like

Mike, thanks for your detailed post here, we are on a one week break here, after which I will reply in detail. As well as put a push to get you a programmable case controller. The hardware is just waiting for a developer of which I am short on these days.

Updated:
The line 30 is rather complex, I would make a mode variable and flip that true or false based on the conditions. Then use that to open & close valves, etc.Keeping it simple to one action per line rather than bunching them up into a single line like this. Its much easier to debug and much easier to follow the logic when you find yourself re-debugging this program on site in a year or two from now. Also note the deadband in my line 31, in your case if the DAT is near the setpoint you could get valves chattering without some deadband.

30 IF NOT DEFROST AND DAT > CASE_SP THEN START VARX
31 IF DEFROST OR DAT < CASE_SP - 1 THEN STOP VARX
32 IF VARX THEN EEPR = PID1 ELSE EEPR = 0
33 IF VARX THEN STOP EEPR

Graphics: Here’s a post I did a while back about how to put graphics into the displays. THere are other posts as well, search for ‘graphics’.

Schedules: It would be a simple work around to add a second schedule and incorporate 4 more events into your defrost schedule. Another option would be to add some timers, more like my program at the firsts posts. Set the intervals and you have fine grained control over the number of defrosts, hundreds per day if you like.

image

1 Like