用串口调试助手发指令时别忘了把通讯参数设置好,最好点选16进制发送,当然发送的指令也得是16进制的3A 3031 30353030 46463030 4636 0D 0A 。成功通讯的话,PLC会返回数据显示在接收区。
单片机程序
#include<reg52.h>#define uchar unsigned char #define uint unsigned intsbit sw=P1^0;uint num=0;uchar SendBuffer[]="";void delay100ms(uchar times) { uint i=0,j=0,k=0; for(k=0;k<times;k++) for(i=0;i<100;i++) for(j=0;j<67;j++); }
void init(void) //串口初始化{ TMOD=0x20;// TH1=0xfd; TL1=0xfd;//9600, SCON=0x50;// TR1=1;}
/*void key(){ num=(unsigned int)P0<<8+(unsigned int)P2;//强制转换,两个8位组合成一个16位 //一共16个开关对应PLC中M0到M15 16个寄存器,原样不动把他的状态值映射过去 //强制多个节点: 01 0f 0800 000f 02 P2 P0 LRC CR LF //01+0F+08+0F+02=29}*/void main(){ uchar i=0; init(); while(1) { if(sw==0) { delay100ms(1); if(sw==0) { unsigned char SendBuffer[]={":010f0800000f02"}; SendBuffer[15]=P2; SendBuffer[16]=P0; SendBuffer[17]=~(0x29+P2+P0)+1; SendBuffer[18]=0x0d; SendBuffer[19]=0x0a; for(i=0;i<20;i++) { SBUF=SendBuffer[i]; while(TI==0);//等待发送出去 TI=0; } } } }}