dhendrickson
Member
This is my third attempt at posting. The forum ate my homework the first TWO times...
I am using a Schneider / Momentum M1 processor model
171 CCS 76000-ICE and programming using the Concept software and Function Block Diagrams.
First a little history: We built a device for a customer four years ago and it used this PLC for the start up and shutdown process. The PLC just stands by while the device is running. At the time, the folks that were supposed to take care of the PLC work disappeared and it was handed to me. My first rodeo! It is a fairly straight-forward piece of code and uses 7% of available memory.
The device recently returned to us for some upgrades. We found the PLC's memory backup battery dead and badly corroded.
The PLC / Concept software provides a means to monitor the battery status. I thought this would be a nice feature and included it in the code. When the battery gets low, a warning light is illuminated via a relay. However, it would appear from the dead battery and corrosion that either the warning light circuit didn't work or the customer is blind.
Here is how I approached the battery status logic and circuit:
The software has a check box to enable the battery status coil to be associated with a memory location. I enabled and set the memory location to 1536 as suggested by the help file (the last memory register).
In my code, I use a MOVE function to transfer the battery status bit into a named variable. I do this to make the code more readable.
%001536 -- MOVE -- Battery_Status_Bit
I was constrained by legacy hardware issues and did not have an available DO to trigger the warning light relay. So I used an available AO set to high voltabe to trigger the relay instead. In my logic I created two word constants:
Battery_Good_Voltage = 16#3F3F (0 Volts)
Battery_Bad_Voltage = 16#7FFE (10 Volts)
I used a SELect function to choose one of these constants based on the battery status and store it in a named word variable.
Battery_Status_Bit (G) --
Battery_Good_Voltage (IN0) -- SEL -- Battery_Relay_Voltage
Battery_Bad_Voltage (IN1) --
Finally during the output stage of the code, I use another MOVE function to transfer the voltage into the AO-1 register.
Battery_Relay_Volage -- MOVE -- %400009
In essence, if the battery status is good the AO-1 register is set to 0 volts and the relay coil sees 0 volts. If the battery status is bad, the AO-1 register is set to 10 Volts and the relay coil should trip.
When I have the concept software analyze my code it comes up with the following error:
Address Overlap: Configured '%001536' and Direct '%001536'
Nowhere in my code other than noted above do I refer to 1536.
Any thoughts on where I should take a look would be appreciated. Thanks in advance.
-dch
I am using a Schneider / Momentum M1 processor model
171 CCS 76000-ICE and programming using the Concept software and Function Block Diagrams.
First a little history: We built a device for a customer four years ago and it used this PLC for the start up and shutdown process. The PLC just stands by while the device is running. At the time, the folks that were supposed to take care of the PLC work disappeared and it was handed to me. My first rodeo! It is a fairly straight-forward piece of code and uses 7% of available memory.
The device recently returned to us for some upgrades. We found the PLC's memory backup battery dead and badly corroded.
The PLC / Concept software provides a means to monitor the battery status. I thought this would be a nice feature and included it in the code. When the battery gets low, a warning light is illuminated via a relay. However, it would appear from the dead battery and corrosion that either the warning light circuit didn't work or the customer is blind.
Here is how I approached the battery status logic and circuit:
The software has a check box to enable the battery status coil to be associated with a memory location. I enabled and set the memory location to 1536 as suggested by the help file (the last memory register).
In my code, I use a MOVE function to transfer the battery status bit into a named variable. I do this to make the code more readable.
%001536 -- MOVE -- Battery_Status_Bit
I was constrained by legacy hardware issues and did not have an available DO to trigger the warning light relay. So I used an available AO set to high voltabe to trigger the relay instead. In my logic I created two word constants:
Battery_Good_Voltage = 16#3F3F (0 Volts)
Battery_Bad_Voltage = 16#7FFE (10 Volts)
I used a SELect function to choose one of these constants based on the battery status and store it in a named word variable.
Battery_Status_Bit (G) --
Battery_Good_Voltage (IN0) -- SEL -- Battery_Relay_Voltage
Battery_Bad_Voltage (IN1) --
Finally during the output stage of the code, I use another MOVE function to transfer the voltage into the AO-1 register.
Battery_Relay_Volage -- MOVE -- %400009
In essence, if the battery status is good the AO-1 register is set to 0 volts and the relay coil sees 0 volts. If the battery status is bad, the AO-1 register is set to 10 Volts and the relay coil should trip.
When I have the concept software analyze my code it comes up with the following error:
Address Overlap: Configured '%001536' and Direct '%001536'
Nowhere in my code other than noted above do I refer to 1536.
Any thoughts on where I should take a look would be appreciated. Thanks in advance.
-dch