MDX-15,20の制御用library

Committer:
suupen
Date:
Sun Oct 14 00:12:37 2018 +0000
Revision:
9:5ee05e9c5aca
Parent:
8:e65e532d1933
??????

Who changed what in which revision?

UserRevisionLine numberNew contents of line
suupen 1:1751fee99a0d 1 #include "MDX20.h"
suupen 1:1751fee99a0d 2 #include "BufferedSerial.h"
suupen 1:1751fee99a0d 3
suupen 8:e65e532d1933 4 //#define DEBUG
suupen 6:b61356230acf 5 #ifdef DEBUG
suupen 6:b61356230acf 6 #define DEBUG_PRINT(...) printf(__VA_ARGS__)
suupen 6:b61356230acf 7 #else
suupen 6:b61356230acf 8 #define DEBUG_PRINT(...)
suupen 6:b61356230acf 9 #endif // DEBUG
suupen 6:b61356230acf 10
suupen 6:b61356230acf 11
suupen 6:b61356230acf 12 LocalFileSystem local("local");
suupen 1:1751fee99a0d 13
suupen 1:1751fee99a0d 14 MDX20::MDX20(PinName tx, PinName rx, PinName cts) : _serial(tx, rx), _cts(cts, PullUp)
suupen 1:1751fee99a0d 15 {
suupen 1:1751fee99a0d 16
suupen 1:1751fee99a0d 17 _serial.baud(9600);
suupen 1:1751fee99a0d 18 _serial.format(8,Serial::None,1);
suupen 6:b61356230acf 19
suupen 6:b61356230acf 20
suupen 6:b61356230acf 21
suupen 1:1751fee99a0d 22 }
suupen 1:1751fee99a0d 23
suupen 1:1751fee99a0d 24 MDX20::~MDX20()
suupen 1:1751fee99a0d 25 {
suupen 1:1751fee99a0d 26 }
suupen 1:1751fee99a0d 27
suupen 2:8446eb1774c4 28 void MDX20::clearPositon(void)
suupen 2:8446eb1774c4 29 {
suupen 2:8446eb1774c4 30 D_position[Z_x] = 0;
suupen 2:8446eb1774c4 31 D_position[Z_y] = 0;
suupen 2:8446eb1774c4 32 D_position[Z_z] = 0;
suupen 2:8446eb1774c4 33 }
suupen 3:3bf2936b8d9b 34
suupen 2:8446eb1774c4 35 void MDX20::answerPositon(int16_t *position)
suupen 2:8446eb1774c4 36 {
suupen 2:8446eb1774c4 37 *(position + Z_x) = D_position[Z_x];
suupen 2:8446eb1774c4 38 *(position + Z_y) = D_position[Z_y];
suupen 2:8446eb1774c4 39 *(position + Z_z) = D_position[Z_z];
suupen 2:8446eb1774c4 40
suupen 3:3bf2936b8d9b 41 }
suupen 3:3bf2936b8d9b 42
suupen 3:3bf2936b8d9b 43 void MDX20::answerPositonMillimeter(float *position)
suupen 3:3bf2936b8d9b 44 {
suupen 3:3bf2936b8d9b 45 *(position + Z_x) = (float)D_position[Z_x] * countToMillimeter;
suupen 3:3bf2936b8d9b 46 *(position + Z_y) = (float)D_position[Z_y] * countToMillimeter;
suupen 3:3bf2936b8d9b 47 *(position + Z_z) = (float)D_position[Z_z] * countToMillimeter;
suupen 3:3bf2936b8d9b 48
suupen 3:3bf2936b8d9b 49 }
suupen 3:3bf2936b8d9b 50
suupen 3:3bf2936b8d9b 51
suupen 3:3bf2936b8d9b 52 void MDX20::integralPosition(char *str)
suupen 3:3bf2936b8d9b 53 {
suupen 3:3bf2936b8d9b 54 char strData[100];
suupen 3:3bf2936b8d9b 55 char *p;
suupen 3:3bf2936b8d9b 56 static uint8_t AorR = 'A'; // 'A'=absolute 'R'=relative
suupen 3:3bf2936b8d9b 57
suupen 3:3bf2936b8d9b 58 strcpy(strData, str);
suupen 3:3bf2936b8d9b 59
suupen 3:3bf2936b8d9b 60 if( 0 == strncmp("^PA", strData, 3)) {
suupen 3:3bf2936b8d9b 61 AorR = 'A';
suupen 5:bd414d8e483f 62 return;
suupen 3:3bf2936b8d9b 63 } else if( 0 == strncmp("^PR", strData, 3)) {
suupen 3:3bf2936b8d9b 64 AorR = 'R';
suupen 6:b61356230acf 65 *(str + 2) = 'A'; // MDX-20に送信するときは相対値から絶対値にする(この関数の中で相対値から絶対値にしているため)
suupen 5:bd414d8e483f 66 return;
suupen 5:bd414d8e483f 67 }
suupen 5:bd414d8e483f 68
suupen 5:bd414d8e483f 69 // コマンド中の","を" "に置き換える
suupen 5:bd414d8e483f 70 while ((p = strchr(strData, ','))!=NULL) *p = ' ';
suupen 5:bd414d8e483f 71
suupen 6:b61356230acf 72 int16_t a[3] = {0,0,0};
suupen 5:bd414d8e483f 73
suupen 5:bd414d8e483f 74 if(strncmp(str, "!ZZ",3) == 0) {
suupen 6:b61356230acf 75 sscanf((strData + 3), "%d %d %d", &a[0], &a[1], &a[2]);
suupen 5:bd414d8e483f 76 } else if(strncmp(str, "Z",1) == 0) {
suupen 6:b61356230acf 77 sscanf((strData + 1), "%d %d %d", &a[0], &a[1], &a[2]);
suupen 5:bd414d8e483f 78 } else if(strncmp(str, "^PU",3) == 0) {
suupen 6:b61356230acf 79 sscanf((strData + 3), "%d %d", &a[0], &a[1]);
suupen 6:b61356230acf 80 a[2] = SHRT_MAX;
suupen 5:bd414d8e483f 81 } else if(strncmp(str, "^PD",3) == 0) {
suupen 6:b61356230acf 82 sscanf((strData + 3), "%d %d", &a[0], &a[1]);
suupen 6:b61356230acf 83 a[2] = SHRT_MAX;
suupen 6:b61356230acf 84 } else if(strncmp(str, "!ZM",3) == 0) {
suupen 6:b61356230acf 85 sscanf((strData + 3), "%d", &a[2]);
suupen 6:b61356230acf 86 a[0] = SHRT_MAX;
suupen 6:b61356230acf 87 a[1] = SHRT_MAX;
suupen 6:b61356230acf 88
suupen 6:b61356230acf 89 } else {
suupen 6:b61356230acf 90 return;
suupen 3:3bf2936b8d9b 91 }
suupen 3:3bf2936b8d9b 92
suupen 3:3bf2936b8d9b 93 if(AorR == 'A') {
suupen 6:b61356230acf 94 if(a[0] != SHRT_MAX) {
suupen 6:b61356230acf 95 D_position[Z_x] = a[0] + D_userOriginPosition[Z_x];
suupen 6:b61356230acf 96 }
suupen 6:b61356230acf 97 if(a[1] != SHRT_MAX) {
suupen 6:b61356230acf 98 D_position[Z_y] = a[1] + D_userOriginPosition[Z_y];
suupen 6:b61356230acf 99 }
suupen 6:b61356230acf 100 if(a[2] != SHRT_MAX) {
suupen 6:b61356230acf 101 D_position[Z_z] = a[2] + D_userOriginPosition[Z_z];
suupen 5:bd414d8e483f 102 }
suupen 3:3bf2936b8d9b 103 } else {
suupen 6:b61356230acf 104 // controler axis move data change to absolute from relative
suupen 6:b61356230acf 105 if(a[0] != SHRT_MAX) {
suupen 6:b61356230acf 106 D_position[Z_x] += a[0];
suupen 6:b61356230acf 107 }
suupen 6:b61356230acf 108 if(a[1] != SHRT_MAX) {
suupen 6:b61356230acf 109 D_position[Z_y] += a[1];
suupen 6:b61356230acf 110 }
suupen 6:b61356230acf 111 if(a[2] != SHRT_MAX) {
suupen 6:b61356230acf 112 D_position[Z_z] += a[2];
suupen 5:bd414d8e483f 113 }
suupen 3:3bf2936b8d9b 114 }
suupen 6:b61356230acf 115 translationToControlerAxisMoveDataFromRMLAxisMoveData(str);
suupen 6:b61356230acf 116 // DEBUG_PRINT("x=%d y=%d z=%d \n", D_position[Z_x], D_position[Z_y], D_position[Z_z]);
suupen 8:e65e532d1933 117 // wait(0.1);
suupen 3:3bf2936b8d9b 118 }
suupen 3:3bf2936b8d9b 119
suupen 6:b61356230acf 120 void MDX20::translationToControlerAxisMoveDataFromRMLAxisMoveData(char *str)
suupen 6:b61356230acf 121 {
suupen 6:b61356230acf 122 char buffer[50];
suupen 6:b61356230acf 123
suupen 6:b61356230acf 124 if(strncmp(str, "!ZZ",3) == 0) {
suupen 6:b61356230acf 125 sprintf(buffer,"!ZZ%d,%d,%d;\r\n",D_position[Z_x], D_position[Z_y], D_position[Z_z]);
suupen 6:b61356230acf 126 strcpy(str, buffer);
suupen 6:b61356230acf 127 } else if(strncmp(str, "Z",1) == 0) {
suupen 6:b61356230acf 128 sprintf(buffer,"Z%d,%d,%d;\r\n",D_position[Z_x], D_position[Z_y], D_position[Z_z]);
suupen 6:b61356230acf 129 strcpy(str, buffer);
suupen 6:b61356230acf 130 } else if(strncmp(str, "^PU",3) == 0) {
suupen 6:b61356230acf 131 sprintf(buffer,"^PU%d,%d;\r\n",D_position[Z_x], D_position[Z_y]);
suupen 6:b61356230acf 132 strcpy(str, buffer);
suupen 6:b61356230acf 133 } else if(strncmp(str, "^PD",3) == 0) {
suupen 6:b61356230acf 134 sprintf(buffer,"^PD%d,%d;\r\n",D_position[Z_x], D_position[Z_y]);
suupen 6:b61356230acf 135 strcpy(str, buffer);
suupen 6:b61356230acf 136 } else if(strncmp(str, "!ZM",3) == 0) {
suupen 6:b61356230acf 137 sprintf(buffer,"!ZM%d;\r\n",D_position[Z_z]);
suupen 6:b61356230acf 138 strcpy(str, buffer);
suupen 6:b61356230acf 139 } else {
suupen 6:b61356230acf 140 // nothing
suupen 6:b61356230acf 141 }
suupen 6:b61356230acf 142 }
suupen 6:b61356230acf 143
suupen 6:b61356230acf 144
suupen 3:3bf2936b8d9b 145 uint8_t MDX20::xyOrigin(void)
suupen 2:8446eb1774c4 146 {
suupen 6:b61356230acf 147 char buffer[50];
suupen 3:3bf2936b8d9b 148 uint8_t ans;
suupen 3:3bf2936b8d9b 149 D_userOriginPosition[Z_x] = D_position[Z_x];
suupen 3:3bf2936b8d9b 150 D_userOriginPosition[Z_y] = D_position[Z_y];
suupen 5:bd414d8e483f 151 // D_userOriginPosition[Z_z] = 0;
suupen 6:b61356230acf 152 FILE *fp;
suupen 3:3bf2936b8d9b 153
suupen 6:b61356230acf 154 fp = fopen("/local/OriginX.ini", "w");
suupen 6:b61356230acf 155 sprintf(buffer,"%d",D_userOriginPosition[Z_x]);
suupen 6:b61356230acf 156 fprintf(fp, buffer);
suupen 6:b61356230acf 157 fclose(fp);
suupen 6:b61356230acf 158
suupen 6:b61356230acf 159 fp = fopen("/local/OriginY.ini", "w");
suupen 6:b61356230acf 160 sprintf(buffer,"%d",D_userOriginPosition[Z_y]);
suupen 6:b61356230acf 161 fprintf(fp, buffer);
suupen 6:b61356230acf 162 fclose(fp);
suupen 3:3bf2936b8d9b 163
suupen 3:3bf2936b8d9b 164 return ans;
suupen 3:3bf2936b8d9b 165 }
suupen 3:3bf2936b8d9b 166
suupen 3:3bf2936b8d9b 167 uint8_t MDX20::zOrigin(void)
suupen 3:3bf2936b8d9b 168 {
suupen 6:b61356230acf 169 char buffer[50];
suupen 3:3bf2936b8d9b 170 uint8_t ans;
suupen 5:bd414d8e483f 171 D_userOriginPosition[Z_z] = D_position[Z_z];
suupen 6:b61356230acf 172
suupen 6:b61356230acf 173 FILE *fp = fopen("/local/OriginZ.ini", "w");
suupen 6:b61356230acf 174 sprintf(buffer,"%d",D_userOriginPosition[Z_z]);
suupen 6:b61356230acf 175 fprintf(fp, buffer);
suupen 6:b61356230acf 176 fclose(fp);
suupen 3:3bf2936b8d9b 177
suupen 5:bd414d8e483f 178 /* Z0 command use
suupen 5:bd414d8e483f 179 sprintf(buffer, "!ZO%d;",0); // 今いる位置をZ原点にするので"0"を設定する
suupen 5:bd414d8e483f 180 // printf("%s\r\n",buffer);
suupen 5:bd414d8e483f 181 ans &= sendData(buffer);
suupen 5:bd414d8e483f 182 */
suupen 3:3bf2936b8d9b 183 return ans;
suupen 3:3bf2936b8d9b 184 }
suupen 2:8446eb1774c4 185
suupen 8:e65e532d1933 186 /** offset加算後の各軸の可動範囲チェック
suupen 8:e65e532d1933 187 * @para data RMLデータ一命令文字列の先頭アドレス
suupen 8:e65e532d1933 188 * @returns
suupen 8:e65e532d1933 189 * false :逸脱あり
suupen 8:e65e532d1933 190 * true :正常
suupen 8:e65e532d1933 191 */
suupen 8:e65e532d1933 192 int32_t MDX20::axisMovingCheck(char* data)
suupen 8:e65e532d1933 193 {
suupen 8:e65e532d1933 194 int32_t ans = true;
suupen 8:e65e532d1933 195 integralPosition(data);
suupen 8:e65e532d1933 196 if(
suupen 8:e65e532d1933 197 ((D_position[Z_x] < Z_xAxisMin) || (Z_xAxisMax < D_position[Z_x])) ||
suupen 8:e65e532d1933 198 ((D_position[Z_y] < Z_yAxisMin) || (Z_yAxisMax < D_position[Z_y])) ||
suupen 8:e65e532d1933 199 ((D_position[Z_z] < Z_zAxisMin) || (Z_zAxisMax < D_position[Z_z]))
suupen 8:e65e532d1933 200 ) {
suupen 8:e65e532d1933 201 ans = false;
suupen 8:e65e532d1933 202 }
suupen 8:e65e532d1933 203 return ans;
suupen 8:e65e532d1933 204 }
suupen 8:e65e532d1933 205
suupen 1:1751fee99a0d 206 /**
suupen 1:1751fee99a0d 207 * MDX-15/20へのデータ送信
suupen 1:1751fee99a0d 208 * @@para *data : データ一行の先頭アドレス
suupen 1:1751fee99a0d 209 * @@para uint8_t : 0:送信キャンセル 1:送信完了
suupen 1:1751fee99a0d 210 */
suupen 1:1751fee99a0d 211 uint8_t MDX20::sendData(char* data)
suupen 1:1751fee99a0d 212 {
suupen 1:1751fee99a0d 213 uint8_t ans = 0; // 0:送信キャンセル 1:送信完了
suupen 6:b61356230acf 214 char buffer[50];
suupen 6:b61356230acf 215 strcpy(buffer, data);
suupen 1:1751fee99a0d 216
suupen 2:8446eb1774c4 217 while(_cts != 0) {}
suupen 2:8446eb1774c4 218 wait(0.1); // このwait timeがないとMDX-20からのwait指示を読み飛ばす
suupen 3:3bf2936b8d9b 219
suupen 6:b61356230acf 220 if(strncmp(buffer, "!MC0", 4) == 0) {
suupen 6:b61356230acf 221 motorState = false;
suupen 6:b61356230acf 222 } else if(strncmp(buffer, "!MC1", 4) == 0) {
suupen 6:b61356230acf 223 motorState = true;
suupen 6:b61356230acf 224 } else {
suupen 6:b61356230acf 225 // nothing
suupen 6:b61356230acf 226 }
suupen 6:b61356230acf 227
suupen 6:b61356230acf 228 DEBUG_PRINT("send = %s\r\n",buffer);
suupen 6:b61356230acf 229 integralPosition(buffer);
suupen 6:b61356230acf 230 _serial.printf("%s\r\n",buffer);
suupen 6:b61356230acf 231
suupen 8:e65e532d1933 232 // 可動範囲外に出たらmin,maxに差し替える
suupen 8:e65e532d1933 233 if(D_position[Z_x] < Z_xAxisMin) {
suupen 8:e65e532d1933 234 D_position[Z_x] = Z_xAxisMin;
suupen 8:e65e532d1933 235 }
suupen 8:e65e532d1933 236 if(Z_xAxisMax < D_position[Z_x]) {
suupen 8:e65e532d1933 237 D_position[Z_x] = Z_xAxisMax;
suupen 8:e65e532d1933 238 }
suupen 8:e65e532d1933 239 if(D_position[Z_y] < Z_yAxisMin) {
suupen 8:e65e532d1933 240 D_position[Z_y] = Z_yAxisMin;
suupen 8:e65e532d1933 241 }
suupen 8:e65e532d1933 242 if(Z_yAxisMax < D_position[Z_y]) {
suupen 8:e65e532d1933 243 D_position[Z_y] = Z_yAxisMax;
suupen 8:e65e532d1933 244 }
suupen 8:e65e532d1933 245 if(D_position[Z_z] < Z_zAxisMin) {
suupen 8:e65e532d1933 246 D_position[Z_z] = Z_zAxisMin;
suupen 8:e65e532d1933 247 }
suupen 8:e65e532d1933 248 if(Z_zAxisMax < D_position[Z_z]) {
suupen 8:e65e532d1933 249 D_position[Z_z] = Z_zAxisMax;
suupen 8:e65e532d1933 250 }
suupen 8:e65e532d1933 251
suupen 2:8446eb1774c4 252 ans = 1;
suupen 2:8446eb1774c4 253
suupen 1:1751fee99a0d 254 return (ans);
suupen 1:1751fee99a0d 255 }
suupen 1:1751fee99a0d 256
suupen 9:5ee05e9c5aca 257 /**
suupen 9:5ee05e9c5aca 258 *
suupen 9:5ee05e9c5aca 259 */
suupen 3:3bf2936b8d9b 260 uint8_t MDX20::reciveData(void)
suupen 3:3bf2936b8d9b 261 {
suupen 3:3bf2936b8d9b 262 char ans = 0;
suupen 3:3bf2936b8d9b 263 while(_serial.readable()) {
suupen 3:3bf2936b8d9b 264 ans = _serial.getc();
suupen 3:3bf2936b8d9b 265 }
suupen 3:3bf2936b8d9b 266 return ans;
suupen 3:3bf2936b8d9b 267 }
suupen 3:3bf2936b8d9b 268
suupen 1:1751fee99a0d 269 int MDX20::putc(int c)
suupen 1:1751fee99a0d 270 {
suupen 1:1751fee99a0d 271 _serial.putc(c);
suupen 1:1751fee99a0d 272 return c;
suupen 1:1751fee99a0d 273 }
suupen 1:1751fee99a0d 274
suupen 2:8446eb1774c4 275 uint8_t MDX20::initial(void)
suupen 2:8446eb1774c4 276 {
suupen 2:8446eb1774c4 277 uint8_t ans;
suupen 6:b61356230acf 278 char buffer[50];
suupen 2:8446eb1774c4 279 clearPositon();
suupen 6:b61356230acf 280 FILE *fp;
suupen 6:b61356230acf 281
suupen 6:b61356230acf 282 fp = fopen("/local/ORIGINX.INI", "r");
suupen 6:b61356230acf 283 if ( fp != NULL ) {
suupen 6:b61356230acf 284 if(NULL != fgets(buffer, sizeof(buffer), fp)) {
suupen 6:b61356230acf 285 D_userOriginPosition[Z_x] = atoi(buffer);
suupen 6:b61356230acf 286 } else {
suupen 6:b61356230acf 287 // nothing
suupen 6:b61356230acf 288 }
suupen 6:b61356230acf 289 fclose(fp);
suupen 6:b61356230acf 290
suupen 6:b61356230acf 291 } else {
suupen 6:b61356230acf 292 // nothing
suupen 6:b61356230acf 293 }
suupen 6:b61356230acf 294
suupen 6:b61356230acf 295 fp = fopen("/local/ORIGINY.INI", "r");
suupen 6:b61356230acf 296 if ( fp != NULL ) {
suupen 6:b61356230acf 297 if(NULL != fgets(buffer, sizeof(buffer), fp)) {
suupen 6:b61356230acf 298 D_userOriginPosition[Z_y] = atoi(buffer);
suupen 6:b61356230acf 299 } else {
suupen 6:b61356230acf 300 // nothing
suupen 6:b61356230acf 301 }
suupen 6:b61356230acf 302 fclose(fp);
suupen 6:b61356230acf 303
suupen 6:b61356230acf 304
suupen 6:b61356230acf 305 } else {
suupen 6:b61356230acf 306 // nothing
suupen 6:b61356230acf 307 }
suupen 6:b61356230acf 308
suupen 6:b61356230acf 309 fp = fopen("/local/ORIGINZ.INI", "r");
suupen 6:b61356230acf 310 if ( fp != NULL ) {
suupen 6:b61356230acf 311 if(NULL != fgets(buffer, sizeof(buffer), fp)) {
suupen 6:b61356230acf 312 D_userOriginPosition[Z_z] = atoi(buffer);
suupen 6:b61356230acf 313 } else {
suupen 6:b61356230acf 314 // nothing
suupen 6:b61356230acf 315 }
suupen 6:b61356230acf 316 fclose(fp);
suupen 6:b61356230acf 317
suupen 6:b61356230acf 318 } else {
suupen 6:b61356230acf 319 // nothing
suupen 6:b61356230acf 320 }
suupen 6:b61356230acf 321
suupen 6:b61356230acf 322 ans &= sendData("^IN;");
suupen 6:b61356230acf 323 ans &= sendData("!MC0;");
suupen 6:b61356230acf 324 ans &= sendData("!ZO0;");
suupen 6:b61356230acf 325 ans &= sendData("!ZO0;"); // Z axis origin initialaize
suupen 6:b61356230acf 326 ans &= sendData("^PA;");
suupen 6:b61356230acf 327
suupen 6:b61356230acf 328 sprintf(buffer,"Z%d,%d,%d;",-D_userOriginPosition[Z_x], -D_userOriginPosition[Z_y], -D_userOriginPosition[Z_z]);
suupen 6:b61356230acf 329
suupen 6:b61356230acf 330 ans &= sendData(buffer);
suupen 6:b61356230acf 331
suupen 2:8446eb1774c4 332 return (ans);
suupen 2:8446eb1774c4 333 }
suupen 2:8446eb1774c4 334
suupen 4:b01a67ab40cf 335 uint8_t MDX20::motorOff(void)
suupen 4:b01a67ab40cf 336 {
suupen 4:b01a67ab40cf 337 uint8_t ans;
suupen 6:b61356230acf 338 ans &= sendData("!MC0;");
suupen 4:b01a67ab40cf 339 return (ans);
suupen 4:b01a67ab40cf 340 }
suupen 4:b01a67ab40cf 341
suupen 9:5ee05e9c5aca 342 /**
suupen 9:5ee05e9c5aca 343 * @note モータを動かすためには位置設定コマンドの発行が必要
suupen 9:5ee05e9c5aca 344 */
suupen 6:b61356230acf 345 uint8_t MDX20::motorOn(void)
suupen 6:b61356230acf 346 {
suupen 6:b61356230acf 347 uint8_t ans;
suupen 8:e65e532d1933 348 ans &= sendData("!MC1;");
suupen 8:e65e532d1933 349 ans &= sendData("^PR;");
suupen 8:e65e532d1933 350 ans &= sendData("Z0,0,0");
suupen 6:b61356230acf 351 return (ans);
suupen 6:b61356230acf 352 }
suupen 6:b61356230acf 353
suupen 6:b61356230acf 354
suupen 3:3bf2936b8d9b 355 uint8_t MDX20::userOriginInitial(void)
suupen 3:3bf2936b8d9b 356 {
suupen 6:b61356230acf 357 char buffer[50];
suupen 3:3bf2936b8d9b 358 uint8_t ans;
suupen 3:3bf2936b8d9b 359
suupen 6:b61356230acf 360 ans &= sendData("^PA;");
suupen 6:b61356230acf 361 ans &= sendData("!MC0;");
suupen 3:3bf2936b8d9b 362
suupen 6:b61356230acf 363 sprintf(buffer, "Z%d,%d,%d;",0, 0, 0);
suupen 3:3bf2936b8d9b 364 ans &= sendData(buffer);
suupen 3:3bf2936b8d9b 365
suupen 3:3bf2936b8d9b 366 return ans;
suupen 3:3bf2936b8d9b 367 }
suupen 3:3bf2936b8d9b 368
suupen 9:5ee05e9c5aca 369 uint8_t MDX20::userXYOriginInitial(void)
suupen 9:5ee05e9c5aca 370 {
suupen 9:5ee05e9c5aca 371 char buffer[50];
suupen 9:5ee05e9c5aca 372 uint8_t ans;
suupen 9:5ee05e9c5aca 373
suupen 9:5ee05e9c5aca 374 ans &= sendData("^PA;");
suupen 9:5ee05e9c5aca 375 ans &= sendData("!MC0;");
suupen 9:5ee05e9c5aca 376
suupen 9:5ee05e9c5aca 377 sprintf(buffer, "Z%d,%d,%d;",0, 0, D_position[Z_z] - D_userOriginPosition[Z_z]);
suupen 9:5ee05e9c5aca 378 ans &= sendData(buffer);
suupen 9:5ee05e9c5aca 379
suupen 9:5ee05e9c5aca 380 return ans;
suupen 9:5ee05e9c5aca 381 }
suupen 9:5ee05e9c5aca 382
suupen 9:5ee05e9c5aca 383 uint8_t MDX20::userZOriginInitial(void)
suupen 9:5ee05e9c5aca 384 {
suupen 9:5ee05e9c5aca 385 char buffer[50];
suupen 9:5ee05e9c5aca 386 uint8_t ans;
suupen 9:5ee05e9c5aca 387
suupen 9:5ee05e9c5aca 388 ans &= sendData("^PA;");
suupen 9:5ee05e9c5aca 389 ans &= sendData("!MC0;");
suupen 9:5ee05e9c5aca 390
suupen 9:5ee05e9c5aca 391 sprintf(buffer, "!ZM%d;",0);
suupen 9:5ee05e9c5aca 392 ans &= sendData(buffer);
suupen 9:5ee05e9c5aca 393
suupen 9:5ee05e9c5aca 394 return ans;
suupen 9:5ee05e9c5aca 395 }
suupen 9:5ee05e9c5aca 396
suupen 2:8446eb1774c4 397 uint8_t MDX20::final(void)
suupen 2:8446eb1774c4 398 {
suupen 3:3bf2936b8d9b 399 uint8_t ans;
suupen 9:5ee05e9c5aca 400
suupen 9:5ee05e9c5aca 401 // モータを止めて、Z軸を機械原点に戻す。(X,Y軸はその場にとどめる)
suupen 9:5ee05e9c5aca 402 ans &= sendData("!MC0;");
suupen 9:5ee05e9c5aca 403 ans &= sendData("^PA;");
suupen 9:5ee05e9c5aca 404 ans &= sendData("!ZO0;");
suupen 9:5ee05e9c5aca 405 ans &= sendData("!ZO0;"); // Z axis origin initialaize
suupen 9:5ee05e9c5aca 406
suupen 9:5ee05e9c5aca 407 /* このコードだとZ軸が原点に戻らないままXY実を原点に戻すためワークに引っ掛かり破損する
suupen 6:b61356230acf 408 ans &= sendData("!MC0;");
suupen 6:b61356230acf 409 ans &= sendData("^PA;");
suupen 6:b61356230acf 410 ans &= sendData("Z0,0,0;");
suupen 9:5ee05e9c5aca 411 */
suupen 2:8446eb1774c4 412 clearPositon();
suupen 6:b61356230acf 413 ans &= sendData("^IN;");
suupen 2:8446eb1774c4 414 return (ans);
suupen 3:3bf2936b8d9b 415 }
suupen 5:bd414d8e483f 416 /*
suupen 2:8446eb1774c4 417 uint8_t MDX20::zeroSetting(void)
suupen 2:8446eb1774c4 418 {
suupen 2:8446eb1774c4 419 uint8_t ans;
suupen 2:8446eb1774c4 420
suupen 2:8446eb1774c4 421 ans &= sendData("!X00");
suupen 2:8446eb1774c4 422 ans &= sendData("!Y00");
suupen 2:8446eb1774c4 423 ans &= sendData("!Z00");
suupen 2:8446eb1774c4 424 clearPositon();
suupen 2:8446eb1774c4 425 return (ans);
suupen 2:8446eb1774c4 426 }
suupen 5:bd414d8e483f 427 */
suupen 5:bd414d8e483f 428
suupen 2:8446eb1774c4 429 uint8_t MDX20::XYZMove(int16_t x, int16_t y, int16_t z)
suupen 2:8446eb1774c4 430 {
suupen 2:8446eb1774c4 431 uint8_t ans;
suupen 6:b61356230acf 432 char buffer[50];
suupen 2:8446eb1774c4 433
suupen 6:b61356230acf 434 ans &= sendData("!MC0;");
suupen 6:b61356230acf 435 strcpy(buffer, "^PR;");
suupen 6:b61356230acf 436 ans &= sendData(buffer);
suupen 6:b61356230acf 437 sprintf(buffer, "Z%05d,%05d,%05d;",x, y, z);
suupen 2:8446eb1774c4 438 ans &= sendData(buffer);
suupen 2:8446eb1774c4 439
suupen 2:8446eb1774c4 440 return (ans);
suupen 2:8446eb1774c4 441 }
suupen 6:b61356230acf 442
suupen 6:b61356230acf 443 void MDX20::offsetXAxisAdjustment(int16_t axisData)
suupen 6:b61356230acf 444 {
suupen 6:b61356230acf 445 XYZMove(axisData, 0, 0);
suupen 6:b61356230acf 446 // D_userOriginPosition[Z_x] = 0;
suupen 6:b61356230acf 447
suupen 6:b61356230acf 448 }
suupen 6:b61356230acf 449
suupen 6:b61356230acf 450 void MDX20::offsetYAxisAdjustment(int16_t axisData)
suupen 6:b61356230acf 451 {
suupen 6:b61356230acf 452 XYZMove(0, axisData, 0);
suupen 6:b61356230acf 453 // D_userOriginPosition[Z_y] = 0;
suupen 6:b61356230acf 454
suupen 6:b61356230acf 455 }
suupen 6:b61356230acf 456
suupen 6:b61356230acf 457 void MDX20::offsetZAxisAdjustment(int16_t axisData)
suupen 6:b61356230acf 458 {
suupen 6:b61356230acf 459 XYZMove(0, 0, axisData);
suupen 6:b61356230acf 460 // D_userOriginPosition[Z_z] = 0;
suupen 6:b61356230acf 461
suupen 6:b61356230acf 462 }
suupen 6:b61356230acf 463
suupen 6:b61356230acf 464 void MDX20::userOriginPositionInitial(void)
suupen 6:b61356230acf 465 {
suupen 6:b61356230acf 466 D_userOriginPosition[Z_x] = 0;
suupen 6:b61356230acf 467 D_userOriginPosition[Z_y] = 0;
suupen 6:b61356230acf 468 D_userOriginPosition[Z_z] = 0;
suupen 6:b61356230acf 469 }
suupen 6:b61356230acf 470
suupen 6:b61356230acf 471 int32_t MDX20::motorStateCheck(void)
suupen 6:b61356230acf 472 {
suupen 6:b61356230acf 473 return motorState;
suupen 8:e65e532d1933 474 }
suupen 6:b61356230acf 475
suupen 9:5ee05e9c5aca 476 /** MDX-20の接続確認
suupen 9:5ee05e9c5aca 477 * @return true:接続あり false:なし
suupen 9:5ee05e9c5aca 478 */
suupen 9:5ee05e9c5aca 479 int32_t MDX20::connectCheck(void)
suupen 9:5ee05e9c5aca 480 {
suupen 9:5ee05e9c5aca 481 int32_t ans = false;
suupen 9:5ee05e9c5aca 482
suupen 9:5ee05e9c5aca 483 if(_cts == 0){
suupen 9:5ee05e9c5aca 484 ans = true;
suupen 9:5ee05e9c5aca 485 }else{
suupen 9:5ee05e9c5aca 486 ans = false;
suupen 9:5ee05e9c5aca 487 }
suupen 9:5ee05e9c5aca 488 return (ans);
suupen 9:5ee05e9c5aca 489 }
suupen 9:5ee05e9c5aca 490