![](/media/cache/img/default_profile.jpg.50x50_q85.jpg)
rev.1
Dependencies: RA8875 SDFileSystem mbed
comm.cpp@0:6ef3fd4921d7, 2017-02-17 (annotated)
- Committer:
- vnemera
- Date:
- Fri Feb 17 16:53:53 2017 +0000
- Revision:
- 0:6ef3fd4921d7
rev.1
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
vnemera | 0:6ef3fd4921d7 | 1 | // MW771 Laser Press HMI. |
vnemera | 0:6ef3fd4921d7 | 2 | // V.Nemera, 10/12/2016, ver.1.0, C++ |
vnemera | 0:6ef3fd4921d7 | 3 | // CPU: mbed NXP LPC1768 (ARM Cortex-M3, 32bit, 90MHz) |
vnemera | 0:6ef3fd4921d7 | 4 | |
vnemera | 0:6ef3fd4921d7 | 5 | #include "RA8875.h" |
vnemera | 0:6ef3fd4921d7 | 6 | #include "main.h" |
vnemera | 0:6ef3fd4921d7 | 7 | #include "comm.h" |
vnemera | 0:6ef3fd4921d7 | 8 | |
vnemera | 0:6ef3fd4921d7 | 9 | //-----------HMI i/o--------------------- |
vnemera | 0:6ef3fd4921d7 | 10 | DigitalIn inEStop(p19); //input: E-Stop ON = 1 |
vnemera | 0:6ef3fd4921d7 | 11 | DigitalIn inBtnStart(p20); //input: Btn Start ON = 0 |
vnemera | 0:6ef3fd4921d7 | 12 | DigitalIn inLPactive(p26); //input: Laser power active = 1 |
vnemera | 0:6ef3fd4921d7 | 13 | DigitalIn in1(p24); //input: in1 ON = 0 |
vnemera | 0:6ef3fd4921d7 | 14 | DigitalIn in2(p23); //input: in2 ON = 0 |
vnemera | 0:6ef3fd4921d7 | 15 | |
vnemera | 0:6ef3fd4921d7 | 16 | DigitalOut outIrq(p14); //output: interrupt for IO |
vnemera | 0:6ef3fd4921d7 | 17 | DigitalOut outLampStart(p25); //output: Start Lamp ON = 1 |
vnemera | 0:6ef3fd4921d7 | 18 | DigitalOut out1(p22); //output: out1 ON = 1 |
vnemera | 0:6ef3fd4921d7 | 19 | DigitalOut out2(p21); //output: out2 ON = 1 |
vnemera | 0:6ef3fd4921d7 | 20 | |
vnemera | 0:6ef3fd4921d7 | 21 | Ticker resetTime; //time for e-stop reset pulse |
vnemera | 0:6ef3fd4921d7 | 22 | |
vnemera | 0:6ef3fd4921d7 | 23 | int iCh; |
vnemera | 0:6ef3fd4921d7 | 24 | char hexArr[] = "0123456789ABCDEF"; |
vnemera | 0:6ef3fd4921d7 | 25 | const char err100[] = "Wrong command\n"; |
vnemera | 0:6ef3fd4921d7 | 26 | const char err101[] = "No response\n"; |
vnemera | 0:6ef3fd4921d7 | 27 | |
vnemera | 0:6ef3fd4921d7 | 28 | Serial ioRS232(p28, p27); // tx, rx |
vnemera | 0:6ef3fd4921d7 | 29 | int ioRS232baud = 115200; |
vnemera | 0:6ef3fd4921d7 | 30 | int ioRS232bits = 8; |
vnemera | 0:6ef3fd4921d7 | 31 | SerialBase::Parity ioRS232parity = SerialBase::None; |
vnemera | 0:6ef3fd4921d7 | 32 | int ioRS232stop_bits = 1; |
vnemera | 0:6ef3fd4921d7 | 33 | |
vnemera | 0:6ef3fd4921d7 | 34 | Serial LasRS232(p9, p10); // tx, rx |
vnemera | 0:6ef3fd4921d7 | 35 | int LasRS232baud = 57600; |
vnemera | 0:6ef3fd4921d7 | 36 | int LasRS232bits = 8; |
vnemera | 0:6ef3fd4921d7 | 37 | SerialBase::Parity LasRS232parity = SerialBase::None; |
vnemera | 0:6ef3fd4921d7 | 38 | int LasRS232stop_bits = 1; |
vnemera | 0:6ef3fd4921d7 | 39 | |
vnemera | 0:6ef3fd4921d7 | 40 | char hmiLBuf[64]; //buffer hmi command to send to laser |
vnemera | 0:6ef3fd4921d7 | 41 | |
vnemera | 0:6ef3fd4921d7 | 42 | int indLhmi = 0; //index of buffer hmiLBuf[] |
vnemera | 0:6ef3fd4921d7 | 43 | |
vnemera | 0:6ef3fd4921d7 | 44 | char LasBufCom[64]; //buffer command to send to laser |
vnemera | 0:6ef3fd4921d7 | 45 | char LasBufResp[64]; //buffer response from laser |
vnemera | 0:6ef3fd4921d7 | 46 | |
vnemera | 0:6ef3fd4921d7 | 47 | int indLCom = 0; //index of buffer LasBufCom[] |
vnemera | 0:6ef3fd4921d7 | 48 | int indLResp = 0; //index of buffer LasBufResp[] |
vnemera | 0:6ef3fd4921d7 | 49 | |
vnemera | 0:6ef3fd4921d7 | 50 | char IOBufCom[32]; //buffer command from io controller |
vnemera | 0:6ef3fd4921d7 | 51 | char IOBufResp[32]; //buffer response to send to io controller |
vnemera | 0:6ef3fd4921d7 | 52 | |
vnemera | 0:6ef3fd4921d7 | 53 | int indIOCom = 0; //index of buffer IOBufCom[] |
vnemera | 0:6ef3fd4921d7 | 54 | int IOBufSize = 32; //buffer IOBufResp[] size |
vnemera | 0:6ef3fd4921d7 | 55 | int sBio = 0; //send ioBuf pointer |
vnemera | 0:6ef3fd4921d7 | 56 | int wBio = 0; //write ioBuf pointer |
vnemera | 0:6ef3fd4921d7 | 57 | |
vnemera | 0:6ef3fd4921d7 | 58 | char comBuf[128]; //buffer command from pc |
vnemera | 0:6ef3fd4921d7 | 59 | int comBufPointer = 0; |
vnemera | 0:6ef3fd4921d7 | 60 | |
vnemera | 0:6ef3fd4921d7 | 61 | int sBp = 0; //send pcBuf pointer |
vnemera | 0:6ef3fd4921d7 | 62 | int wBp = 0; //write pcBuf pointer |
vnemera | 0:6ef3fd4921d7 | 63 | const int pcBufSize = 128; |
vnemera | 0:6ef3fd4921d7 | 64 | char pcBuf[pcBufSize]; |
vnemera | 0:6ef3fd4921d7 | 65 | |
vnemera | 0:6ef3fd4921d7 | 66 | int stLhmi = 0; //status of hmi L.command |
vnemera | 0:6ef3fd4921d7 | 67 | int stLpc = 0; //status of pc L.command |
vnemera | 0:6ef3fd4921d7 | 68 | int iPCcmd = 0; //command # from pc |
vnemera | 0:6ef3fd4921d7 | 69 | int stL3 = 0; //status of execution L.command |
vnemera | 0:6ef3fd4921d7 | 70 | int iCounts = 0; |
vnemera | 0:6ef3fd4921d7 | 71 | int iSta = 0; |
vnemera | 0:6ef3fd4921d7 | 72 | int c; |
vnemera | 0:6ef3fd4921d7 | 73 | int usta; |
vnemera | 0:6ef3fd4921d7 | 74 | int iLasO, iLasO1, iLasO2; |
vnemera | 0:6ef3fd4921d7 | 75 | int iCmax = 10; |
vnemera | 0:6ef3fd4921d7 | 76 | //========================================================= |
vnemera | 0:6ef3fd4921d7 | 77 | const char *cLC[80]; //array of laser commands string |
vnemera | 0:6ef3fd4921d7 | 78 | |
vnemera | 0:6ef3fd4921d7 | 79 | void cLCinit(void) { |
vnemera | 0:6ef3fd4921d7 | 80 | cLC[0] = ""; |
vnemera | 0:6ef3fd4921d7 | 81 | cLC[1] = "STA"; //cod 0x4001 STA - read laser status |
vnemera | 0:6ef3fd4921d7 | 82 | cLC[2] = "RCS"; //cod 0x4002 RCS - read current setpoint |
vnemera | 0:6ef3fd4921d7 | 83 | cLC[3] = "RNC"; //cod 0x4003 RNC - read minimum current setpoint |
vnemera | 0:6ef3fd4921d7 | 84 | cLC[4] = "ROP"; //cod 0x4004 ROP - read output power |
vnemera | 0:6ef3fd4921d7 | 85 | cLC[5] = "RPP"; //cod 0x4005 RPP - read peak power |
vnemera | 0:6ef3fd4921d7 | 86 | cLC[6] = "RPW"; //cod 0x4006 RPW - read pulse width |
vnemera | 0:6ef3fd4921d7 | 87 | cLC[7] = "RPRR"; //cod 0x4007 RPRR - read pulse repetition rate |
vnemera | 0:6ef3fd4921d7 | 88 | cLC[8] = "RFV"; //cod 0x4008 RFV - read current software revision |
vnemera | 0:6ef3fd4921d7 | 89 | cLC[9] = "RCT"; //cod 0x4009 RCT - read laser temperature |
vnemera | 0:6ef3fd4921d7 | 90 | cLC[10] = "RET"; //cod 0x400A RET - read elapsed time the laser has been on |
vnemera | 0:6ef3fd4921d7 | 91 | cLC[11] = "RMEC"; //cod 0x400B RMEC - read module error code |
vnemera | 0:6ef3fd4921d7 | 92 | cLC[12] = "RSN"; //cod 0x400C RSN - read serial number |
vnemera | 0:6ef3fd4921d7 | 93 | cLC[13] = "REC"; //cod 0x400D REC - read error counter |
vnemera | 0:6ef3fd4921d7 | 94 | cLC[14] = "RICDT"; //cod 0x400E RICDT - read input circuit discharge time |
vnemera | 0:6ef3fd4921d7 | 95 | cLC[15] = "RIP"; //cod 0x400F RIP - read the current IP address |
vnemera | 0:6ef3fd4921d7 | 96 | cLC[16] = "RMASK"; //cod 0x4010 RMASK - read the current subnet mask |
vnemera | 0:6ef3fd4921d7 | 97 | cLC[17] = "RDGW"; //cod 0x4011 RDGW - read the current default gateway address |
vnemera | 0:6ef3fd4921d7 | 98 | cLC[18] = "RMAC"; //cod 0x4012 RMAC - read MAC address |
vnemera | 0:6ef3fd4921d7 | 99 | cLC[19] = "RBAUD"; //cod 0x4013 RBAUD - read the current RS232 baud rate |
vnemera | 0:6ef3fd4921d7 | 100 | cLC[20] = ""; |
vnemera | 0:6ef3fd4921d7 | 101 | cLC[21] = ""; |
vnemera | 0:6ef3fd4921d7 | 102 | cLC[22] = ""; |
vnemera | 0:6ef3fd4921d7 | 103 | cLC[23] = ""; |
vnemera | 0:6ef3fd4921d7 | 104 | cLC[24] = ""; |
vnemera | 0:6ef3fd4921d7 | 105 | cLC[25] = ""; |
vnemera | 0:6ef3fd4921d7 | 106 | cLC[26] = ""; |
vnemera | 0:6ef3fd4921d7 | 107 | cLC[27] = ""; |
vnemera | 0:6ef3fd4921d7 | 108 | cLC[28] = ""; |
vnemera | 0:6ef3fd4921d7 | 109 | cLC[29] = ""; |
vnemera | 0:6ef3fd4921d7 | 110 | cLC[30] = ""; |
vnemera | 0:6ef3fd4921d7 | 111 | cLC[31] = ""; |
vnemera | 0:6ef3fd4921d7 | 112 | cLC[32] = "EPM"; //cod 0x4020 EPM - enable pulse mode |
vnemera | 0:6ef3fd4921d7 | 113 | cLC[33] = "DPM"; //cod 0x4021 DPM - disable pulse mode |
vnemera | 0:6ef3fd4921d7 | 114 | cLC[34] = "ABN"; //cod 0x4022 ABN - aiming beam on |
vnemera | 0:6ef3fd4921d7 | 115 | cLC[35] = "ABF"; //cod 0x4023 ABF - aiming beam off |
vnemera | 0:6ef3fd4921d7 | 116 | cLC[36] = "EEC"; //cod 0x4024 EEC - enable external analog power control input |
vnemera | 0:6ef3fd4921d7 | 117 | cLC[37] = "DEC"; //cod 0x4025 DEC - disable external analog power control input |
vnemera | 0:6ef3fd4921d7 | 118 | cLC[38] = "EGM"; //cod 0x4026 EGM - enable gate mode (internal pulse generator gated by external modulation input) |
vnemera | 0:6ef3fd4921d7 | 119 | cLC[39] = "DGM"; //cod 0x4027 DGM - disable gate mode |
vnemera | 0:6ef3fd4921d7 | 120 | cLC[40] = "EMOD"; //cod 0x4028 EMOD - enable external modulation input |
vnemera | 0:6ef3fd4921d7 | 121 | cLC[41] = "DMOD"; //cod 0x4029 DMOD - disable external modulation input |
vnemera | 0:6ef3fd4921d7 | 122 | cLC[42] = "ELE"; //cod 0x402A ELE - enable external emission input |
vnemera | 0:6ef3fd4921d7 | 123 | cLC[43] = "DLE"; //cod 0x402B DLE - disable external emission input |
vnemera | 0:6ef3fd4921d7 | 124 | cLC[44] = "EHC"; //cod 0x402C EHC - enable compatibility mode |
vnemera | 0:6ef3fd4921d7 | 125 | cLC[45] = "EDC"; //cod 0x402D EDC - disable compatibility mode |
vnemera | 0:6ef3fd4921d7 | 126 | cLC[46] = "EEABC"; //cod 0x402E EEABC - enable external aiming beam control input |
vnemera | 0:6ef3fd4921d7 | 127 | cLC[47] = "DEABC"; //cod 0x402F DEABC - disable external aiming beam control input |
vnemera | 0:6ef3fd4921d7 | 128 | cLC[48] = "EWPM"; //Enable Waveform Pulse Mode |
vnemera | 0:6ef3fd4921d7 | 129 | cLC[49] = "DWPM"; //Disable Waveform Pulse Mode |
vnemera | 0:6ef3fd4921d7 | 130 | cLC[50] = "PCFG"; //Configure Waveform Mode |
vnemera | 0:6ef3fd4921d7 | 131 | cLC[51] = "RCE"; //Reset critical error |
vnemera | 0:6ef3fd4921d7 | 132 | cLC[52] = "RERR"; //Resers any resettable errors |
vnemera | 0:6ef3fd4921d7 | 133 | cLC[53] = "EMON"; //Start Emission |
vnemera | 0:6ef3fd4921d7 | 134 | cLC[54] = "EMOFF"; //Stop Emission |
vnemera | 0:6ef3fd4921d7 | 135 | cLC[55] = ""; |
vnemera | 0:6ef3fd4921d7 | 136 | cLC[56] = ""; |
vnemera | 0:6ef3fd4921d7 | 137 | cLC[57] = ""; |
vnemera | 0:6ef3fd4921d7 | 138 | cLC[58] = ""; |
vnemera | 0:6ef3fd4921d7 | 139 | cLC[59] = ""; |
vnemera | 0:6ef3fd4921d7 | 140 | cLC[60] = ""; |
vnemera | 0:6ef3fd4921d7 | 141 | cLC[61] = ""; |
vnemera | 0:6ef3fd4921d7 | 142 | cLC[62] = ""; |
vnemera | 0:6ef3fd4921d7 | 143 | cLC[63] = ""; |
vnemera | 0:6ef3fd4921d7 | 144 | cLC[64] = "SDC "; //cod 0x4040 SDC - set diode current, min current < xx.x% < 100% |
vnemera | 0:6ef3fd4921d7 | 145 | cLC[65] = "SPW "; //cod 0x4041 SPW - set pulse width, xx.x mS |
vnemera | 0:6ef3fd4921d7 | 146 | cLC[66] = "SPRR "; //cod 0x4042 SPRR - set pulse repetition rate, xxx Hz |
vnemera | 0:6ef3fd4921d7 | 147 | cLC[67] = "SIP "; //cod 0x4043 SIP - set IP, xxx.xxx.xxx.xxx |
vnemera | 0:6ef3fd4921d7 | 148 | cLC[68] = "SMASK "; //cod 0x4044 SMASK - set subnet mask, xxx.xxx.xxx.xxx |
vnemera | 0:6ef3fd4921d7 | 149 | cLC[69] = "SDGW "; //cod 0x4045 SDGW - set default gateway, xxx.xxx.xxx.xxx |
vnemera | 0:6ef3fd4921d7 | 150 | cLC[70] = "SMAC "; //cod 0x4046 SMAC - set MAC address xx-xx-xx-xx-xx-xx |
vnemera | 0:6ef3fd4921d7 | 151 | cLC[71] = "SBAUD "; //cod 0x4047 SBAUD - set baud rate x (0-110,1-300,2-1200,3-2400,4-4800,5-9600 |
vnemera | 0:6ef3fd4921d7 | 152 | // 6-19200,7-38400,8-57600default,9-115200) |
vnemera | 0:6ef3fd4921d7 | 153 | cLC[72] = "PRSEL "; //Select Profile |
vnemera | 0:6ef3fd4921d7 | 154 | cLC[73] = "SQSEL "; //Select Sequence |
vnemera | 0:6ef3fd4921d7 | 155 | cLC[74] = ""; |
vnemera | 0:6ef3fd4921d7 | 156 | cLC[75] = ""; |
vnemera | 0:6ef3fd4921d7 | 157 | cLC[76] = ""; |
vnemera | 0:6ef3fd4921d7 | 158 | cLC[77] = ""; |
vnemera | 0:6ef3fd4921d7 | 159 | cLC[78] = ""; |
vnemera | 0:6ef3fd4921d7 | 160 | cLC[79] = ""; |
vnemera | 0:6ef3fd4921d7 | 161 | } |
vnemera | 0:6ef3fd4921d7 | 162 | |
vnemera | 0:6ef3fd4921d7 | 163 | //------------------------------------------- |
vnemera | 0:6ef3fd4921d7 | 164 | int SetLasComm(int icLC) { |
vnemera | 0:6ef3fd4921d7 | 165 | for(int i=0; i<15; i++) { //wait 15*20ms stLhmi=0 (last command executed) |
vnemera | 0:6ef3fd4921d7 | 166 | if(stLhmi == 0) { |
vnemera | 0:6ef3fd4921d7 | 167 | indLhmi++; |
vnemera | 0:6ef3fd4921d7 | 168 | for(int j=0; j<indLhmi; j++) {hmiLBuf[j] = '\0';} |
vnemera | 0:6ef3fd4921d7 | 169 | indLhmi = strlen(cLC[icLC]); |
vnemera | 0:6ef3fd4921d7 | 170 | strncpy(hmiLBuf, cLC[icLC], indLhmi); |
vnemera | 0:6ef3fd4921d7 | 171 | //pc.printf("-s%i %s %s %i\n", icLC, hmiLBuf, cLC[icLC], indLhmi); |
vnemera | 0:6ef3fd4921d7 | 172 | if(icLC == 1) iSta = 1; |
vnemera | 0:6ef3fd4921d7 | 173 | stLhmi = 2; |
vnemera | 0:6ef3fd4921d7 | 174 | wait_ms(20); |
vnemera | 0:6ef3fd4921d7 | 175 | return 0; |
vnemera | 0:6ef3fd4921d7 | 176 | } |
vnemera | 0:6ef3fd4921d7 | 177 | else { |
vnemera | 0:6ef3fd4921d7 | 178 | wait_ms(20); |
vnemera | 0:6ef3fd4921d7 | 179 | } |
vnemera | 0:6ef3fd4921d7 | 180 | } |
vnemera | 0:6ef3fd4921d7 | 181 | //pc.printf("-e%i %s %s %i\n", icLC, hmiLBuf, cLC[icLC], indLhmi); |
vnemera | 0:6ef3fd4921d7 | 182 | return 1; |
vnemera | 0:6ef3fd4921d7 | 183 | } |
vnemera | 0:6ef3fd4921d7 | 184 | |
vnemera | 0:6ef3fd4921d7 | 185 | void initHMIio(void) { |
vnemera | 0:6ef3fd4921d7 | 186 | ioRS232.format(ioRS232bits, ioRS232parity, ioRS232stop_bits); |
vnemera | 0:6ef3fd4921d7 | 187 | ioRS232.baud(ioRS232baud); |
vnemera | 0:6ef3fd4921d7 | 188 | |
vnemera | 0:6ef3fd4921d7 | 189 | LasRS232.format(LasRS232bits, LasRS232parity, LasRS232stop_bits); |
vnemera | 0:6ef3fd4921d7 | 190 | LasRS232.baud(LasRS232baud); |
vnemera | 0:6ef3fd4921d7 | 191 | |
vnemera | 0:6ef3fd4921d7 | 192 | outIrq = 0; //output: interrupt for IO |
vnemera | 0:6ef3fd4921d7 | 193 | outLampStart = 0; //output: Start Lamp ON = 1 |
vnemera | 0:6ef3fd4921d7 | 194 | out1 = 0; //output: out1 ON = 1 |
vnemera | 0:6ef3fd4921d7 | 195 | out2 = 0; //output: out2 ON = 1 |
vnemera | 0:6ef3fd4921d7 | 196 | |
vnemera | 0:6ef3fd4921d7 | 197 | cLCinit(); |
vnemera | 0:6ef3fd4921d7 | 198 | |
vnemera | 0:6ef3fd4921d7 | 199 | for(int i=0; i<64; i++) { |
vnemera | 0:6ef3fd4921d7 | 200 | LasBufCom[i] = '\0'; |
vnemera | 0:6ef3fd4921d7 | 201 | LasBufResp[i] = '\0'; |
vnemera | 0:6ef3fd4921d7 | 202 | } |
vnemera | 0:6ef3fd4921d7 | 203 | } |
vnemera | 0:6ef3fd4921d7 | 204 | //write char to pc buffer |
vnemera | 0:6ef3fd4921d7 | 205 | void wrChar(char cCh) { |
vnemera | 0:6ef3fd4921d7 | 206 | pcBuf[wBp++] = (cCh); |
vnemera | 0:6ef3fd4921d7 | 207 | if(wBp == pcBufSize) {wBp = 0;} |
vnemera | 0:6ef3fd4921d7 | 208 | } |
vnemera | 0:6ef3fd4921d7 | 209 | //write char array to pc buffer |
vnemera | 0:6ef3fd4921d7 | 210 | void wrCharArr(const char* err) { |
vnemera | 0:6ef3fd4921d7 | 211 | int iM; |
vnemera | 0:6ef3fd4921d7 | 212 | iM = strlen(err); |
vnemera | 0:6ef3fd4921d7 | 213 | for(int i=0; i<iM; i++) { |
vnemera | 0:6ef3fd4921d7 | 214 | wrChar(err[i]); |
vnemera | 0:6ef3fd4921d7 | 215 | } |
vnemera | 0:6ef3fd4921d7 | 216 | } |
vnemera | 0:6ef3fd4921d7 | 217 | //write 16bit word to pc buffer |
vnemera | 0:6ef3fd4921d7 | 218 | void wrWord(uint16_t uWrd) { |
vnemera | 0:6ef3fd4921d7 | 219 | wrChar(hexArr[uWrd/4096]); |
vnemera | 0:6ef3fd4921d7 | 220 | uWrd = uWrd % 4096; |
vnemera | 0:6ef3fd4921d7 | 221 | wrChar(hexArr[uWrd/256]); |
vnemera | 0:6ef3fd4921d7 | 222 | uWrd = uWrd % 256; |
vnemera | 0:6ef3fd4921d7 | 223 | wrChar(hexArr[uWrd/16]); |
vnemera | 0:6ef3fd4921d7 | 224 | wrChar(hexArr[uWrd%16]); |
vnemera | 0:6ef3fd4921d7 | 225 | } |
vnemera | 0:6ef3fd4921d7 | 226 | //write 32bit word to pc buffer |
vnemera | 0:6ef3fd4921d7 | 227 | void wrInt(int i32) { |
vnemera | 0:6ef3fd4921d7 | 228 | wrWord((uint16_t)(i32/65536)); |
vnemera | 0:6ef3fd4921d7 | 229 | wrWord((uint16_t)(i32%65536)); |
vnemera | 0:6ef3fd4921d7 | 230 | } |
vnemera | 0:6ef3fd4921d7 | 231 | |
vnemera | 0:6ef3fd4921d7 | 232 | void comParser() { |
vnemera | 0:6ef3fd4921d7 | 233 | if(comBufPointer < 2) { |
vnemera | 0:6ef3fd4921d7 | 234 | wrCharArr(err100); //err100 = Wrong command |
vnemera | 0:6ef3fd4921d7 | 235 | wrChar('>'); |
vnemera | 0:6ef3fd4921d7 | 236 | comBufPointer =0; |
vnemera | 0:6ef3fd4921d7 | 237 | return; |
vnemera | 0:6ef3fd4921d7 | 238 | } |
vnemera | 0:6ef3fd4921d7 | 239 | //pc.printf("1 %i 2 %i\n", comBuf[0], comBuf[1]); |
vnemera | 0:6ef3fd4921d7 | 240 | |
vnemera | 0:6ef3fd4921d7 | 241 | //for (int j = 3; j < comBufPointer; j++) { |
vnemera | 0:6ef3fd4921d7 | 242 | // pc.printf("%i %i \n", j, comBuf[j]); |
vnemera | 0:6ef3fd4921d7 | 243 | //} |
vnemera | 0:6ef3fd4921d7 | 244 | |
vnemera | 0:6ef3fd4921d7 | 245 | int a = comBuf[0]; |
vnemera | 0:6ef3fd4921d7 | 246 | int b = comBuf[1]; |
vnemera | 0:6ef3fd4921d7 | 247 | |
vnemera | 0:6ef3fd4921d7 | 248 | //----------------------- |
vnemera | 0:6ef3fd4921d7 | 249 | if (((a == 76) || (a == 108)) && (b == 32)) { //L<SP> or l<SP> |
vnemera | 0:6ef3fd4921d7 | 250 | if(stLpc == 0) { |
vnemera | 0:6ef3fd4921d7 | 251 | // pc.printf("<%i>", comBufPointer); |
vnemera | 0:6ef3fd4921d7 | 252 | iPCcmd = 1; |
vnemera | 0:6ef3fd4921d7 | 253 | } |
vnemera | 0:6ef3fd4921d7 | 254 | else { |
vnemera | 0:6ef3fd4921d7 | 255 | wrChar('?'); |
vnemera | 0:6ef3fd4921d7 | 256 | wrChar('>'); |
vnemera | 0:6ef3fd4921d7 | 257 | } |
vnemera | 0:6ef3fd4921d7 | 258 | } |
vnemera | 0:6ef3fd4921d7 | 259 | |
vnemera | 0:6ef3fd4921d7 | 260 | //----------------------- |
vnemera | 0:6ef3fd4921d7 | 261 | else if (((a == 76) || (a == 108)) && ((b == 83) || (b == 15))) { //LS or ls |
vnemera | 0:6ef3fd4921d7 | 262 | iPCcmd = 2; |
vnemera | 0:6ef3fd4921d7 | 263 | } |
vnemera | 0:6ef3fd4921d7 | 264 | |
vnemera | 0:6ef3fd4921d7 | 265 | //----------------------- |
vnemera | 0:6ef3fd4921d7 | 266 | else if (((a == 76) || (a == 108)) && ((b == 73) || (b == 105))) { //LI or li |
vnemera | 0:6ef3fd4921d7 | 267 | iPCcmd = 3; |
vnemera | 0:6ef3fd4921d7 | 268 | } |
vnemera | 0:6ef3fd4921d7 | 269 | |
vnemera | 0:6ef3fd4921d7 | 270 | //----------------------- |
vnemera | 0:6ef3fd4921d7 | 271 | else if(((a == 76) || (a == 108)) & ((b == 65) || (b == 97))) { //LA or la |
vnemera | 0:6ef3fd4921d7 | 272 | iPCcmd = 4; |
vnemera | 0:6ef3fd4921d7 | 273 | } |
vnemera | 0:6ef3fd4921d7 | 274 | |
vnemera | 0:6ef3fd4921d7 | 275 | //----------------------- |
vnemera | 0:6ef3fd4921d7 | 276 | else if(((a == 76) || (a == 108)) & ((b == 67) || (b == 99))) { //LC or lc |
vnemera | 0:6ef3fd4921d7 | 277 | iPCcmd = 5; |
vnemera | 0:6ef3fd4921d7 | 278 | } |
vnemera | 0:6ef3fd4921d7 | 279 | |
vnemera | 0:6ef3fd4921d7 | 280 | //----------------------- |
vnemera | 0:6ef3fd4921d7 | 281 | else if(((a == 76) || (a == 108)) & ((b == 82) || (b == 114))) { //LR or lr |
vnemera | 0:6ef3fd4921d7 | 282 | iPCcmd = 6; |
vnemera | 0:6ef3fd4921d7 | 283 | } |
vnemera | 0:6ef3fd4921d7 | 284 | |
vnemera | 0:6ef3fd4921d7 | 285 | else { |
vnemera | 0:6ef3fd4921d7 | 286 | wrCharArr(err100); //err100 = Wrong command |
vnemera | 0:6ef3fd4921d7 | 287 | wrChar('>'); |
vnemera | 0:6ef3fd4921d7 | 288 | comBufPointer =0; |
vnemera | 0:6ef3fd4921d7 | 289 | } |
vnemera | 0:6ef3fd4921d7 | 290 | } |
vnemera | 0:6ef3fd4921d7 | 291 | //========================================================= |
vnemera | 0:6ef3fd4921d7 | 292 | void wrIOChar(char cCh) { //write 1 char to io buffer |
vnemera | 0:6ef3fd4921d7 | 293 | IOBufResp[wBio++] = (cCh); |
vnemera | 0:6ef3fd4921d7 | 294 | if(wBio == IOBufSize) wBio = 0; |
vnemera | 0:6ef3fd4921d7 | 295 | } |
vnemera | 0:6ef3fd4921d7 | 296 | |
vnemera | 0:6ef3fd4921d7 | 297 | void wrIObyte(int iCh) { //write byte (2 char) to io buffer |
vnemera | 0:6ef3fd4921d7 | 298 | iCh = iCh & 0xFF; |
vnemera | 0:6ef3fd4921d7 | 299 | wrIOChar(hexArr[iCh/16]); |
vnemera | 0:6ef3fd4921d7 | 300 | wrIOChar(hexArr[iCh%16]); |
vnemera | 0:6ef3fd4921d7 | 301 | } |
vnemera | 0:6ef3fd4921d7 | 302 | |
vnemera | 0:6ef3fd4921d7 | 303 | void wrIOword(uint16_t uWrd) { //write 16bit word (4 char) to io buffer |
vnemera | 0:6ef3fd4921d7 | 304 | wrIOChar(hexArr[uWrd/4096]); |
vnemera | 0:6ef3fd4921d7 | 305 | uWrd = uWrd % 4096; |
vnemera | 0:6ef3fd4921d7 | 306 | wrIOChar(hexArr[uWrd/256]); |
vnemera | 0:6ef3fd4921d7 | 307 | uWrd = uWrd % 256; |
vnemera | 0:6ef3fd4921d7 | 308 | wrIOChar(hexArr[uWrd/16]); |
vnemera | 0:6ef3fd4921d7 | 309 | wrIOChar(hexArr[uWrd%16]); |
vnemera | 0:6ef3fd4921d7 | 310 | } |
vnemera | 0:6ef3fd4921d7 | 311 | |
vnemera | 0:6ef3fd4921d7 | 312 | void wrIOint(int i32) { //write 32bit word to io buffer |
vnemera | 0:6ef3fd4921d7 | 313 | wrIOword((uint16_t)(i32/65536)); |
vnemera | 0:6ef3fd4921d7 | 314 | wrIOword((uint16_t)(i32%65536)); |
vnemera | 0:6ef3fd4921d7 | 315 | } |
vnemera | 0:6ef3fd4921d7 | 316 | void ioSt(void) { |
vnemera | 0:6ef3fd4921d7 | 317 | int b0st = 0; //send bits d7-d4 |
vnemera | 0:6ef3fd4921d7 | 318 | if(in2) b0st = b0st + 1; |
vnemera | 0:6ef3fd4921d7 | 319 | if(flagParChanged == 0) b0st = b0st + 2; |
vnemera | 0:6ef3fd4921d7 | 320 | if(flagLrsConnected) b0st = b0st + 4; |
vnemera | 0:6ef3fd4921d7 | 321 | if(flagLcomProcess) b0st = b0st + 8; |
vnemera | 0:6ef3fd4921d7 | 322 | wrIOChar(hexArr[b0st]); |
vnemera | 0:6ef3fd4921d7 | 323 | |
vnemera | 0:6ef3fd4921d7 | 324 | b0st = 0; //send bits d3-d0 |
vnemera | 0:6ef3fd4921d7 | 325 | if(inEStop) b0st = b0st + 1; |
vnemera | 0:6ef3fd4921d7 | 326 | if(inBtnStart) b0st = b0st + 2; |
vnemera | 0:6ef3fd4921d7 | 327 | if(inLPactive) b0st = b0st + 4; |
vnemera | 0:6ef3fd4921d7 | 328 | if(in1) b0st = b0st + 8; |
vnemera | 0:6ef3fd4921d7 | 329 | wrIOChar(hexArr[b0st]); |
vnemera | 0:6ef3fd4921d7 | 330 | |
vnemera | 0:6ef3fd4921d7 | 331 | wrIOChar(0xD); //send <CR> |
vnemera | 0:6ef3fd4921d7 | 332 | } |
vnemera | 0:6ef3fd4921d7 | 333 | |
vnemera | 0:6ef3fd4921d7 | 334 | void sendIOerr(int iErr) { |
vnemera | 0:6ef3fd4921d7 | 335 | wrIOChar(hexArr[iErr | 8]); //1<err> send |
vnemera | 0:6ef3fd4921d7 | 336 | wrIOChar(0x30); //0-status send |
vnemera | 0:6ef3fd4921d7 | 337 | ioSt(); |
vnemera | 0:6ef3fd4921d7 | 338 | showTPstatus(iErr); |
vnemera | 0:6ef3fd4921d7 | 339 | } |
vnemera | 0:6ef3fd4921d7 | 340 | |
vnemera | 0:6ef3fd4921d7 | 341 | void sendIOstatus(void) { |
vnemera | 0:6ef3fd4921d7 | 342 | uint8_t b0st = 0; |
vnemera | 0:6ef3fd4921d7 | 343 | if(flagParChanged == 0) { |
vnemera | 0:6ef3fd4921d7 | 344 | b0st = 0x0010; //param. send request |
vnemera | 0:6ef3fd4921d7 | 345 | |
vnemera | 0:6ef3fd4921d7 | 346 | led3 = 1; |
vnemera | 0:6ef3fd4921d7 | 347 | wait_us(4); |
vnemera | 0:6ef3fd4921d7 | 348 | led3 = 0; |
vnemera | 0:6ef3fd4921d7 | 349 | } |
vnemera | 0:6ef3fd4921d7 | 350 | else b0st = ioReq << 4; //another requests |
vnemera | 0:6ef3fd4921d7 | 351 | wrIObyte(b0st); |
vnemera | 0:6ef3fd4921d7 | 352 | |
vnemera | 0:6ef3fd4921d7 | 353 | ioSt(); |
vnemera | 0:6ef3fd4921d7 | 354 | flagParChanged = 1; |
vnemera | 0:6ef3fd4921d7 | 355 | } |
vnemera | 0:6ef3fd4921d7 | 356 | |
vnemera | 0:6ef3fd4921d7 | 357 | void sendIOpar(void) { |
vnemera | 0:6ef3fd4921d7 | 358 | int b0par; |
vnemera | 0:6ef3fd4921d7 | 359 | |
vnemera | 0:6ef3fd4921d7 | 360 | wrIOChar(0x30); //0000-ready & no err |
vnemera | 0:6ef3fd4921d7 | 361 | wrIOChar(0x31); //1-parameters send |
vnemera | 0:6ef3fd4921d7 | 362 | |
vnemera | 0:6ef3fd4921d7 | 363 | b0par = prPar[progNumber].wMode + (prPar[progNumber].Lmode * 64); |
vnemera | 0:6ef3fd4921d7 | 364 | wrIObyte(b0par); //send mode |
vnemera | 0:6ef3fd4921d7 | 365 | |
vnemera | 0:6ef3fd4921d7 | 366 | wrIObyte(prPar[progNumber].LPbeg); |
vnemera | 0:6ef3fd4921d7 | 367 | wrIObyte(prPar[progNumber].LPend); |
vnemera | 0:6ef3fd4921d7 | 368 | wrIOword(prPar[progNumber].Lfreq); |
vnemera | 0:6ef3fd4921d7 | 369 | wrIObyte(prPar[progNumber].Lpulse); |
vnemera | 0:6ef3fd4921d7 | 370 | wrIObyte(prPar[progNumber].amplBeg); |
vnemera | 0:6ef3fd4921d7 | 371 | wrIObyte(prPar[progNumber].amplEnd); |
vnemera | 0:6ef3fd4921d7 | 372 | wrIObyte(prPar[progNumber].wFreq); |
vnemera | 0:6ef3fd4921d7 | 373 | wrIOword(prPar[progNumber].wTime); |
vnemera | 0:6ef3fd4921d7 | 374 | wrIObyte(prPar[progNumber].amplNum); |
vnemera | 0:6ef3fd4921d7 | 375 | |
vnemera | 0:6ef3fd4921d7 | 376 | wrIOChar(0xD); //senr <CR> |
vnemera | 0:6ef3fd4921d7 | 377 | //flagParChanged = 1; |
vnemera | 0:6ef3fd4921d7 | 378 | c7 = c7 | 0x7700; |
vnemera | 0:6ef3fd4921d7 | 379 | } |
vnemera | 0:6ef3fd4921d7 | 380 | |
vnemera | 0:6ef3fd4921d7 | 381 | void sendIOout(void) { |
vnemera | 0:6ef3fd4921d7 | 382 | for(int i=0; i<2; i++) { |
vnemera | 0:6ef3fd4921d7 | 383 | ioPar.o3[i] = IOBufCom[i+2]; |
vnemera | 0:6ef3fd4921d7 | 384 | ioPar.o2[i] = IOBufCom[i+4]; |
vnemera | 0:6ef3fd4921d7 | 385 | ioPar.o1[i] = IOBufCom[i+6]; |
vnemera | 0:6ef3fd4921d7 | 386 | } |
vnemera | 0:6ef3fd4921d7 | 387 | |
vnemera | 0:6ef3fd4921d7 | 388 | if(bitOstate > 0x7F) { //send output |
vnemera | 0:6ef3fd4921d7 | 389 | wrIOChar(0x30); //0000-ready & no err |
vnemera | 0:6ef3fd4921d7 | 390 | wrIOChar(0x32); //2-output send |
vnemera | 0:6ef3fd4921d7 | 391 | |
vnemera | 0:6ef3fd4921d7 | 392 | wrIObyte(bitOstate & 0x7F); |
vnemera | 0:6ef3fd4921d7 | 393 | wrIOChar(0xD); //senr <CR> |
vnemera | 0:6ef3fd4921d7 | 394 | } |
vnemera | 0:6ef3fd4921d7 | 395 | else sendIOstatus(); |
vnemera | 0:6ef3fd4921d7 | 396 | } |
vnemera | 0:6ef3fd4921d7 | 397 | |
vnemera | 0:6ef3fd4921d7 | 398 | void sendIOinp(void) { |
vnemera | 0:6ef3fd4921d7 | 399 | for(int i=0; i<2; i++) { |
vnemera | 0:6ef3fd4921d7 | 400 | ioPar.i3[i] = IOBufCom[i+8]; |
vnemera | 0:6ef3fd4921d7 | 401 | ioPar.i2[i] = IOBufCom[i+10]; |
vnemera | 0:6ef3fd4921d7 | 402 | ioPar.i1[i] = IOBufCom[i+12]; |
vnemera | 0:6ef3fd4921d7 | 403 | ioPar.aiLPow[i] = IOBufCom[i+14]; |
vnemera | 0:6ef3fd4921d7 | 404 | ioPar.aiLCur[i] = IOBufCom[i+16]; |
vnemera | 0:6ef3fd4921d7 | 405 | ioPar.aiLTemp[i] = IOBufCom[i+18]; |
vnemera | 0:6ef3fd4921d7 | 406 | ioPar.aiLBR[i] = IOBufCom[i+20]; |
vnemera | 0:6ef3fd4921d7 | 407 | } |
vnemera | 0:6ef3fd4921d7 | 408 | sendIOstatus(); |
vnemera | 0:6ef3fd4921d7 | 409 | } |
vnemera | 0:6ef3fd4921d7 | 410 | |
vnemera | 0:6ef3fd4921d7 | 411 | void flip() { |
vnemera | 0:6ef3fd4921d7 | 412 | out2 = 0; |
vnemera | 0:6ef3fd4921d7 | 413 | led4 = 0; |
vnemera | 0:6ef3fd4921d7 | 414 | wait_us(1); |
vnemera | 0:6ef3fd4921d7 | 415 | led4 = 1; |
vnemera | 0:6ef3fd4921d7 | 416 | wait_us(2); |
vnemera | 0:6ef3fd4921d7 | 417 | led4 = 0; |
vnemera | 0:6ef3fd4921d7 | 418 | // pc.printf("o20 "); |
vnemera | 0:6ef3fd4921d7 | 419 | |
vnemera | 0:6ef3fd4921d7 | 420 | } |
vnemera | 0:6ef3fd4921d7 | 421 | |
vnemera | 0:6ef3fd4921d7 | 422 | void sendIOmsg(int iMsg) { |
vnemera | 0:6ef3fd4921d7 | 423 | switch (iMsg) { |
vnemera | 0:6ef3fd4921d7 | 424 | case 48: //0-READY FOR WELDING |
vnemera | 0:6ef3fd4921d7 | 425 | showTPstatus(16); |
vnemera | 0:6ef3fd4921d7 | 426 | int t = SetLasComm(52); |
vnemera | 0:6ef3fd4921d7 | 427 | flagWeld = 0; |
vnemera | 0:6ef3fd4921d7 | 428 | sendIOstatus(); |
vnemera | 0:6ef3fd4921d7 | 429 | break; |
vnemera | 0:6ef3fd4921d7 | 430 | case 49: {showTPstatus(17); flagWeld = 0; sendIOstatus(); break;} //1-WOBBLE HEAD INIT... |
vnemera | 0:6ef3fd4921d7 | 431 | case 50: {showTPstatus(18); flagWeld = 0; sendIOstatus(); break;} //2-WOBBLE HEAD ERROR |
vnemera | 0:6ef3fd4921d7 | 432 | case 51: {showTPstatus(19); flagWeld = 0; sendIOstatus(); break;} //3-IO CONTROLLER ERROR |
vnemera | 0:6ef3fd4921d7 | 433 | case 52: {showTPstatus(20); flagWeld = 1; sendIOstatus(); break;} //4-WELDING IN PROGRESS.. |
vnemera | 0:6ef3fd4921d7 | 434 | case 53: //5-auto reset e-stop |
vnemera | 0:6ef3fd4921d7 | 435 | showTPstatus(16); |
vnemera | 0:6ef3fd4921d7 | 436 | out2 = 1; |
vnemera | 0:6ef3fd4921d7 | 437 | led4 = 1; |
vnemera | 0:6ef3fd4921d7 | 438 | resetTime.attach(&flip, 0.5); //the address of the function to be attached (flip) to ticker |
vnemera | 0:6ef3fd4921d7 | 439 | //printf("o21 "); |
vnemera | 0:6ef3fd4921d7 | 440 | flagWeld = 0; |
vnemera | 0:6ef3fd4921d7 | 441 | sendIOstatus(); |
vnemera | 0:6ef3fd4921d7 | 442 | break; |
vnemera | 0:6ef3fd4921d7 | 443 | case 54: //6-send laser command |
vnemera | 0:6ef3fd4921d7 | 444 | if(TPstatus == 0) wrIOChar(0x30); //0000-ready & no err |
vnemera | 0:6ef3fd4921d7 | 445 | else wrIOChar(0x38); //1000-not ready & no err |
vnemera | 0:6ef3fd4921d7 | 446 | wrIOChar(0x33); //3-laser STA send |
vnemera | 0:6ef3fd4921d7 | 447 | |
vnemera | 0:6ef3fd4921d7 | 448 | wrIOint(usta); |
vnemera | 0:6ef3fd4921d7 | 449 | wrIOChar(0xD); //senr <CR> |
vnemera | 0:6ef3fd4921d7 | 450 | |
vnemera | 0:6ef3fd4921d7 | 451 | flagWeld = 0; |
vnemera | 0:6ef3fd4921d7 | 452 | break; |
vnemera | 0:6ef3fd4921d7 | 453 | } |
vnemera | 0:6ef3fd4921d7 | 454 | } |
vnemera | 0:6ef3fd4921d7 | 455 | |
vnemera | 0:6ef3fd4921d7 | 456 | void ioCommand(void) { |
vnemera | 0:6ef3fd4921d7 | 457 | if(indIOCom < 2) { |
vnemera | 0:6ef3fd4921d7 | 458 | sendIOerr(06); //err 06 = Short command |
vnemera | 0:6ef3fd4921d7 | 459 | indIOCom =0; |
vnemera | 0:6ef3fd4921d7 | 460 | return; |
vnemera | 0:6ef3fd4921d7 | 461 | } |
vnemera | 0:6ef3fd4921d7 | 462 | int a = IOBufCom[0]; |
vnemera | 0:6ef3fd4921d7 | 463 | int b = IOBufCom[1]; |
vnemera | 0:6ef3fd4921d7 | 464 | if (((a == 67) || (a == 99)) && (b == 48)) sendIOstatus(); //C0 or c0 |
vnemera | 0:6ef3fd4921d7 | 465 | else if (((a == 67) || (a == 99)) && (b == 49)) sendIOpar(); //C1 or c1 |
vnemera | 0:6ef3fd4921d7 | 466 | else if (((a == 67) || (a == 99)) && (b == 50)) sendIOout(); //C2 or c2 |
vnemera | 0:6ef3fd4921d7 | 467 | else if (((a == 67) || (a == 99)) && (b == 51)) sendIOinp(); //C3 or c3 |
vnemera | 0:6ef3fd4921d7 | 468 | else if ((a == 69) || (a == 101)) sendIOmsg(b); //E<b> or e<b> command |
vnemera | 0:6ef3fd4921d7 | 469 | else sendIOerr(07); //err 07 = Wrong command |
vnemera | 0:6ef3fd4921d7 | 470 | indIOCom =0; |
vnemera | 0:6ef3fd4921d7 | 471 | } |
vnemera | 0:6ef3fd4921d7 | 472 | |
vnemera | 0:6ef3fd4921d7 | 473 | //========================================================= |
vnemera | 0:6ef3fd4921d7 | 474 | |
vnemera | 0:6ef3fd4921d7 | 475 | //execute L.command |
vnemera | 0:6ef3fd4921d7 | 476 | void LaserCommand(void) //laser control |
vnemera | 0:6ef3fd4921d7 | 477 | { |
vnemera | 0:6ef3fd4921d7 | 478 | if(stL3 == 0) { // check commands will be execute |
vnemera | 0:6ef3fd4921d7 | 479 | |
vnemera | 0:6ef3fd4921d7 | 480 | if(stLhmi == 2) {stL3 = stL3 + 1;} //command from hmi |
vnemera | 0:6ef3fd4921d7 | 481 | if(iPCcmd != 0) { //command from pc |
vnemera | 0:6ef3fd4921d7 | 482 | stLpc = 2; |
vnemera | 0:6ef3fd4921d7 | 483 | stL3 = stL3 + 2; |
vnemera | 0:6ef3fd4921d7 | 484 | } |
vnemera | 0:6ef3fd4921d7 | 485 | if(stL3 == 0) flagLcomProcess = 0; |
vnemera | 0:6ef3fd4921d7 | 486 | else flagLcomProcess = 1; |
vnemera | 0:6ef3fd4921d7 | 487 | } |
vnemera | 0:6ef3fd4921d7 | 488 | |
vnemera | 0:6ef3fd4921d7 | 489 | if(stL3 & 1) { //hmi command |
vnemera | 0:6ef3fd4921d7 | 490 | if(stLhmi == 2) { //send hmi command to laser |
vnemera | 0:6ef3fd4921d7 | 491 | while(LasRS232.readable()) { |
vnemera | 0:6ef3fd4921d7 | 492 | iLasO = LasRS232.getc(); |
vnemera | 0:6ef3fd4921d7 | 493 | } |
vnemera | 0:6ef3fd4921d7 | 494 | iLasO = 0; |
vnemera | 0:6ef3fd4921d7 | 495 | |
vnemera | 0:6ef3fd4921d7 | 496 | for (int i = 0; i < indLhmi; i++) { |
vnemera | 0:6ef3fd4921d7 | 497 | LasRS232.printf("%c", hmiLBuf[i]); |
vnemera | 0:6ef3fd4921d7 | 498 | } |
vnemera | 0:6ef3fd4921d7 | 499 | LasRS232.printf("\r"); |
vnemera | 0:6ef3fd4921d7 | 500 | iCounts = 0; |
vnemera | 0:6ef3fd4921d7 | 501 | stLhmi = 3; |
vnemera | 0:6ef3fd4921d7 | 502 | } |
vnemera | 0:6ef3fd4921d7 | 503 | else if(stLhmi == 3) { //wait response from laser |
vnemera | 0:6ef3fd4921d7 | 504 | if(LasRS232.readable()) { |
vnemera | 0:6ef3fd4921d7 | 505 | lasRS2: |
vnemera | 0:6ef3fd4921d7 | 506 | iLasO = LasRS232.getc(); |
vnemera | 0:6ef3fd4921d7 | 507 | LasBufResp[indLResp++] = (char)iLasO; |
vnemera | 0:6ef3fd4921d7 | 508 | if(iLasO == 13) { |
vnemera | 0:6ef3fd4921d7 | 509 | stLhmi = 4; |
vnemera | 0:6ef3fd4921d7 | 510 | iCounts = 0; |
vnemera | 0:6ef3fd4921d7 | 511 | flagLrsConnected = 1; |
vnemera | 0:6ef3fd4921d7 | 512 | } |
vnemera | 0:6ef3fd4921d7 | 513 | if(LasRS232.readable()) goto lasRS2; |
vnemera | 0:6ef3fd4921d7 | 514 | } |
vnemera | 0:6ef3fd4921d7 | 515 | else { |
vnemera | 0:6ef3fd4921d7 | 516 | ++iCounts; |
vnemera | 0:6ef3fd4921d7 | 517 | if(iCounts > 400) { |
vnemera | 0:6ef3fd4921d7 | 518 | indStat = 11; //error 11 - lazer does not answer |
vnemera | 0:6ef3fd4921d7 | 519 | indLResp = 0; |
vnemera | 0:6ef3fd4921d7 | 520 | stLhmi = 0; |
vnemera | 0:6ef3fd4921d7 | 521 | stL3 = stL3 & 0xE; //no hmi command |
vnemera | 0:6ef3fd4921d7 | 522 | flagLrsConnected = 0; |
vnemera | 0:6ef3fd4921d7 | 523 | } |
vnemera | 0:6ef3fd4921d7 | 524 | } |
vnemera | 0:6ef3fd4921d7 | 525 | } |
vnemera | 0:6ef3fd4921d7 | 526 | else if(stLhmi == 4) { //response to hmi |
vnemera | 0:6ef3fd4921d7 | 527 | //printf("L %c %c\n", *LasBufResp, *hmiLBuf); |
vnemera | 0:6ef3fd4921d7 | 528 | if (*LasBufResp == *hmiLBuf) { |
vnemera | 0:6ef3fd4921d7 | 529 | if (iSta == 1) { //update L.status to hmi |
vnemera | 0:6ef3fd4921d7 | 530 | c = 0; |
vnemera | 0:6ef3fd4921d7 | 531 | for(int i=6; i<indLResp; i++) { |
vnemera | 0:6ef3fd4921d7 | 532 | c = (c * 10) + LasBufResp[i-1] - '0'; |
vnemera | 0:6ef3fd4921d7 | 533 | } |
vnemera | 0:6ef3fd4921d7 | 534 | usta = c; |
vnemera | 0:6ef3fd4921d7 | 535 | iSta = 0; |
vnemera | 0:6ef3fd4921d7 | 536 | } |
vnemera | 0:6ef3fd4921d7 | 537 | indStat = 0; //done |
vnemera | 0:6ef3fd4921d7 | 538 | stLhmi = 5; |
vnemera | 0:6ef3fd4921d7 | 539 | } |
vnemera | 0:6ef3fd4921d7 | 540 | else { |
vnemera | 0:6ef3fd4921d7 | 541 | indStat = 12; //error 12 - laser command error |
vnemera | 0:6ef3fd4921d7 | 542 | stLhmi = 5; |
vnemera | 0:6ef3fd4921d7 | 543 | } |
vnemera | 0:6ef3fd4921d7 | 544 | } |
vnemera | 0:6ef3fd4921d7 | 545 | else if(stLhmi == 5) { //delay for next command |
vnemera | 0:6ef3fd4921d7 | 546 | ++iCounts; |
vnemera | 0:6ef3fd4921d7 | 547 | if(iCounts > iCmax) { |
vnemera | 0:6ef3fd4921d7 | 548 | indLResp = 0; |
vnemera | 0:6ef3fd4921d7 | 549 | stL3 = stL3 & 0xE; //no hmi command |
vnemera | 0:6ef3fd4921d7 | 550 | stLhmi = 0; |
vnemera | 0:6ef3fd4921d7 | 551 | } |
vnemera | 0:6ef3fd4921d7 | 552 | } |
vnemera | 0:6ef3fd4921d7 | 553 | } |
vnemera | 0:6ef3fd4921d7 | 554 | |
vnemera | 0:6ef3fd4921d7 | 555 | else if(stL3 & 2) { //pc command |
vnemera | 0:6ef3fd4921d7 | 556 | if(iPCcmd == 1) { |
vnemera | 0:6ef3fd4921d7 | 557 | if(stLpc == 2) { //send pc command to laser |
vnemera | 0:6ef3fd4921d7 | 558 | while(LasRS232.readable()) { |
vnemera | 0:6ef3fd4921d7 | 559 | iLasO2 = LasRS232.getc(); |
vnemera | 0:6ef3fd4921d7 | 560 | } |
vnemera | 0:6ef3fd4921d7 | 561 | for (int i = 2; i < (comBufPointer-1); i++) { |
vnemera | 0:6ef3fd4921d7 | 562 | LasRS232.printf("%c", comBuf[i]); |
vnemera | 0:6ef3fd4921d7 | 563 | //pc.printf("a%c ", comBuf[i]); |
vnemera | 0:6ef3fd4921d7 | 564 | } |
vnemera | 0:6ef3fd4921d7 | 565 | LasRS232.printf("\r"); |
vnemera | 0:6ef3fd4921d7 | 566 | iCounts = 0; |
vnemera | 0:6ef3fd4921d7 | 567 | stLpc = 3; |
vnemera | 0:6ef3fd4921d7 | 568 | } |
vnemera | 0:6ef3fd4921d7 | 569 | else if(stLpc == 3) { //wait response from laser |
vnemera | 0:6ef3fd4921d7 | 570 | if(LasRS232.readable()) { |
vnemera | 0:6ef3fd4921d7 | 571 | lasRS1: |
vnemera | 0:6ef3fd4921d7 | 572 | iCh = LasRS232.getc(); |
vnemera | 0:6ef3fd4921d7 | 573 | iCounts = 0; |
vnemera | 0:6ef3fd4921d7 | 574 | if(iCh == 13) { //CR - carrier return |
vnemera | 0:6ef3fd4921d7 | 575 | wrChar('\n'); //send LF to pc |
vnemera | 0:6ef3fd4921d7 | 576 | wrChar('>'); |
vnemera | 0:6ef3fd4921d7 | 577 | stLpc = 4; |
vnemera | 0:6ef3fd4921d7 | 578 | } |
vnemera | 0:6ef3fd4921d7 | 579 | else { |
vnemera | 0:6ef3fd4921d7 | 580 | wrChar(char(iCh)); |
vnemera | 0:6ef3fd4921d7 | 581 | } |
vnemera | 0:6ef3fd4921d7 | 582 | if(LasRS232.readable()) goto lasRS1; |
vnemera | 0:6ef3fd4921d7 | 583 | } |
vnemera | 0:6ef3fd4921d7 | 584 | else { |
vnemera | 0:6ef3fd4921d7 | 585 | ++iCounts; |
vnemera | 0:6ef3fd4921d7 | 586 | if(iCounts > 400) { //200mS |
vnemera | 0:6ef3fd4921d7 | 587 | wrCharArr(err101); //err101 = "No response\n" |
vnemera | 0:6ef3fd4921d7 | 588 | comBufPointer =0; |
vnemera | 0:6ef3fd4921d7 | 589 | stL3 = stL3 & 0xD; |
vnemera | 0:6ef3fd4921d7 | 590 | iPCcmd = 0; |
vnemera | 0:6ef3fd4921d7 | 591 | stLpc = 0; |
vnemera | 0:6ef3fd4921d7 | 592 | } |
vnemera | 0:6ef3fd4921d7 | 593 | } |
vnemera | 0:6ef3fd4921d7 | 594 | } |
vnemera | 0:6ef3fd4921d7 | 595 | else if(stLpc == 4) { //delay for next command |
vnemera | 0:6ef3fd4921d7 | 596 | ++iCounts; |
vnemera | 0:6ef3fd4921d7 | 597 | if(iCounts > iCmax) { |
vnemera | 0:6ef3fd4921d7 | 598 | comBufPointer =0; |
vnemera | 0:6ef3fd4921d7 | 599 | stL3 = stL3 & 0xD; |
vnemera | 0:6ef3fd4921d7 | 600 | iPCcmd = 0; |
vnemera | 0:6ef3fd4921d7 | 601 | stLpc = 0; |
vnemera | 0:6ef3fd4921d7 | 602 | } |
vnemera | 0:6ef3fd4921d7 | 603 | } |
vnemera | 0:6ef3fd4921d7 | 604 | |
vnemera | 0:6ef3fd4921d7 | 605 | } |
vnemera | 0:6ef3fd4921d7 | 606 | else if(iPCcmd == 2) { |
vnemera | 0:6ef3fd4921d7 | 607 | |
vnemera | 0:6ef3fd4921d7 | 608 | wrChar('S'); |
vnemera | 0:6ef3fd4921d7 | 609 | wrChar('T'); |
vnemera | 0:6ef3fd4921d7 | 610 | wrChar('A'); |
vnemera | 0:6ef3fd4921d7 | 611 | wrChar(' '); |
vnemera | 0:6ef3fd4921d7 | 612 | wrInt(usta); |
vnemera | 0:6ef3fd4921d7 | 613 | wrChar('\n'); |
vnemera | 0:6ef3fd4921d7 | 614 | wrChar('>'); |
vnemera | 0:6ef3fd4921d7 | 615 | comBufPointer =0; |
vnemera | 0:6ef3fd4921d7 | 616 | stL3 = stL3 & 0xD; |
vnemera | 0:6ef3fd4921d7 | 617 | iPCcmd = 0; |
vnemera | 0:6ef3fd4921d7 | 618 | stLpc = 0; |
vnemera | 0:6ef3fd4921d7 | 619 | |
vnemera | 0:6ef3fd4921d7 | 620 | } |
vnemera | 0:6ef3fd4921d7 | 621 | else if(iPCcmd == 3) { |
vnemera | 0:6ef3fd4921d7 | 622 | |
vnemera | 0:6ef3fd4921d7 | 623 | wrChar('I'); |
vnemera | 0:6ef3fd4921d7 | 624 | wrChar(' '); |
vnemera | 0:6ef3fd4921d7 | 625 | wrWord(wBp); |
vnemera | 0:6ef3fd4921d7 | 626 | wrChar(' '); |
vnemera | 0:6ef3fd4921d7 | 627 | wrWord(sBp); |
vnemera | 0:6ef3fd4921d7 | 628 | wrChar(' '); |
vnemera | 0:6ef3fd4921d7 | 629 | //wrChar('\n'); |
vnemera | 0:6ef3fd4921d7 | 630 | int a = sBp; |
vnemera | 0:6ef3fd4921d7 | 631 | for(int i=0; i<32; i++) { |
vnemera | 0:6ef3fd4921d7 | 632 | wrChar(pcBuf[a--]); |
vnemera | 0:6ef3fd4921d7 | 633 | if(a<0) {a=pcBufSize-1;} |
vnemera | 0:6ef3fd4921d7 | 634 | } |
vnemera | 0:6ef3fd4921d7 | 635 | wrChar('\n'); |
vnemera | 0:6ef3fd4921d7 | 636 | wrChar('>'); |
vnemera | 0:6ef3fd4921d7 | 637 | comBufPointer =0; |
vnemera | 0:6ef3fd4921d7 | 638 | stL3 = stL3 & 0xD; |
vnemera | 0:6ef3fd4921d7 | 639 | iPCcmd = 0; |
vnemera | 0:6ef3fd4921d7 | 640 | stLpc = 0; |
vnemera | 0:6ef3fd4921d7 | 641 | |
vnemera | 0:6ef3fd4921d7 | 642 | } |
vnemera | 0:6ef3fd4921d7 | 643 | else if(iPCcmd == 4) { |
vnemera | 0:6ef3fd4921d7 | 644 | |
vnemera | 0:6ef3fd4921d7 | 645 | wrChar('L'); |
vnemera | 0:6ef3fd4921d7 | 646 | wrChar('A'); |
vnemera | 0:6ef3fd4921d7 | 647 | wrChar(' '); |
vnemera | 0:6ef3fd4921d7 | 648 | wrInt(a7); |
vnemera | 0:6ef3fd4921d7 | 649 | wrChar(' '); |
vnemera | 0:6ef3fd4921d7 | 650 | wrInt(b7); |
vnemera | 0:6ef3fd4921d7 | 651 | wrChar(' '); |
vnemera | 0:6ef3fd4921d7 | 652 | wrInt(c7); |
vnemera | 0:6ef3fd4921d7 | 653 | wrChar(' '); |
vnemera | 0:6ef3fd4921d7 | 654 | wrInt(d7); |
vnemera | 0:6ef3fd4921d7 | 655 | wrChar('\n'); |
vnemera | 0:6ef3fd4921d7 | 656 | wrChar('>'); |
vnemera | 0:6ef3fd4921d7 | 657 | comBufPointer =0; |
vnemera | 0:6ef3fd4921d7 | 658 | stL3 = stL3 & 0xD; |
vnemera | 0:6ef3fd4921d7 | 659 | iPCcmd = 0; |
vnemera | 0:6ef3fd4921d7 | 660 | stLpc = 0; |
vnemera | 0:6ef3fd4921d7 | 661 | a7 = 0; b7 = 0; c7 = 0; d7 = 0; |
vnemera | 0:6ef3fd4921d7 | 662 | } |
vnemera | 0:6ef3fd4921d7 | 663 | else if(iPCcmd == 5) { |
vnemera | 0:6ef3fd4921d7 | 664 | /* |
vnemera | 0:6ef3fd4921d7 | 665 | wrInt(indLCabcc); |
vnemera | 0:6ef3fd4921d7 | 666 | wrChar(' '); |
vnemera | 0:6ef3fd4921d7 | 667 | wrChar('L'); |
vnemera | 0:6ef3fd4921d7 | 668 | wrChar('C'); |
vnemera | 0:6ef3fd4921d7 | 669 | wrChar(' '); |
vnemera | 0:6ef3fd4921d7 | 670 | wrChar('"'); |
vnemera | 0:6ef3fd4921d7 | 671 | |
vnemera | 0:6ef3fd4921d7 | 672 | for(int i=0; i<indLCabcc; i++) { |
vnemera | 0:6ef3fd4921d7 | 673 | wrChar(LabccBufCom[i]); |
vnemera | 0:6ef3fd4921d7 | 674 | } |
vnemera | 0:6ef3fd4921d7 | 675 | */ a7=0; b7=0, c7=0; d7=0; |
vnemera | 0:6ef3fd4921d7 | 676 | wrChar('5'); |
vnemera | 0:6ef3fd4921d7 | 677 | wrChar('\n'); |
vnemera | 0:6ef3fd4921d7 | 678 | wrChar('>'); |
vnemera | 0:6ef3fd4921d7 | 679 | comBufPointer =0; |
vnemera | 0:6ef3fd4921d7 | 680 | stL3 = stL3 & 0xD; |
vnemera | 0:6ef3fd4921d7 | 681 | iPCcmd = 0; |
vnemera | 0:6ef3fd4921d7 | 682 | stLpc = 0; |
vnemera | 0:6ef3fd4921d7 | 683 | |
vnemera | 0:6ef3fd4921d7 | 684 | } |
vnemera | 0:6ef3fd4921d7 | 685 | else if(iPCcmd == 6) { |
vnemera | 0:6ef3fd4921d7 | 686 | pc.printf("wMode %i\n", prPar[progNumber].wMode); |
vnemera | 0:6ef3fd4921d7 | 687 | pc.printf("Lmode %i\n", prPar[progNumber].Lmode); |
vnemera | 0:6ef3fd4921d7 | 688 | pc.printf("LPbeg %i\n", prPar[progNumber].LPbeg); |
vnemera | 0:6ef3fd4921d7 | 689 | pc.printf("LPend %i\n", prPar[progNumber].LPend); |
vnemera | 0:6ef3fd4921d7 | 690 | pc.printf("Lfreq %i\n", prPar[progNumber].Lfreq); |
vnemera | 0:6ef3fd4921d7 | 691 | pc.printf("Lpulse %i\n", prPar[progNumber].Lpulse); |
vnemera | 0:6ef3fd4921d7 | 692 | pc.printf("amplBeg %i\n", prPar[progNumber].amplBeg); |
vnemera | 0:6ef3fd4921d7 | 693 | pc.printf("amplEnd %i\n", prPar[progNumber].amplEnd); |
vnemera | 0:6ef3fd4921d7 | 694 | pc.printf("wFreq %i\n", prPar[progNumber].wFreq); |
vnemera | 0:6ef3fd4921d7 | 695 | pc.printf("wTime %i\n", prPar[progNumber].wTime); |
vnemera | 0:6ef3fd4921d7 | 696 | pc.printf("amplNum %i\n", prPar[progNumber].amplNum); |
vnemera | 0:6ef3fd4921d7 | 697 | |
vnemera | 0:6ef3fd4921d7 | 698 | wrChar('\n'); |
vnemera | 0:6ef3fd4921d7 | 699 | wrChar('>'); |
vnemera | 0:6ef3fd4921d7 | 700 | comBufPointer =0; |
vnemera | 0:6ef3fd4921d7 | 701 | stL3 = stL3 & 0xD; |
vnemera | 0:6ef3fd4921d7 | 702 | iPCcmd = 0; |
vnemera | 0:6ef3fd4921d7 | 703 | stLpc = 0; |
vnemera | 0:6ef3fd4921d7 | 704 | |
vnemera | 0:6ef3fd4921d7 | 705 | } |
vnemera | 0:6ef3fd4921d7 | 706 | } |
vnemera | 0:6ef3fd4921d7 | 707 | } |
vnemera | 0:6ef3fd4921d7 | 708 | |
vnemera | 0:6ef3fd4921d7 | 709 | void flipRS(void) { |
vnemera | 0:6ef3fd4921d7 | 710 | led2 = 1; |
vnemera | 0:6ef3fd4921d7 | 711 | //check io RS232 command |
vnemera | 0:6ef3fd4921d7 | 712 | if(ioRS232.readable()) { |
vnemera | 0:6ef3fd4921d7 | 713 | flip01: |
vnemera | 0:6ef3fd4921d7 | 714 | iCh = ioRS232.getc(); |
vnemera | 0:6ef3fd4921d7 | 715 | IOBufCom[indIOCom++] = (char)iCh; |
vnemera | 0:6ef3fd4921d7 | 716 | if(iCh == 13) { //CR - carriage return |
vnemera | 0:6ef3fd4921d7 | 717 | ioCommand(); |
vnemera | 0:6ef3fd4921d7 | 718 | } |
vnemera | 0:6ef3fd4921d7 | 719 | if(ioRS232.readable()) goto flip01; |
vnemera | 0:6ef3fd4921d7 | 720 | } |
vnemera | 0:6ef3fd4921d7 | 721 | //check response |
vnemera | 0:6ef3fd4921d7 | 722 | if(ioRS232.writeable()) { |
vnemera | 0:6ef3fd4921d7 | 723 | if(sBio != wBio) { //ioBuf not empty |
vnemera | 0:6ef3fd4921d7 | 724 | int ff = 12; |
vnemera | 0:6ef3fd4921d7 | 725 | flip02: |
vnemera | 0:6ef3fd4921d7 | 726 | ioRS232.putc(IOBufResp[sBio++]); |
vnemera | 0:6ef3fd4921d7 | 727 | if(sBio == IOBufSize) {sBio = 0;} |
vnemera | 0:6ef3fd4921d7 | 728 | --ff; |
vnemera | 0:6ef3fd4921d7 | 729 | if((sBio != wBio) && (ff > 0)) goto flip02; |
vnemera | 0:6ef3fd4921d7 | 730 | } |
vnemera | 0:6ef3fd4921d7 | 731 | } |
vnemera | 0:6ef3fd4921d7 | 732 | //check pc RS232 command |
vnemera | 0:6ef3fd4921d7 | 733 | if(pc.readable()) { |
vnemera | 0:6ef3fd4921d7 | 734 | iCh = pc.getc(); |
vnemera | 0:6ef3fd4921d7 | 735 | comBuf[comBufPointer++] = (char)iCh; |
vnemera | 0:6ef3fd4921d7 | 736 | wrChar(iCh); |
vnemera | 0:6ef3fd4921d7 | 737 | if(iCh == 10) { //LF - new line |
vnemera | 0:6ef3fd4921d7 | 738 | comParser(); |
vnemera | 0:6ef3fd4921d7 | 739 | } |
vnemera | 0:6ef3fd4921d7 | 740 | } |
vnemera | 0:6ef3fd4921d7 | 741 | |
vnemera | 0:6ef3fd4921d7 | 742 | if(pc.writeable()) { |
vnemera | 0:6ef3fd4921d7 | 743 | if(sBp != wBp) { //pcBuf not empty |
vnemera | 0:6ef3fd4921d7 | 744 | pc.putc(pcBuf[sBp++]); |
vnemera | 0:6ef3fd4921d7 | 745 | if(sBp == pcBufSize) {sBp = 0;} |
vnemera | 0:6ef3fd4921d7 | 746 | } |
vnemera | 0:6ef3fd4921d7 | 747 | } |
vnemera | 0:6ef3fd4921d7 | 748 | //serve Laser RS232 command |
vnemera | 0:6ef3fd4921d7 | 749 | LaserCommand(); |
vnemera | 0:6ef3fd4921d7 | 750 | led2 = 0; |
vnemera | 0:6ef3fd4921d7 | 751 | } |
vnemera | 0:6ef3fd4921d7 | 752 | |
vnemera | 0:6ef3fd4921d7 | 753 | //========================================================= |
vnemera | 0:6ef3fd4921d7 | 754 | int lampSt; |
vnemera | 0:6ef3fd4921d7 | 755 | |
vnemera | 0:6ef3fd4921d7 | 756 | void main_cycle_add(void) |
vnemera | 0:6ef3fd4921d7 | 757 | { |
vnemera | 0:6ef3fd4921d7 | 758 | if((flagWeld == 0) & (lampSt == 1)) { |
vnemera | 0:6ef3fd4921d7 | 759 | outLampStart = 0; |
vnemera | 0:6ef3fd4921d7 | 760 | lampSt = 0; |
vnemera | 0:6ef3fd4921d7 | 761 | } |
vnemera | 0:6ef3fd4921d7 | 762 | else if((flagWeld == 1) & (lampSt == 0)) { |
vnemera | 0:6ef3fd4921d7 | 763 | outLampStart = 1; |
vnemera | 0:6ef3fd4921d7 | 764 | lampSt = 1; |
vnemera | 0:6ef3fd4921d7 | 765 | } |
vnemera | 0:6ef3fd4921d7 | 766 | } |
vnemera | 0:6ef3fd4921d7 | 767 |