#include<conio.h>#include<string.h>#include<stdio.h>#include<stdlib.h>#include"../lib/8000.h"//I-8000 Series Function Call Definition/*This demo program is for I-87054 Serial type Module,8 Digital Output & 8 digital Input.Before Run this program,connect the digital output to the digital input*/unsigned char InBufCom0[120];unsigned char OutBufCom0[60];int SlotNo1,DOdata,DIdata,InIdx0,recok;long ttcount;void DoCom0(void){ int data;  if(IsCom0())//check COM0  {   data=ReadCom0();//read COM0 data   switch(data)   {    case '\r':    InBufCom0[InIdx0]=0;    InIdx0=0;    recok = 1;    break;    default:    InBufCom0[InIdx0++]=data;    break;   }  }}int Write87KCom0DO(int slot,int type,unsigned int dd){ switch(type) {  case 0://16 bit   sprintf(OutBufCom0,"@00%04X\r",dd);//Transfer command string   //for detial please refer to 87K users manual  break;  case 1://8 bit   sprintf(OutBufCom0,"@00%02X\r",dd);//Transfer command string   //for detial please refer to 87K users manual  break; } //all of the 87k serial module at I-8000 series, The address = 0 ChangeToSlot(slot);//Change to specified slot ToCom0Str(OutBufCom0);//Send command recok=0;ttcount=0; while(!recok)//check the command echo,to make sure the module receive command {  DoCom0();//check COM0 input  ttcount++;  if( ttcount>=65535)//check Time Out  {   Print("Time Out \n\r");   break;  } } if(ttcount<65535) {  Print("DO Echo = %s\n\r",InBufCom0);//Show the echo result  if(InBufCom0[0] != '>')  {   Print("Receive Error \n\r");   return 1;  }  return 0; } else  return 1;}unsigned int Read87KCom0DI(int slot,int type,int *didata){ unsigned int di;  sprintf(OutBufCom0,"$006\r");//Transfer command string  //for detial please refer to 87K users manual  ChangeToSlot(slot);//Change to specified slot  ToCom0Str(OutBufCom0);//Send command  recok=0;ttcount=0;  while(!recok)//check the command/data input echo  {   DoCom0();//check COM0 input   ttcount++;   if( ttcount>=65535)//check Time Out   {    Print("Time Out \n\r");    break;   }  }  if(ttcount<65535)  {   switch(type)   {    case 0://16 bit     *didata = (ascii_to_hex(InBufCom0[1])<<12)+(ascii_to_hex(InBufCom0[2]) << 8)      +(ascii_to_hex(InBufCom0[3])<<4)+ascii_to_hex(InBufCom0[4]);    break;    case 1://simple 8 bit     *didata = (ascii_to_hex(InBufCom0[1])<<4)+ascii_to_hex(InBufCom0[2]);    break;    default:    break;   }   Print("DI data = %s,%x\n\r",InBufCom0,*didata);//Show the digital input value.   return(0);  }  else   return 1;}void main(){ int ii; int ret; InIdx0=0; InBufCom0[0]=0; InstallCom0(115200L,8,0);//initialize COM0 Print("Please Input DO Module Slot Number(0 to 7) =");//Specific the digital output slot number of I-87054. SlotNo1 = ascii_to_hex(Getch());//MiniOS7 read the slot input. Print(" %d \n\r",SlotNo1);//Show the user input. Print("Please Input DO Data(Hex) = "); Scanf("%x",&DOdata);//MiniOS7 read the user keyin the digital output value. Print("DO data = %x\n\r",DOdata);//Show the user input. ret =Write87KCom0DO(SlotNo1,1,DOdata);//87054 if(!ret)//87054 {  Delay_1(300);//for Isolation Type,Wait the photo coupler  ret = Read87KCom0DI(SlotNo1,1,&DIdata); if(!ret)   Print("DI data = %X\n\r",DIdata);//Show the digital input value.  else   Print("DI Read Error,Error Code = %d\n\r",ret);//Show the digital input value. } else   Print("DI Send Error,Error Code = %d\n\r",ret);//Show the digital input value. RestoreCom0();//free COM0}
Back to Previous Page