





#include <myhead.h>
void read_single_coil(char *send_buf)
{send_buf[0]=0x00;send_buf[1]=0x00;send_buf[2]=0x00;send_buf[3]=0x00;send_buf[4]=0x00;send_buf[5]=0x06;send_buf[6]=0x01;send_buf[7]=0x01;send_buf[8]=0x00;printf("请输入起始地址:");scanf("%hhx",&send_buf[9]);send_buf[10]=0x00;send_buf[11]=0x01;
}
void set_single_coil(char *send_buf)
{send_buf[0]=0x00;send_buf[1]=0x00;send_buf[2]=0x00;send_buf[3]=0x00;send_buf[4]=0x00;send_buf[5]=0x06;send_buf[6]=0x01;send_buf[7]=0x05;send_buf[8]=0x00;printf("请输入起始地址:");scanf("%hhx",&send_buf[9]);printf("置位或复位(FF/00):");scanf("%hhx",&send_buf[10]);send_buf[11]=0x00;
}
void set_coil(char *send_buf)
{send_buf[0]=0x00;send_buf[1]=0x00;send_buf[2]=0x00;send_buf[3]=0x00;send_buf[4]=0x00;send_buf[5]=0x06;send_buf[6]=0x01;send_buf[7]=0x01;send_buf[8]=0x00;printf("请输入起始地址:");scanf("%hhx",&send_buf[9]);send_buf[10]=0x00;printf("请输入读取个数:");scanf("%hhx",&send_buf[11]);
}
void read_single_register(char *send_buf)
{send_buf[0]=0x00;send_buf[1]=0x00;send_buf[2]=0x00;send_buf[3]=0x00;send_buf[4]=0x00;send_buf[5]=0x06;send_buf[6]=0x01;send_buf[7]=0x03;send_buf[8]=0x00;printf("请输入起始地址:");scanf("%hhx",&send_buf[9]);send_buf[10]=0x00;send_buf[11]=0x01;
}
void read_register(char *send_buf)
{send_buf[0]=0x00;send_buf[1]=0x00;send_buf[2]=0x00;send_buf[3]=0x00;send_buf[4]=0x00;send_buf[5]=0x06;send_buf[6]=0x01;send_buf[7]=0x03;send_buf[8]=0x00;printf("请输入起始地址:");scanf("%hhx",&send_buf[9]);send_buf[10]=0x00;printf("请输入读取个数:");scanf("%hhx",&send_buf[11]);
}
void set_register(char *send_buf)
{char i=0;send_buf[0]=0x00;send_buf[1]=0x00;send_buf[2]=0x00;send_buf[3]=0x00;send_buf[4]=0x00;send_buf[5]=0x00;send_buf[6]=0x01;send_buf[7]=0x10;send_buf[8]=0x00;printf("请输入起始地址:");scanf("%hhx",&send_buf[9]);send_buf[10]=0x00;printf("请输入读取个数:");scanf("%hhx",&send_buf[11]);send_buf[12]=send_buf[11]*2;for(i;i<send_buf[11];i++){printf("请输入第%d个寄存器的数据:",i+1);char value;scanf("%hhx",&value);send_buf[13+i*2]=0x00;send_buf[14+i*2]=value;}send_buf[5]=send_buf[12]+7;
}
int main(int argc, char const *argv[])
{char send_buf[128]="";printf("-----1.单线圈的读取-----\n");printf("-----2.单线圈的设置-----\n");printf("-----3.多线圈的设置-----\n");printf("-----4.单寄存器的读取-----\n");printf("-----5.多寄存器的读取-----\n");printf("-----6.多寄存器的设置-----\n");int choice;scanf("%d",&choice);switch(choice){case 1:memset(send_buf,0,sizeof(send_buf));read_single_coil(send_buf);break;case 2:memset(send_buf,0,sizeof(send_buf));set_single_coil(send_buf);break;case 3:memset(send_buf,0,sizeof(send_buf));set_coil(send_buf);break;case 4:memset(send_buf,0,sizeof(send_buf));read_single_register(send_buf);break;case 5:memset(send_buf,0,sizeof(send_buf));read_register(send_buf);break;case 6:memset(send_buf,0,sizeof(send_buf));set_register(send_buf);break;default:printf("invalid choice\n");}int cfd=socket(AF_INET,SOCK_STREAM,0);if(cfd==-1){perror("socket error");return -1;}struct sockaddr_in sin;sin.sin_family=AF_INET;sin.sin_port=htons(502);sin.sin_addr.s_addr=inet_addr("192.168.108.60");if(connect(cfd,(struct sockaddr*)&sin,sizeof(sin))==-1){perror("connect error");return -1;}printf("连接成功\n");char recv_buf[128]="";while(1){memset(recv_buf,0,sizeof(recv_buf));if(send(cfd,send_buf,sizeof(send_buf),0)==-1){perror("send error");return -1;}int len=recv(cfd,recv_buf,sizeof(recv_buf),0);for(int i=0;i<len;i++){printf("%02x ",recv_buf[i]);}printf("\n");}close(cfd);return 0;
}
