mafia03
2011-03-22, 18:23
من فظلكم عندي مجموعة برامج بلغة c ولم افهم منها شيء فمن هو متخصص بهذه اللغة ارجو ان يفيدني...
/************************************************** **************************
* This program initialise generate the common alarms for the Gas Alarm Systems
*
* | ALW_ON +--------------+
* +----| |------| CALL GCMNALM |--
* | | (EXTERNAL) |
* | +--------------+
*
* %R3000 No. of Horners RTU Module (Max=6)
* %R3001 Loop 1 - MSByte= Chassis, LSByte=Slot
* %R3002 Loop 1 - Last Addr Installed Devices (Start MODBUS Address = Node 2)
* %R3003 Loop 2 - MSByte= Chassis, LSByte=Slot
* %R3004 Loop 2 - Last Addr Installed Devices (Start MODBUS Address = Node 2)
* %R3005 Loop 3 - MSByte= Chassis, LSByte=Slot
* %R3006 Loop 3 - Last Addr Installed Devices (Start MODBUS Address = Node 2)
* %R3007 Loop 4 - MSByte= Chassis, LSByte=Slot
* %R3008 Loop 4 - Last Addr Installed Devices (Start MODBUS Address = Node 2)
* %R3009 Loop 5 - MSByte= Chassis, LSByte=Slot
* %R3010 Loop 5 - Last Addr Installed Devices (Start MODBUS Address = Node 2)
* %R3011 Loop 6 - MSByte= Chassis, LSByte=Slot
* %R3012 Loop 6 - Last Addr Installed Devices (Start MODBUS Address = Node 2)
* %R199 - Common Alarm Reg
* bit 0 - Gas Alarm High
* bit 1 - Gas Alarm High High
* bit 2 - Gas Fault
*
* %R201 - Gas Detector Reading Node 1
* %R202 - Gas Detector Reading Node 2
* ...
*
************************************************** ****************************/
#include "plcc9030.h"
EXE_stack_size = 2048;
#define CFG_REG 3000 // Start of Configuratio Registers
#define NO_LOOP (CFG_REG+0) // No of Active Loops
#define NO_GD (CFG_REG+2) // No of Gas Detectors in Loop
#define GD_CMNALM 199 // Common Alarm Register
#define PLC_FLTREG 200
#define GD_REG 201 // %R201 Starting of GD Registers
#define GD_MAXADR 32 // Maximum Addr = 32 GD in loop
#define GD_LOOPMAX 6 // Maximum of 6 Loops
void main(void)
{
word i,j, LastAdr, GasH, GasHH, GasF;
GasHH = 0;
for (i=0; i<RW(NO_LOOP); i++) {
LastAdr = RW(NO_GD+i*2);
for (j=2; j<=LastAdr; j++) {
if (RI((j-1) + GD_REG + i*GD_MAXADR)>= -13108) { // 50%
GasHH = 1;
break;
}
}
if (GasHH) break;
}
if (GasHH)
RW(GD_CMNALM) |= 0x0002;
else
RW(GD_CMNALM) &= 0xfffd;
GasH=0;
for (i=0; i<RW(NO_LOOP); i++) {
LastAdr = RW(NO_GD+i*2);
for (j=2; j<=LastAdr; j++) {
if ((RI((j-1) + GD_REG + i*GD_MAXADR)>= -23594) && // 10%
(RI((j-1) + GD_REG + i*GD_MAXADR)< -13108) ) {// 50%
GasH = 1;
break;
}
}
if (GasH) break;
}
if (GasH)
RW(GD_CMNALM) |= 0x0001;
else
RW(GD_CMNALM) &= 0xfffe;
GasF=0;
for (i=0; i<RW(NO_LOOP); i++) {
LastAdr = RW(NO_GD+i*2);
for (j=2; j<=LastAdr; j++) {
if (RI((j-1) + GD_REG + i*GD_MAXADR) < -30278) { // Cal & Fault
GasF = 1;
break;
}
}
if (GasF) break;
}
if (RW((PLC_FLTREG)) !=0) GasF=1;
if (GasF)
RW(GD_CMNALM) |= 0x0004;
else
RW(GD_CMNALM) &= 0xfffb;
}
/************************************************** **************************
* This program initialise generate the common alarms for the Gas Alarm Systems
*
* | ALW_ON +--------------+
* +----| |------| CALL GCMNALM |--
* | | (EXTERNAL) |
* | +--------------+
*
* %R3000 No. of Horners RTU Module (Max=6)
* %R3001 Loop 1 - MSByte= Chassis, LSByte=Slot
* %R3002 Loop 1 - Last Addr Installed Devices (Start MODBUS Address = Node 2)
* %R3003 Loop 2 - MSByte= Chassis, LSByte=Slot
* %R3004 Loop 2 - Last Addr Installed Devices (Start MODBUS Address = Node 2)
* %R3005 Loop 3 - MSByte= Chassis, LSByte=Slot
* %R3006 Loop 3 - Last Addr Installed Devices (Start MODBUS Address = Node 2)
* %R3007 Loop 4 - MSByte= Chassis, LSByte=Slot
* %R3008 Loop 4 - Last Addr Installed Devices (Start MODBUS Address = Node 2)
* %R3009 Loop 5 - MSByte= Chassis, LSByte=Slot
* %R3010 Loop 5 - Last Addr Installed Devices (Start MODBUS Address = Node 2)
* %R3011 Loop 6 - MSByte= Chassis, LSByte=Slot
* %R3012 Loop 6 - Last Addr Installed Devices (Start MODBUS Address = Node 2)
* %R199 - Common Alarm Reg
* bit 0 - Gas Alarm High
* bit 1 - Gas Alarm High High
* bit 2 - Gas Fault
*
* %R201 - Gas Detector Reading Node 1
* %R202 - Gas Detector Reading Node 2
* ...
*
************************************************** ****************************/
#include "plcc9030.h"
EXE_stack_size = 2048;
#define CFG_REG 3000 // Start of Configuratio Registers
#define NO_LOOP (CFG_REG+0) // No of Active Loops
#define NO_GD (CFG_REG+2) // No of Gas Detectors in Loop
#define GD_CMNALM 199 // Common Alarm Register
#define PLC_FLTREG 200
#define GD_REG 201 // %R201 Starting of GD Registers
#define GD_MAXADR 32 // Maximum Addr = 32 GD in loop
#define GD_LOOPMAX 6 // Maximum of 6 Loops
void main(void)
{
word i,j, LastAdr, GasH, GasHH, GasF;
GasHH = 0;
for (i=0; i<RW(NO_LOOP); i++) {
LastAdr = RW(NO_GD+i*2);
for (j=2; j<=LastAdr; j++) {
if (RI((j-1) + GD_REG + i*GD_MAXADR)>= -13108) { // 50%
GasHH = 1;
break;
}
}
if (GasHH) break;
}
if (GasHH)
RW(GD_CMNALM) |= 0x0002;
else
RW(GD_CMNALM) &= 0xfffd;
GasH=0;
for (i=0; i<RW(NO_LOOP); i++) {
LastAdr = RW(NO_GD+i*2);
for (j=2; j<=LastAdr; j++) {
if ((RI((j-1) + GD_REG + i*GD_MAXADR)>= -23594) && // 10%
(RI((j-1) + GD_REG + i*GD_MAXADR)< -13108) ) {// 50%
GasH = 1;
break;
}
}
if (GasH) break;
}
if (GasH)
RW(GD_CMNALM) |= 0x0001;
else
RW(GD_CMNALM) &= 0xfffe;
GasF=0;
for (i=0; i<RW(NO_LOOP); i++) {
LastAdr = RW(NO_GD+i*2);
for (j=2; j<=LastAdr; j++) {
if (RI((j-1) + GD_REG + i*GD_MAXADR) < -30278) { // Cal & Fault
GasF = 1;
break;
}
}
if (GasF) break;
}
if (RW((PLC_FLTREG)) !=0) GasF=1;
if (GasF)
RW(GD_CMNALM) |= 0x0004;
else
RW(GD_CMNALM) &= 0xfffb;
}