#define CCS_PIC_C // CCS C Compiler, Custom Computer Services, Inc. #ifdef CCS_PIC_C #device PIC16F628 #include <16F628.h> #FUSES 1=0x3F62 #USE FAST_IO(A) #USE FAST_IO(B) #use delay(clock=4000000) #include "ladder.h" #include "PROJETO EM LADDER.h" #define setPortDigitalIO STATIC ldBOOL Ib_rung_top = 0; #ifndef USE_MACRO ldBOOL Read_Ub_XB1(void) { return input_state(PIN_A1); } #endif STATIC ldBOOL Ub_RB1 = 0; #ifndef USE_MACRO ldBOOL Read_Ub_XF1(void) A2{ return input_state(PIN_B3); } #endif STATIC ldBOOL Ub_RF1 = 0; #ifndef USE_MACRO // LDmicro provide this function. ldBOOL Read_Ub_XF2(void) { return input_state(PIN_A3); } #endif STATIC ldBOOL Ub_RF2 = 0; #ifndef USE_MACRO // LDmicro provide these functions. ldBOOL Read_Ub_YLED2(void) { return input_state(PIN_B4); } void Write_Ub_YLED2(ldBOOL b) { if(b) output_high(PIN_B4); else output_low(PIN_B4); } void Write1_Ub_YLED2(void) { output_high(PIN_B4); } void Write0_Ub_YLED2(void) { output_low(PIN_B4); } #endif STATIC ldBOOL Ib_parOut_0 = 0; STATIC ldBOOL Ib_parThis_0 = 0; STATIC ldBOOL Ub_R1 = 0; #ifndef USE_MACRO // LDmicro provide these functions. ldBOOL Read_Ub_YLED1(void) { return input_state(PIN_B3); } void Write_Ub_YLED1(ldBOOL b) { if(b) output_high(PIN_B3); else output_low(PIN_B3); } void Write1_Ub_YLED1(void) { output_high(PIN_B3); } void Write0_Ub_YLED1(void) { output_low(PIN_B3); } #endif STATIC ldBOOL Ib_parOut_1 = 0; STATIC ldBOOL Ib_parThis_1 = 0; STATIC ldBOOL Ib_parOut_2 = 0; STATIC ldBOOL Ib_parThis_2 = 0; STATIC ldBOOL Ib_parOut_3 = 0; STATIC ldBOOL Ib_parThis_3 = 0; #ifndef USE_MACRO // LDmicro provide this function. ldBOOL Read_Ub_XB2(void) { return input_state(PIN_A4); } #endif STATIC ldBOOL Ub_R2 = 0; STATIC ldBOOL Ib_parOut_4 = 0; STATIC ldBOOL Ib_parThis_4 = 0; STATIC ldBOOL Ib_parOut_5 = 0; STATIC ldBOOL Ib_parThis_5 = 0; #ifndef USE_MACRO // LDmicro provide these functions. ldBOOL Read_Ub_YBIP(void) { return input_state(PIN_B2); } void Write_Ub_YBIP(ldBOOL b) { if(b) output_high(PIN_B2); else output_low(PIN_B2); } void Write1_Ub_YBIP(void) { output_high(PIN_B2); } void Write0_Ub_YBIP(void) { output_low(PIN_B2); } #endif STATIC ldBOOL Ib_parOut_6 = 0; STATIC ldBOOL Ib_parThis_6 = 0; #ifndef USE_MACRO // LDmicro provide these functions. ldBOOL Read_Ub_YLED3(void) { return input_state(PIN_B1); } void Write_Ub_YLED3(ldBOOL b) { if(b) output_high(PIN_B1); else output_low(PIN_B1); } void Write1_Ub_YLED3(void) { output_high(PIN_B1); } void Write0_Ub_YLED3(void) { output_low(PIN_B1); } #endif /* Call this function once per PLC cycle. You are responsible for calling it at the interval that you specified in the LDmicro MCU configuration when you generated this code. */ void PlcCycle(void) { // INIT TABLES // ======= START RUNG 1 ======= LabelRung1:; // Botao 1 LIGA/DESLIGA // ======= START RUNG 2 ======= LabelRung2:; Write_Ib_rung_top(1); // start series [ // ELEM_CONTACTS if(!Read_Ub_XB1()) { Write_Ib_rung_top(0); } // ELEM_COIL Write_Ub_RB1(Read_Ib_rung_top()); // ] finish series // ======= START RUNG 3 ======= LabelRung3:; // XF1,XF2 devem estar setados para led 1,2 sejam ligados. Quando // ======= START RUNG 4 ======= LabelRung4:; Write_Ib_rung_top(1); // start series [ // ELEM_CONTACTS if(!Read_Ub_XF1()) { Write_Ib_rung_top(0); } // ELEM_COIL Write_Ub_RF1(Read_Ib_rung_top()); // ] finish series // ======= START RUNG 5 ======= LabelRung5:; Write_Ib_rung_top(1); // start series [ // ELEM_CONTACTS if(!Read_Ub_XF2()) { Write_Ib_rung_top(0); } // ELEM_COIL Write_Ub_RF2(Read_Ib_rung_top()); // ] finish series // ======= START RUNG 6 ======= LabelRung6:; // LED1 // ======= START RUNG 7 ======= LabelRung7:; Write_Ib_rung_top(1); // start series [ // ELEM_CONTACTS if(!Read_Ub_RB1()) { Write_Ib_rung_top(0); } // ELEM_CONTACTS if(Read_Ub_YLED2()) { Write_Ib_rung_top(0); } // start parallel [ Write_Ib_parOut_0(0); Write_Ib_parThis_0(Read_Ib_rung_top()); // ELEM_CONTACTS if(Read_Ub_R1()) { Write_Ib_parThis_0(0); } if(Read_Ib_parThis_0()) { Write_Ib_parOut_0(1); } Write_Ib_parThis_0(Read_Ib_rung_top()); // ELEM_CONTACTS if(!Read_Ub_YLED1()) { Write_Ib_parThis_0(0); } if(Read_Ib_parThis_0()) { Write_Ib_parOut_0(1); } Write_Ib_rung_top(Read_Ib_parOut_0()); // ] finish parallel // ELEM_CONTACTS if(!Read_Ub_RF1()) { Write_Ib_rung_top(0); } // ELEM_COIL Write_Ub_YLED1(Read_Ib_rung_top()); // ] finish series // ======= START RUNG 8 ======= LabelRung8:; // INTERTRAVAMENTO DE LED1 e LED2 // ======= START RUNG 9 ======= LabelRung9:; Write_Ib_rung_top(1); // start series [ // ELEM_CONTACTS if(Read_Ub_YLED2()) { Write_Ib_rung_top(0); } // start parallel [ Write_Ib_parOut_1(0); Write_Ib_parThis_1(Read_Ib_rung_top()); // ELEM_CONTACTS if(!Read_Ub_YLED1()) { Write_Ib_parThis_1(0); } if(Read_Ib_parThis_1()) { Write_Ib_parOut_1(1); } Write_Ib_parThis_1(Read_Ib_rung_top()); // ELEM_CONTACTS if(!Read_Ub_R1()) { Write_Ib_parThis_1(0); } if(Read_Ib_parThis_1()) { Write_Ib_parOut_1(1); } Write_Ib_rung_top(Read_Ib_parOut_1()); // ] finish parallel // ELEM_CONTACTS if(!Read_Ub_RF1()) { Write_Ib_rung_top(0); } // ELEM_CONTACTS if(!Read_Ub_RF2()) { Write_Ib_rung_top(0); } // ELEM_COIL Write_Ub_R1(Read_Ib_rung_top()); // ] finish series // ======= START RUNG 10 ======= LabelRung10:; // LED2 // ======= START RUNG 11 ======= LabelRung11:; Write_Ib_rung_top(1); // start series [ // start parallel [ Write_Ib_parOut_2(0); Write_Ib_parThis_2(Read_Ib_rung_top()); // ELEM_CONTACTS if(Read_Ub_YLED1()) { Write_Ib_parThis_2(0); } if(Read_Ib_parThis_2()) { Write_Ib_parOut_2(1); } Write_Ib_parThis_2(Read_Ib_rung_top()); // ELEM_CONTACTS if(Read_Ub_R1()) { Write_Ib_parThis_2(0); } if(Read_Ib_parThis_2()) { Write_Ib_parOut_2(1); } Write_Ib_rung_top(Read_Ib_parOut_2()); // ] finish parallel // ELEM_CONTACTS if(!Read_Ub_RB1()) { Write_Ib_rung_top(0); } // ELEM_CONTACTS if(!Read_Ub_RF2()) { Write_Ib_rung_top(0); } // ELEM_COIL Write_Ub_YLED2(Read_Ib_rung_top()); // ] finish series // ======= START RUNG 12 ======= LabelRung12:; // Botao XB2 para silenciar(BIP), a sirene do alarme. Mas mantera // ======= START RUNG 13 ======= LabelRung13:; Write_Ib_rung_top(1); // start series [ // start parallel [ Write_Ib_parOut_3(0); Write_Ib_parThis_3(Read_Ib_rung_top()); // ELEM_CONTACTS if(!Read_Ub_XB2()) { Write_Ib_parThis_3(0); } if(Read_Ib_parThis_3()) { Write_Ib_parOut_3(1); } Write_Ib_parThis_3(Read_Ib_rung_top()); // ELEM_CONTACTS if(!Read_Ub_R2()) { Write_Ib_parThis_3(0); } if(Read_Ib_parThis_3()) { Write_Ib_parOut_3(1); } Write_Ib_rung_top(Read_Ib_parOut_3()); // ] finish parallel // start parallel [ Write_Ib_parOut_4(0); Write_Ib_parThis_4(Read_Ib_rung_top()); // ELEM_CONTACTS if(Read_Ub_RF1()) { Write_Ib_parThis_4(0); } if(Read_Ib_parThis_4()) { Write_Ib_parOut_4(1); } Write_Ib_parThis_4(Read_Ib_rung_top()); // ELEM_CONTACTS if(Read_Ub_RF2()) { Write_Ib_parThis_4(0); } if(Read_Ib_parThis_4()) { Write_Ib_parOut_4(1); } Write_Ib_rung_top(Read_Ib_parOut_4()); // ] finish parallel // ELEM_COIL Write_Ub_R2(Read_Ib_rung_top()); // ] finish series // ======= START RUNG 14 ======= LabelRung14:; // YBIP (sirene alarme) // ======= START RUNG 15 ======= LabelRung15:; Write_Ib_rung_top(1); // start series [ // start parallel [ Write_Ib_parOut_5(0); Write_Ib_parThis_5(Read_Ib_rung_top()); // ELEM_CONTACTS if(Read_Ub_RF1()) { Write_Ib_parThis_5(0); } if(Read_Ib_parThis_5()) { Write_Ib_parOut_5(1); } Write_Ib_parThis_5(Read_Ib_rung_top()); // ELEM_CONTACTS if(Read_Ub_RF2()) { Write_Ib_parThis_5(0); } if(Read_Ib_parThis_5()) { Write_Ib_parOut_5(1); } Write_Ib_rung_top(Read_Ib_parOut_5()); // ] finish parallel // ELEM_CONTACTS if(Read_Ub_R2()) { Write_Ib_rung_top(0); } // ELEM_COIL Write_Ub_YBIP(Read_Ib_rung_top()); // ] finish series // ======= START RUNG 16 ======= LabelRung16:; // YLED3 (led do alarme) aciona e desaciona quando XF1 ou XF2 sej // ======= START RUNG 17 ======= LabelRung17:; Write_Ib_rung_top(1); // start series [ // start parallel [ Write_Ib_parOut_6(0); Write_Ib_parThis_6(Read_Ib_rung_top()); // ELEM_CONTACTS if(Read_Ub_RF1()) { Write_Ib_parThis_6(0); } if(Read_Ib_parThis_6()) { Write_Ib_parOut_6(1); } Write_Ib_parThis_6(Read_Ib_rung_top()); // ELEM_CONTACTS if(Read_Ub_RF2()) { Write_Ib_parThis_6(0); } if(Read_Ib_parThis_6()) { Write_Ib_parOut_6(1); } Write_Ib_rung_top(Read_Ib_parOut_6()); // ] finish parallel // ELEM_COIL Write_Ub_YLED3(Read_Ib_rung_top()); // ] finish series // ======= START RUNG 18 ======= LabelRung18:; // R1,R2,RB1,RF1,RF2 Sao reles internos. LabelRung19:; // Latest INT_OP here } void setupPlc(void) { // Set ports as digital instead of analogical (default). setPortDigitalIO(true); // Set up I/O pins direction, and drive the outputs low to start. output_a(0x00); set_tris_a(0xFF); output_b(0x00); set_tris_b(0xE1); // Turn on the pull-ups on Port B. #ifdef CCS_PIC_C port_b_pullups(true); #elif defined(HI_TECH_C) nRBPU = 0; #endif #ifdef USE_WDT // Watchdog on #ifdef __CODEVISIONAVR__ #ifndef WDTCR #define WDTCR WDTCSR #endif #asm("wdr") WDTCR |= (1<