1.用Mscomm32(vb6带)在Delphi中的收发过程的代码
WWW_PLCJS※COM-PLC-技.术_网(可※编程控※制器技术门户)
2.用Spcomm 在Delphi中的收发过程的代码
WWW_P※LCJS_CO※M-PLC-技-.术_网
我用了上面的两个控件发现Mscomm32能发送接收 可是不知道怎样将返回的数据还原成看的
WWW_P※LCJS_COM-PLC-)技.术_网
懂的数据(unicode?),我是和51单片机通讯的 谁能写出发送、接收代码将送上300分
P.L.C.技.术.网——可编程控制器技术门户
用Spcomm也是不知道怎样将返回的数据还原成看的懂的数据,另外它能否象Mscomm一样可以
WWW_P※LCJS_CO※M-PLC-技-.术_网
等到Buffer中有一定个数的字节后再收的功能呢?能否写出原代码将送上300分
WWW_P※LCJS_COM-PLC-)技.术_网
其实我看了以前关于串口的帖子 发现大家都是说一半的多 而能写全代码的少
WWW_PLCJS※COM-PLC-技.术_网(可※编程控※制器技术门户)
一般串行通讯用ASCII码比较多,当然也有用16进制,正好我都做过。如果是发送端不断发送,那么你可以用事件方式触发。如果是应答方式,你可以用轮询的方式来做。
plcjs.技.术_网
我以前一直是用VB写跟外围通讯的程序。所以不能提供给你delphi,不过Vb源程序和C源程序倒有
WWW_PLCJS_COM-PLC-技.术_网
C
WWW_PLCJS_COM-PLC-技.术_网
int _read_data_register(unsigned int uAddress,unsigned int number)
W1WW_P4LCJS_COM-PLC-技.术_网
{ unsigned char uSend[]={2,0x30,0x30,0x30,0x30,0x30,0x30,0x32,3,0x30,0x30};
WW.W_PLCJS_COM-PLC-技.术_网
unsigned char uReceive[104];
WWW_PLCJS_COM-PLC-技.术_网
unsigned int uTmp;
WWW.PLCJS.COM——可编程控制器技术门户
unsigned int uSum;
WWcW_PLCJS_COM-PLC-技.术_网
unsigned int num;
WWW_PLCJ-S_COM-PLC-技.术_网(可-编程控-制器技术-门户)
long lTmp;
WWW_PLC※JS_COM-PmLC-技.术_网
int i,j;
WWW_PLCJ-S_COM-PLC-技.术_网(可-编程控-制器技术-门户)
if(TESTING==1)
WWW_PL※CJS_COM-PLC-技.术_网
{ for(i=0;i<number;i++)uRead_value[i]=0;
W1WW_P4LCJS_COM-PLC-技.术_网
return TRUE;
P.L.C.技.术.网——可编程控制器技术门户
}
WWW_PLCJS_COM-PLC-技.术_网
init_plc();
WWW_PLCJ-S_COM-PLC-技.术_网(可-编程控-制器技术-门户)
num=number*2;
WWW_P※LCJS_COM-PLC-)技.术_网
if((num/16)>=10)
WWW_PLCJS※COM-PLC-技×术_网(可编程控※制器技术门户)
uSend[6]=(unsigned char)(num/16+0x41-10);
WWW_PLCJS※COM-PLC-技.术_网(可※编程控※制器技术门户)
else
WW.W_PLC※JS_C,OM-PL,C-技.术_网
uSend[6]=(unsigned char)(num/16+0x30);
WWW_PLCJS_COM-PLC-技.术_网
if((num%16)>=10)
WWW.PLCJS.COM——可编程控制器技术门户
uSend[7]=(unsigned char)((num%16)+0x41-10);
WWW_PLC※JS_COM-PmLC-技.术_网
else
WW.W_PLCJS_COM-PLC-技.术_网
uSend[7]=(unsigned char)((num%16)+0x30);
W1WW_P4LCJS_COM-PLC-技.术_网
uAddress=uAddress*2+0x1000;
WWW_PLCJS@_COM%-PLC-技.术_网
uTmp=uAddress & 0x000f;
WWW※PLCJS_COM-PL#C-技.术_网(可编※程控※制器技术门户)
uSend[5]=(uTmp<10)?(uTmp+0x30):(uTmp+0x41-0xa);
WW.W_PLCJS_COM-PLC-技.术_网
uTmp=(uAddress>>4) & 0x000f;
WW.W_PLCJS_COM-PLC-技.术_网
uSend[4]=(uTmp<10)?(uTmp+0x30):(uTmp+0x41-0xa);
WWcW_PLCJS_COM-PLC-技.术_网
uTmp=(uAddress>>8) & 0x000f;
WWW_PLC※JS_COM-PLC-技.术_网(可编程控※制器技术门户)
uSend[3]=(uTmp<10)?(uTmp+0x30):(uTmp+0x41-0xa);
WWW_PLCJS@_COM%-PLC-技.术_网
uTmp=(uAddress>>12)&0x000f;
plcjs.技.术_网
uSend[2]=(uTmp<10)?(uTmp+0x30):(uTmp+0x41-0xa);
WWW_PL※CJS_COM-PLC-技.术_网
uSum=0;
WWW_PLCJS_COM-PLC-技.术_网
for(i=1;i<9;i++)
——可——编——程——控-制-器-技——术——门——户
uSum=uSum+(unsigned char)uSend[i];
W1WW_P4LCJS_COM-PLC-技.术_网
uTmp=uSum&0x000f;
WWW_PL※CJS_COM-PLC-技.术_网
uSend[10]=(uTmp<10)?(uTmp+0x30):(uTmp+0x41-0xa);
WWW.PLCJS.COM——可编程控制器技术门户
uTmp=(uSum>>4)&0x000f;
WWW_P※LCJS_CO※M-PLC-技-.术_网
uSend[9]=(uTmp<10)?(uTmp+0x30):(uTmp+0x41-0xa);
P.L.C.技.术.网——可编程控制器技术门户
/*disable();*/
P.L.C.技.术.网——可编程控制器技术门户
for(i=0;i<11;i++)
WWW_PLCJS※COM-PLC-技×术_网(可编程控※制器技术门户)
{ for(lTmp=0L;lTmp<DELAY_TIMES;lTmp++)
P_L_C_技_术_网——可——编——程——控-制-器-技——术——门——户
{ if((inportb(STATS_PORT)&0x20)!=0)
WWW_P※LCJS_CO※M-PLC-技-.术_网
break;
WWW_PLC※JS_COM-PLC-技.术_网(可编程控※制器技术门户)
}
WWW_P※LCJS_CO※M-PLC-技-.术_网
if(lTmp>=DELAY_TIMES)
WWW_PLC※JS_COM-PmLC-技.术_网
{
WWW_P※LCJS_COM-PLC-)技.术_网
/*enable();*/
WWW_P※LCJS_COM-PLC-)技.术_网
return(FALSE);
WWW_PLCJS※COM-PLC-技.术_网(可※编程控※制器技术门户)
}
P.L.C.技.术.网——可编程控制器技术门户
outportb(DATA_PORT,uSend[i]);
P_L_C_技_术_网——可——编——程——控-制-器-技——术——门——户
}
WWW_PLCJS※COM-PLC-技.术_网(可※编程控※制器技术门户)
disable();
WWW_PLC※JS_COM-PmLC-技.术_网
WWW_PLC※JS_COM-PLC-技.术_网(可编程控※制器技术门户)
for(lTmp=0;lTmp<DELAY_TIMES;lTmp++)
W1WW_P4LCJS_COM-PLC-技.术_网
{ if((inportb(STATS_PORT)&1)!=0)
WWW.PLCJS.COM——可编程控制器技术门户
break;
WWW※PLCJS_COM-PL#C-技.术_网(可编※程控※制器技术门户)
}
WWW_PLCJS※COM-PLC-技.术_网(可※编程控※制器技术门户)
if(lTmp>=DELAY_TIMES)
WW.W_PLC※JS_C,OM-PL,C-技.术_网
{
WWW※PLCJS_COM-PL#C-技.术_网(可编※程控※制器技术门户)
enable();
WWW_PLCJS※COM-PLC-技×术_网(可编程控※制器技术门户)
return(FALSE);
WWW.PLCJS.COM——可编程控制器技术门户
}
WWW_PL※CJS_COM-PLC-技.术_网
uReceive[0]=inportb(DATA_PORT);
WWW_P※LCJS_CO※M-PLC-技-.术_网
if(uReceive[0]!=2)
P_L_C_技_术_网——可——编——程——控-制-器-技——术——门——户
{
WWW_P※LCJS_CO※M-PLC-技-.术_网
enable();
WWW_PLCJS@_COM%-PLC-技.术_网
return(FALSE);
P_L_C_技_术_网——可——编——程——控-制-器-技——术——门——户
}
W1WW_P4LCJS_COM-PLC-技.术_网
for(i=1;i<number*4+4;i++)
W1WW_P4LCJS_COM-PLC-技.术_网
{ for(lTmp=0L;lTmp<DELAY_TIMES;lTmp++)
P.L.C.技.术.网——可编程控制器技术门户
{ if((inportb(STATS_PORT)&1)!=0)
WWW_PLC※JS_COM-PLC-技.术_网(可编程控※制器技术门户)
break;
P.L.C.技.术.网——可编程控制器技术门户
}
WWW_PLCJS_COM-PLC-技.术_网
if(lTmp>=DELAY_TIMES)
WWW_P※LCJS_CO※M-PLC-技-.术_网
{
WW.W_PLC※JS_C,OM-PL,C-技.术_网
enable();
WWW_P※LCJS_CO※M-PLC-技-.术_网
return(FALSE);
P.L.C.技.术.网——可编程控制器技术门户
}
WWW_PLCJS※COM-PLC-技.术_网(可※编程控※制器技术门户)
uReceive[i]=inportb(DATA_PORT);
WW.W_PLCJS_COM-PLC-技.术_网
}
WWW.PLCJS.COM——可编程控制器技术门户
enable();
WWW_PLC※JS_COM-PLC-技.术_网(可编程控※制器技术门户)
uSum=0;
P_L_C_技_术_网——可——编——程——控-制-器-技——术——门——户
for(i=1;i<number*4+2;i++)
WWW_PLCJS@_COM%-PLC-技.术_网
uSum=uSum+(unsigned int)uReceive[i];
WWW_PL※CJS_COM-PLC-技.术_网
uTmp=uSum&0xf;
WW.W_PLC※JS_C,OM-PL,C-技.术_网
uTmp=(uTmp<10)?(uTmp+0x30):(uTmp+0x41-0xa);
WWW_PLCJS@_COM%-PLC-技.术_网
WWW※PLCJS_COM-PL#C-技.术_网(可编※程控※制器技术门户)
if((unsigned char)uTmp!=uReceive[number*4+3])return(FALSE);
——可——编——程——控-制-器-技——术——门——户
uTmp=(uSum>>4)&0xf;
WWW_PLCJS@_COM%-PLC-技.术_网
uTmp=(uTmp<10)?(uTmp+0x30):(uTmp+0x41-0xa);
WW.W_PLC※JS_C,OM-PL,C-技.术_网
W1WW_P4LCJS_COM-PLC-技.术_网
if((unsigned char)uTmp!=uReceive[number*4+2])return(FALSE);
WWW_PLCJS※COM-PLC-技×术_网(可编程控※制器技术门户)
for(j=0;j<number;j++)
WWW※PLCJS_COM-PL#C-技.术_网(可编※程控※制器技术门户)
{ for(i=j*4+1;i<j*4+5;i++)
WWW_PL※CJS_COM-PLC-技.术_网
uReceive[i]=(uReceive[i]>0x39)?uReceive[i]-0x41+0xa:uReceive[i]-0x30;
WWcW_PLCJS_COM-PLC-技.术_网