楼主最近还看过
writedatatoplc(int dmno,int dmvalue,UINT datatype)
{ BYTE check=0;
dmno=I_TO_O(dmno);
LPBYTE send = new BYTE[17];
send[0]=0x40;
send[1]=0x30;
send[2]=0x30;//
switch(datatype)
{
case 0:
{ send[3]='W';
send[4]='J';//写DM
}
break;
case 1:
{ send[3]='W';
send[4]='D';//写DM
}
break;
case 2:
{ send[3]='W';
send[4]='H';//写DM
}
break;
case 3:
{ send[3]='W';
send[4]='R';//写DM
}
break;
case 4:
{ send[3]='W';
send[4]='L';//写DM
}
break;
case 5:
{ send[3]='W';
send[4]='C';//写DM
}
break;
default:
{ send[3]=' ';
send[4]=' ';//写DM
}
break;
}
send[5]=GetData((BYTE)((dmno&0xF000)>>12));
send[6]=GetData((BYTE)((dmno&0x0F00)>>8));
send[7]=GetData((BYTE)((dmno&0x0F0)>>4));
send[8]=GetData((BYTE)(dmno&0x0F));//地址GetData((BYTE)((check&0x000f)));
send[9]=GetData((BYTE)((dmvalue&0xF000)>>12));
send[10]=GetData((BYTE)((dmvalue&0xF00)>>8));
send[11]=GetData((BYTE)((dmvalue&0xF0)>>4));
send[12]=GetData((BYTE)((dmvalue&0xF)));//值
for(int i=0;i<13;i++)
{
check=check^send[i];
}
send[13]=GetData((BYTE)((check&0xF0)>>4));
send[14]=GetData((BYTE)((check&0xF)));//校验
send[15]=0x2A;
send[16]=0x0D;
WriteToPort( send, 17 );
//有个删除操作
return 0;
}