rev.1

Dependencies:   RA8875 SDFileSystem mbed

Committer:
vnemera
Date:
Fri Feb 17 16:53:53 2017 +0000
Revision:
0:6ef3fd4921d7
rev.1

Who changed what in which revision?

UserRevisionLine numberNew 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