hur.cn - 华软网

 热门搜索

******高难度******从串口读写数据的问题!分不够,可以加!

  作者:未知    来源:网络    更新时间:2019/4/16
我这里有个托利多8142PRO的地磅仪表,没有DLL,我想用资料这类方式从串口读取数据,最好是用这类方法,省事!当然,用API或控件也行,最好详细一点!分不够我能够再加!(一定要详细,定义结构也请写出来,谢谢!)
------华软网友回答------
既然是串口通讯,你能够用Win2000的超级终端,在配置连接方式后接收从串口发来的消息。
先看看发来的是些什么数据,如果是加密的数据,那就没什么措施了。
发来的数据自己能看明白,那就好办,在程序中用MsComm32控件来接收串口消息再措置惩罚就是了。
------华软网友回复------
数据没有加密,最好给点详细的说明!谢谢!
------华软网友回复------
http://www.xiao-qi.com/netfile/Mscomm.html
------华软网友回复------


http://blog.csdn.net/wfliu/archive/2006/01/20/585133.aspx

------华软网友回复------
如果你的地磅是BCD编码的给你一段代码参照:
有了解码方法咱们在读BCD码的地磅数据的时候就很容易措置惩罚了,由于我上次写过措置惩罚进程这里我只简单描写一下:

1.       用二进制类型blob将串口(现在有的用usb口)的数据读出来;
2.       将blob强制转换为string,这样就把二进制流按8位存储格式编码了,也就是说BCD码在       这个string中,不过是压缩格式;
3.       将string的每一个字节都分割开来,然后分别译为ASCII编码,PB中有函数ASC;
4.       根据详细设备出厂参数识别string中状态位,校验位,数字位等的位置;
5.       找到数字位举行BCD解码,方法如上;
6.       完成解码,获得称量数据。


//=============================================================================

// Function: of_Hex()

//-----------------------------------------------------------------------------

// Description: 转换integer到16进制字符串

//-----------------------------------------------------------------------------

// Aagument: Integer pssl

//-----------------------------------------------------------------------------

// Return:   string 16进制字符串

//-----------------------------------------------------------------------------

// Log:      excerpt by tubx 2004.03.10

//=============================================================================

string vs,vstmp,vsret

integer vi1,vilen,i,vimod,viy,visl

vilen=Len(String(pssl))

char vc_he[6]

vimod=Mod(pssl,16)

visl=pssl

If vimod>=0 Then

       vstmp=String(vimod)            

       If vstmp=?10? Then vstmp=?A?

       If vstmp=?11? Then vstmp=?B?

       If vstmp=?12? Then vstmp=?C?

       If vstmp=?13? Then vstmp=?D?

       If vstmp=?14? Then vstmp=?E?

       If vstmp=?15? Then vstmp=?F?

       vc_he[1]=vstmp

End If

For i =1 To vilen + 1

       viy=Truncate(visl/16,0)

       If viy>0 Then

              vstmp=String(viy)         

              If vstmp=?10? Then vstmp=?A?

              If vstmp=?11? Then vstmp=?B?

              If vstmp=?12? Then vstmp=?C?

              If vstmp=?13? Then vstmp=?D?

              If vstmp=?14? Then vstmp=?E?

              If vstmp=?15? Then vstmp=?F?

              vc_he[i+1]=vstmp

       End If

       If viy=0 Then exit  

       visl=viy

Next

vsret=??

If IsNull(vc_he[6]) Or vc_he[6]=?? Then 

       vsret=vsret

Else

       vsret=vsret+vc_he[6]    

End If

If IsNull(vc_he[5]) Or vc_he[5]=?? Then 

       vsret=vsret

Else

       vsret=vsret+vc_he[5]

End If

If IsNull(vc_he[4]) Or vc_he[4]=?? Then 

       vsret=vsret

Else

       vsret=vsret+vc_he[4]    

End If

If IsNull(vc_he[3]) Or vc_he[3]=?? Then 

       vsret=vsret

Else

       vsret=vsret+vc_he[3]    

End If

If IsNull(vc_he[2]) Or vc_he[2]=?? Then 

       vsret=vsret

Else

       vsret=vsret+vc_he[2]    

End If

If IsNull(vc_he[1]) Or vc_he[1]=?? Then 

       vsret=vsret

Else

       vsret=vsret+vc_he[1]    

End If
------华软网友回复------
我现在读出数据了,但显出来的全是叹息号加上字母,通常为叹号加空格加A,B,C,D,L另有逗号组成!我该怎么措置惩罚这些数呢?
------华软网友回复------
字体?
------华软网友回复------
应该不会是字体有问题吧?如果是字体有问题肯定是那种不认识的乱码!我用的是PB9.0的默许字体!
------华软网友回复------
真不愿给你们分数,没有一个是解决我的问题的方法,最后我用把串口作资料措置惩罚的方法解决了!      
华软声明:本内容来自网络,如有侵犯您版权请来信指出,本站立即删除。