⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 7188.c

📁 实现西门子PLC与7188智能模块的数据通讯
💻 C
字号:
#include<stdio.h>
#include"7188.h"
#include"math.h"

void rec_to_plc();
void sc_to_plc();
void Check_rec();
void modulecheck_flag();
void read_7018();
void send_to_plc();
void read_7018_mea();
void send_to_plc_mea();

static char strplc[20];
static char strplc1[20];
static char cmd7018[5];
static char str7018[140];
static char str70181[120];
static char cmdplc[50];

int Check_error=0;
int Verify_error=0;
int measure_flag=0;
int search_flag=0;
int modify_flag=0;
int module_flag=0;
int read_error=0;
int iji[21]={0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0};


void main()
{
 int quit=0;
 int i=0;                 
 int k=0,k1=0;
 int reci=0;
 int modul_number=1;
 int search_total=10;
 int total_modul=10;
 int j=0;
 int sk=0,sk1=0,sk2=0;
 int iErrorNo;

InitLib();
DisableWDT();

InstallCom(1,9600L,8,0,1);
InstallCom(2,9600L,8,0,1);

LedOn();
DelayMs(10);

while(!quit)
{
   printf("\n\n/*******************************************/" );
   printf("\n/**   TEMPERATURE CONTROLLER PROGRAMM     **/" );
   printf("\n/***              yun tong               ***/" );
   printf("\n/*****           03/04/2007            *****/" );
   printf("\n/**** Ver 5.0 YUNTONG GLASS ENGINEERING ****/" );
   printf("\n/*******************************************/" );
   LedOff();
   printf("\n\nBEGIN TO LOOP !!!!");
  
/*数据采集*/
while(IsCom1())
{
 LedOff();

 /*strplc[0]=ReadCom1();
 printf("strplc0=%d",strplc[0]);  )    */
 for(reci=0;reci<5;reci=reci+1)
 {
      strplc[reci]=ReadCom1();
      printf("%c",strplc[reci]);
 }
 
 Check_rec();  
 modulecheck_flag();
}
if(module_flag==0)
{
	for(j=0;j<=total_modul;j++)
	{
		LedOn();
        modul_number=j;
        printf("\nmodul_counter=%d",modul_number);
        read_7018(modul_number);
        send_to_plc(modul_number,0);
	}
}
if(modify_flag==1)
{
	LedOn();
	   cmd7018[0]='%';
       cmd7018[1]=strplc[1];cmd7018[2]=strplc[2];
       cmd7018[3]=strplc[3];cmd7018[4]=strplc[4];
       cmd7018[5]='0';    cmd7018[6]='F';
       cmd7018[7]='0';    cmd7018[8]='6';
       cmd7018[9]='8';    cmd7018[10]='0';
       cmd7018[11]=0;   /* 0x0D;  */

       SendCmdTo7000(2,cmd7018,0);
       iErrorNo=ReceiveResponseFrom7000(2,str7018,4000L,0);
       if(iErrorNo==NoError)
       {
        printf("\nResponce_set_7018=");
	for(i=0;i<20;i=i+1){printf("%c",str7018[i]);}
      /*  wrt_to_plc();*/
       /* rec_to_plc_7018();)*/
	DelayMs(2000);
        }
       else printf("\n!!!!!!!!!! ERROR at Setup To 7018 !!!!!!!!!");
	   	if(str7018[0]=='!')
		{
			
		 cmdplc[0]='!';  
		}
		/*else{cmdplc[0]=k;     cmdplc[1]='F';    cmdplc[2]='F';}*/
		printf("\nTo_WRITE_7018_NO=");
		 SendCmdTo7000(1, cmdplc,1);
       Delay(2000);
}
if(search_flag==1)
{
	LedOn();
		for(k=0;k<=search_total;k++)
       {
        for(i=0;i<5;i=i+1){cmd7018[i]=0;}
        for(i=0;i<60;i=i+1){str7018[i]=0;}
        sk=k;
        sk2=(sk & 0x00f0)>>4;
        sk1=(sk & 0x000f);

        cmd7018[0]='$'; cmd7018[1]=hex_to_ascii[sk2];
        cmd7018[2]=hex_to_ascii[sk1];
        cmd7018[3]='2'; cmd7018[4]=0;/* 0x0d */

        printf("\nTo Search 7018NO[%d]=%d  ",k,k);

        SendCmdTo7000(2,cmd7018,0);
		iErrorNo=ReceiveResponseFrom7000(2,str7018,4000L,0);
        if(iErrorNo==NoError)
        {
         printf("\nResponce_7018=");
		 for(i=0;i<10;i=i+1){printf("%c",str7018[i]);}
        }
        else printf("\n!!!!!!!!!! ERROR at Search To 7018[%d] !!!!!!!!!",k);
		if(str7018[0]=='!')
		{
			
		 cmdplc[0]=k+48;   cmdplc[1]=hex_to_ascii[sk2];    cmdplc[2]=hex_to_ascii[sk1];
		}
		else{cmdplc[0]=k+48;     cmdplc[1]='8';    cmdplc[2]='5';   }
		printf("\nTo_WRITE_7018_NO=");
		 SendCmdTo7000(1, cmdplc,3);
	/*	ToCom1Bufn(cmdplc,2);*/
		WaitTransmitOver1();
/*	for(i=0;i<13;i=i+1){printf("%c",cmdplc[i]);}*/
		DelayMs(10);

}
}
if(measure_flag==1)
{
	LedOn();
    modul_number=0;
        printf("\nmodul_counter=%d",modul_number);
        read_7018_mea(modul_number);
        send_to_plc_mea(modul_number,0);
}
if(measure_flag==2)
{
	LedOn();
    modul_number=1;
        printf("\nmodul_counter=%d",modul_number);
        read_7018_mea(modul_number);
        send_to_plc_mea(modul_number,0);
}
if(measure_flag==3)
{
	LedOn();
    modul_number=2;
        printf("\nmodul_counter=%d",modul_number);
        read_7018_mea(modul_number);
        send_to_plc_mea(modul_number,0);
}
if(measure_flag==4)
{
	LedOn();
    modul_number=3;
        printf("\nmodul_counter=%d",modul_number);
        read_7018_mea(modul_number);
        send_to_plc_mea(modul_number,0);
}
if(measure_flag==5)
{
	LedOn();
    modul_number=4;
        printf("\nmodul_counter=%d",modul_number);
        read_7018_mea(modul_number);
        send_to_plc_mea(modul_number,0);
}
if(measure_flag==6)
{
	LedOn();
    modul_number=5;
        printf("\nmodul_counter=%d",modul_number);
        read_7018_mea(modul_number);
        send_to_plc_mea(modul_number,0);
}
if(measure_flag==7)
{
	LedOn();
    modul_number=6;
        printf("\nmodul_counter=%d",modul_number);
        read_7018_mea(modul_number);
        send_to_plc_mea(modul_number,0);
}
if(measure_flag==8)
{
	LedOn();
    modul_number=7;
        printf("\nmodul_counter=%d",modul_number);
        read_7018_mea(modul_number);
        send_to_plc_mea(modul_number,0);
}
if(measure_flag==9)
{
	LedOn();
    modul_number=8;
        printf("\nmodul_counter=%d",modul_number);
        read_7018_mea(modul_number);
        send_to_plc_mea(modul_number,0);
}
if(measure_flag==10)
{
	LedOn();
    modul_number=9;
        printf("\nmodul_counter=%d",modul_number);
        read_7018_mea(modul_number);
        send_to_plc_mea(modul_number,0);
}
}

}/*main is over*/



void Check_rec()
{
  int CheckQ=0;
  int checki=0;
  int checkj=0;
  int csum=0,csum1=0,csum2=0;

  /*while(!CheckQ)
  {
   if(strplc[checki]==0x02){checkj=checki;CheckQ=1;}
   checki++;
   if(checki >=20){Check_error=1;printf("\n\nReceive Communicate Error !!!\n");CheckQ=1;}
  }*/
  /*if(!Check_error)
  {
   printf("\ncheckj=%d\n",checkj);
   for(checki=0;checki<20;checki++)
   {
    strplc1[checki]=strplc[checki+checkj];
    }
   for(checki=0;checki<20;checki++)
   {
    strplc[checki]=strplc1[checki];
    }
   csum=strplc[1]+strplc[2]+strplc[3];
   csum2=(csum & 0x00f0)>>4;
   csum1=csum & 0x000f;*/
   /*if(strplc[4] != hex_to_ascii[csum2] || strplc[5] != hex_to_ascii[csum1])
   {
    printf("\n\nReceive Verify Error !!!\n");
    Verify_error=1;
    }*/
/*   printf("\n\nVerify_error=%d Check_error=%d\n",Verify_error,Check_error);*/
  
  Check_error=0;
  Verify_error==0;
}

void modulecheck_flag()
{
 if(Check_error==0 && Verify_error==0)
 {
   if(strplc[0]=='a'){module_flag=0;modify_flag=0;search_flag=0;measure_flag=0;}
   if(strplc[0]=='b'){modify_flag=1;module_flag=1;search_flag=0;measure_flag=0;}
   if(strplc[0]=='c'){search_flag=1;module_flag=1;measure_flag=0;modify_flag=0;}

   if(strplc[0]=='0'){measure_flag=1;module_flag=1;search_flag=0;modify_flag=0;}
   if(strplc[0]=='1'){measure_flag=2;module_flag=1;search_flag=0;modify_flag=0;}
   if(strplc[0]=='2'){measure_flag=3;module_flag=1;search_flag=0;modify_flag=0;}
   if(strplc[0]=='3'){measure_flag=4;module_flag=1;search_flag=0;modify_flag=0;}
 if(strplc[0]=='4'){measure_flag=5;module_flag=1;search_flag=0;modify_flag=0;}
  if(strplc[0]=='5'){measure_flag=6;module_flag=1;search_flag=0;modify_flag=0;}
   if(strplc[0]=='6'){measure_flag=7;module_flag=1;search_flag=0;modify_flag=0;}
    if(strplc[0]=='7'){measure_flag=8;module_flag=1;search_flag=0;modify_flag=0;}
	 if(strplc[0]=='8'){measure_flag=9;module_flag=1;search_flag=0;modify_flag=0;}
	  if(strplc[0]=='9'){measure_flag=10;module_flag=1;search_flag=0;modify_flag=0;}

 }
  else{module_flag=0;modify_flag=0;search_flag=0;measure_flag=0;}
 /*printf("\n\nmodule_flag=%d \nmodify_flag=%d \nsearch_flag=%d \nmeasure_flag=%d \n",module_flag,modify_flag,search_flag,measure_flag);*/

}


void  read_7018(int modul_num)
{
  int i=0;
  int iErrorNo;
  int mo_numh,mo_numh1,mo_numh2;
  int ij=0;
  int read_flag=0;

  for(i=0;i<5;i=i+1){cmd7018[i]=0;}
  for(i=0;i<120;i=i+1){str7018[i]=0;}

  mo_numh=modul_num;
  mo_numh2=(mo_numh & 0x00f0)>>4;
  mo_numh1=mo_numh & 0x000f;

  cmd7018[0]='#';
  cmd7018[1]=hex_to_ascii[mo_numh2];
  cmd7018[2]=hex_to_ascii[mo_numh1];
  cmd7018[3]=0x0; /* x0D; */

  printf("\nTo7018[%d]=%d %d \n",mo_numh,mo_numh2,mo_numh1);
  for(i=0;i<4;i=i+1){printf("%c",cmd7018[i]);}

  SendCmdTo7000(2,cmd7018,0);
  DelayMs(10);
  iErrorNo=ReceiveResponseFrom7000(2,str7018,4000L,0);
  if(iErrorNo==NoError)
  {

    printf("\nResponce_7018=");
    i=0;
    while(!read_flag)
    {
     printf("%c",str7018[i]);
     if(str7018[i] == '>'){ij=i;read_flag=1;}
     i++;
     if(i>=120){read_flag=1;read_error=1;printf("\n\nCommunicate to 7018 Error !!! \n");}
    }
    for(i=0;i<120;i=i+1){str70181[i]=str7018[i+ij];}
    for(i=0;i<120;i=i+1){str70181[i]=str7018[i];}
  }
  else
  {
    read_error=1;
    printf("\n\n!!!!!!!!!! ERROR at COMM to 7018 !!!!!!!!!\n");
    iji[modul_num]=iji[modul_num]+1;
	for(i=0;i<120;i=i+1){str7018[i]='0';}
  }
}

void send_to_plc(int modul_num,int state)
{
  int i=0;
  int data_number=0;
  int dn1=0,dn2=0,dn3=0,dn4=0;
  int checknum=0;
  int cn1=0,cn2=0;

  for(i=0;i<50;i=i+1){cmdplc[i]='0';}
  for(i=0;i<20;i=i+1){strplc[i]='0';}

  if(state==1){modul_num=1;}

 /* cmdplc[0]='\02';  cmdplc[1]='1';*/
  cmdplc[0]=modul_num+48;

  /*data_number=(384+8*(modul_num-1))*2+0x1000;
  dn1=data_number & 0x000f;
  dn2=(data_number & 0x00f0)>>4;
  dn3=(data_number & 0x0f00)>>8;
  dn4=(data_number & 0xf000)>>12;

  cmdplc[2]=hex_to_ascii[dn4];
  cmdplc[3]=hex_to_ascii[dn3];
  cmdplc[4]=hex_to_ascii[dn2];
  cmdplc[5]=hex_to_ascii[dn1];
  cmdplc[6]='1';
  cmdplc[7]='0';*/

  cmdplc[3]=str7018[4];   cmdplc[4]=str7018[5];
  cmdplc[1]=str7018[2];   cmdplc[2]=str7018[3];

  cmdplc[7]=str7018[11];   cmdplc[8]=str7018[12];
  cmdplc[5]=str7018[9];  cmdplc[6]=str7018[10];

  cmdplc[11]=str7018[18];  cmdplc[12]=str7018[19];
  cmdplc[9]=str7018[16];  cmdplc[10]=str7018[17];

  cmdplc[15]=str7018[25];  cmdplc[16]=str7018[26];
  cmdplc[13]=str7018[23];  cmdplc[14]=str7018[24];

  cmdplc[19]=str7018[32];  cmdplc[20]=str7018[33];
  cmdplc[17]=str7018[30];  cmdplc[18]=str7018[31];

  cmdplc[23]=str7018[39];  cmdplc[24]=str7018[40];
  cmdplc[21]=str7018[37];  cmdplc[22]=str7018[38];

  cmdplc[27]=str7018[46];  cmdplc[28]=str7018[47];
  cmdplc[25]=str7018[44];  cmdplc[26]=str7018[45];

  cmdplc[31]=str7018[53];  cmdplc[32]=str7018[54];
  cmdplc[29]=str7018[51];  cmdplc[30]=str7018[52];

 /* cmdplc[40]=0x03;

  for(i=1;i<=40;i++){checknum=cmdplc[i]+checknum;}

  cn1=checknum & 0x000f;
  cn2=(checknum & 0x00f0)>>4;*/
/*  printf("\nchecknum %x=%d %d",checknum,cn2,cn1);*/

 /* cmdplc[41]=hex_to_ascii[cn2];
  cmdplc[42]=hex_to_ascii[cn1];*/

  printf("\nTo_PLC=");
 
  if(read_error==0)
  {

    SendCmdTo7000(1, cmdplc,31);
    WaitTransmitOver1();
	DelayMs(5);
    for(i=0;i<31;i=i+1){printf("%c",cmdplc[i]);}
  }

  read_error=0;
  DelayMs(5);
}


void  read_7018_mea(int modul_num)
{
  int i=0;
  int iErrorNo;
  int mo_numh,mo_numh1,mo_numh2;
  int ij=0;
  int read_flag=0;

  for(i=0;i<5;i=i+1){cmd7018[i]=0;}
  for(i=0;i<120;i=i+1){str7018[i]=0;}

  mo_numh=modul_num;
  mo_numh2=(mo_numh & 0x00f0)>>4;
  mo_numh1=mo_numh & 0x000f;

  cmd7018[0]='#';
  cmd7018[1]='0';
  cmd7018[2]=modul_num+48;
  cmd7018[3]=0x0; /* x0D; */

  printf("\nTo7018[%d]=%d %d \n",mo_numh,mo_numh2,mo_numh1);
  for(i=0;i<4;i=i+1){printf("%c",cmd7018[i]);}

  SendCmdTo7000(2,cmd7018,0);
  DelayMs(10);
  iErrorNo=ReceiveResponseFrom7000(2,str7018,4000L,0);
  if(iErrorNo==NoError)
  {

    printf("\nResponce_7018=");
    i=0;
    while(!read_flag)
    {
     printf("%c",str7018[i]);
     if(str7018[i] == '>'){ij=i;read_flag=1;}
     i++;
     if(i>=120){read_flag=1;read_error=1;printf("\n\nCommunicate to 7018 Error !!! \n");}
    }
    for(i=0;i<120;i=i+1){str70181[i]=str7018[i+ij];}
    for(i=0;i<120;i=i+1){str70181[i]=str7018[i];}
  }
  else
  {
    read_error=1;
    printf("\n\n!!!!!!!!!! ERROR at COMM to 7018 !!!!!!!!!\n");
    iji[modul_num]=iji[modul_num]+1;
	for(i=0;i<120;i=i+1){str7018[i]='0';}
  }
}

void send_to_plc_mea(int modul_num,int state)
{
  int i=0;
  int data_number=0;
  int dn1=0,dn2=0,dn3=0,dn4=0;
  int checknum=0;
  int cn1=0,cn2=0;

  for(i=0;i<50;i=i+1){cmdplc[i]='0';}
  for(i=0;i<20;i=i+1){strplc[i]='0';}

  if(state==1){modul_num=1;}

 /* cmdplc[0]='\02';  cmdplc[1]='1';*/
  cmdplc[0]=strplc[2];

  /*data_number=(384+8*(modul_num-1))*2+0x1000;
  dn1=data_number & 0x000f;
  dn2=(data_number & 0x00f0)>>4;
  dn3=(data_number & 0x0f00)>>8;
  dn4=(data_number & 0xf000)>>12;

  cmdplc[2]=hex_to_ascii[dn4];
  cmdplc[3]=hex_to_ascii[dn3];
  cmdplc[4]=hex_to_ascii[dn2];
  cmdplc[5]=hex_to_ascii[dn1];
  cmdplc[6]='1';
  cmdplc[7]='0';*/

  cmdplc[3]=str7018[4];   cmdplc[4]=str7018[5];
  cmdplc[1]=str7018[2];   cmdplc[2]=str7018[3];

  cmdplc[7]=str7018[11];   cmdplc[8]=str7018[12];
  cmdplc[5]=str7018[9];  cmdplc[6]=str7018[10];

  cmdplc[11]=str7018[18];  cmdplc[12]=str7018[19];
  cmdplc[9]=str7018[16];  cmdplc[10]=str7018[17];

  cmdplc[15]=str7018[25];  cmdplc[16]=str7018[26];
  cmdplc[13]=str7018[23];  cmdplc[14]=str7018[24];

  cmdplc[19]=str7018[32];  cmdplc[20]=str7018[33];
  cmdplc[17]=str7018[30];  cmdplc[18]=str7018[31];

  cmdplc[23]=str7018[39];  cmdplc[24]=str7018[40];
  cmdplc[21]=str7018[37];  cmdplc[22]=str7018[38];

  cmdplc[27]=str7018[46];  cmdplc[28]=str7018[47];
  cmdplc[25]=str7018[44];  cmdplc[26]=str7018[45];

  cmdplc[31]=str7018[53];  cmdplc[32]=str7018[54];
  cmdplc[29]=str7018[51];  cmdplc[30]=str7018[52];

 /* cmdplc[40]=0x03;

  for(i=1;i<=40;i++){checknum=cmdplc[i]+checknum;}

  cn1=checknum & 0x000f;
  cn2=(checknum & 0x00f0)>>4;*/
/*  printf("\nchecknum %x=%d %d",checknum,cn2,cn1);*/

 /* cmdplc[41]=hex_to_ascii[cn2];
  cmdplc[42]=hex_to_ascii[cn1];*/

  printf("\nTo_PLC=");
 
  if(read_error==0)
  {

    SendCmdTo7000(1, cmdplc,31);
    WaitTransmitOver1();
	DelayMs(5);
    for(i=0;i<31;i=i+1){printf("%c",cmdplc[i]);}
  }

  read_error=0;
  DelayMs(5);
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -