Mengambil Perintah dan Parameter Setting pd AVR microcontroller melalui Komunikasi serial RS-485 (bag 1/2)

Pengiriman data pada jaringan RS-485 membutuhkan alamat slave atau device yg dituju,
sedangkan pada komunikasi RS232 tidak memerlukan alamat karena slave cuma ada 1.

Pengiriman data pd RS-485

 
 
Format data yang akan kita pakai pada jaringan RS-485 :
Program Pemisahan Alamat, perintah dan Parameter 1,2 dengan bahasa C .
sebelum kita buat program untuk microcontroller alangkah lebih baik 
jika kita mencoba dulu membuat program C di komputer dengan compiler gcc , sbb: 
#include <stdio.h>
#include <string.h>

char *daftar_perintah[] = {"PANJANG", "LEBAR", "TINGGI"};
#define PANJANG 0
#define LEBAR 1
#define TINGGI 2
int panjang1,lebar1,tinggi1;
int panjang2,lebar2,tinggi2;

int main(void)
{
  int int_param1, i,ihex, jhex;

   char cmd;

   char Str_perintah[50];
   char alamat[40];
   char param1[50];
   char param2[50];

   char *batas_alamat,*batasakhir;
   char *batas1;
   char *batas2;

   int IndexBatas_alamat,jumlahcharperintah,jumlahcharpar1,jumlahcharpar2;
   int IndexBatas1, IndexBatas2; 

   char r_buffer[40]; // = "001:PANJANG=1234y9876";
   printf("====================================================\n");
   printf("  PROGRAM memisahkan perintah dgn nilai parameter   \n");
   printf("====================================================\n");
   printf("masukan perintah : ");
   gets(r_buffer);
   printf("===============================\n");
   printf("panjang string = %d\n", strlen(r_buffer));

   // cari tanda pemisah

    batas_alamat=strchr(r_buffer,':');
    batas1 = strchr(r_buffer,'=');
    batas2 = strchr(r_buffer,'y');
    batasakhir=strchr(r_buffer,'');    

   if (batas1 != NULL) {

    printf("alamat batas1: %d\n", batas1);

    printf("Alamat r_buffer: %d\n", r_buffer);

    IndexBatas_alamat = batas_alamat - r_buffer;
    IndexBatas1 = batas1 - r_buffer;        // jumlah command
    IndexBatas2 = batas2 - r_buffer;

    jumlahcharperintah = IndexBatas1 -  IndexBatas_alamat;

    jumlahcharpar1 = batas2-batas1;
    jumlahcharpar2 = batasakhir-batas2;

    printf("isi r_buffer: %s\n", r_buffer);

    printf("===============================\n");
    printf("IndexBatas-alamat : %d\n", IndexBatas_alamat);
    printf("IndexBatas-1 : %d\n", IndexBatas1);
    printf("IndexBatas-2 : %d\n", IndexBatas2);

    printf("===============================\n");
    printf("alamat Batas2 : %d\n", batas2);
    printf("alamat akhir r_buffer: %d\n", batasakhir);
    printf("===============================\n");

    printf("jumlah char perintah : %d\n",jumlahcharperintah );
    printf("jumlah char parameter1 : %d\n",jumlahcharpar1 );
    printf("jumlah char parameter2 : %d\n",jumlahcharpar2 );

    strncpy(Str_perintah, r_buffer +  IndexBatas_alamat + 1 ,jumlahcharperintah-1 );

    Str_perintah[jumlahcharperintah-1] ='';

    printf("perintah: %s\n", Str_perintah);

    printf("JUMLAH CHAR PERINTAH : %d\n",jumlahcharperintah );

    printf("===============================\n");
    strncpy(alamat, r_buffer ,IndexBatas_alamat);
    alamat[IndexBatas_alamat] ='';
    printf("isi alamatnya: %s\n", alamat);
    printf("===============================\n");

   strncpy(param1, r_buffer +  IndexBatas1 + 1 , jumlahcharpar1 - 1);
    //strcpy(param1, batas1 + 1);
   param1[jumlahcharpar1 - 1]='';
   printf("parameter1: %s\n", param1);

   strcpy(param2, batas2 + 1);
   param2[jumlahcharpar2-1]='';
   printf("parameter2: %s\n", param2);

}
else

    {

      // space not found, just copy over

     strcpy(Str_perintah, r_buffer);
     printf("perintah : %s    tidak ada parameternya  \n", Str_perintah);
     sprintf(param1,"%i",0);
     sprintf(param2,"%i",0);//strlen

 }

       // cmd will be -1 if no command

      cmd = -1;

      for (i = 0; i < 3; i++) {

       if (strcmp(Str_perintah, daftar_perintah[i])==0)

         {

         cmd = i;

           break;

        }

      }

      printf("index perintah/cmd: %d\n", cmd);
      printf("perintah: %s\n", Str_perintah);

      switch(cmd) {

        case PANJANG:     //time =0

        sscanf(param1, "%d", &panjang1);
        printf("parameter panjang1: %d\n", panjang1);

	sscanf(param2, "%d", &panjang2);
        printf("parameter panjang2: %d\n", panjang2);

	 break;

        case LEBAR:

         sscanf(param1, "%d", &lebar1);
         printf("parameter lebar1: %d\n", lebar1);

         sscanf(param2, "%d", &lebar2);
         printf("parameter lebar2: %d\n", lebar2);

         break;

        case TINGGI:

         sscanf(param1, "%d", &tinggi1);
         printf("parameter tinggi1: %d\n", tinggi1);
         sscanf(param2, "%d", &tinggi2);
         printf("parameter tinggi2: %d\n", tinggi2);

        break;

default:
 printf("perintah tdk dikenal \n");

       }

return 0;

}

//=======akhir dari program========
Simpan program diatas dengan nama file test2.c
lalu compile dengan mengetik perintah di command promt:
c:\gcc -o hasil2 test2.c
jalankan di command promt dengan mengetik
C:\hasil2  
lalu tekan enter.
saat ada pertanyaan : masukan string :
ketik (misal) 001:TINGGI=80y110   Tekan enter

Hasil /output Program pada Command promt:

Output Program Pemisahan String Input

Advertisements

About pccontrol

Berisi Tutorial Menggunakan PC untuk mengontrol Peralatan dengan cara mudah & praktis.

Posted on 06/07/2011, in Menengah-3. Bookmark the permalink. Leave a comment.

Komentar ,Saran atau Pertanyaan

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s

%d bloggers like this: