串口与BCD码

690cj 2002-11-11 11:42:27
在程序中用mscomm32.ocx,接收ASC码很正常,现在设备改为通过串口向外发送BCD码,
数据格式如下:一次五帧,每帧11位,1位起始位(0),8位数据位(D0--D7),2位停止
位(1)。第一帧是起始位(0FFH)、第二帧表示状态、第三、四、五帧是数据值的BCD码,
怎么也接收都不能显示数据,(通过win98自带的拨号终端可看到有乱码发送到串口,
说明设备工作正常),程序如下(主要内容,也是参照网上找到VB的打关源码修改的),
请高手找找问题出在哪了?
1、在开始接收按钮click事件中:

ole_1.object.Settings="2400,n,7,1"
ole_1.object.PortOpen=true
ole_1.object.InBufferSize=40
ole_1.object.InputMode =1 //接收二进制数据
ole_1.object.Rthreshold=1

ole_1.object.InputLen = 1
ole_1.object.inbuffercount=0
2、在mscomm32.ocx的oncomm事件中
any lany_put[]
int b1,b2,ww
string ls_put,ab[]
blob av
long ll_wz

if ole_1.object.CommEvent=2 then
av=ole_1.object.Input
ab[1] = char(av)
If ab[1] = "0FFH" Then
// st_1.text="已找到数据位"
// '判断是否为数据开始标志
ole_1.object.RThreshold = 0
// '关闭OnComm事件接收
DO UNTIL ole_1.object.InBufferCount >= 5
yield()
LOOP
end if

av = ole_1.object.Input
ab[2] = char(av)
av = ole_1.object.Input
ab[3] = char(av)
av = ole_1.object.Input
ab[4] = char(av)
av = ole_1.object.Input
ab[5] = char(av)
// '转换保存到字节数据类型数组
b1 = dec(ab[3]) - 6 * (dec(ab[3])/16)
// '高位字节压缩BCD码转换为实数
b2 = dec(ab[4]) - 6 * (dec(ab[4])/16)
// '低位字节压缩BCD码转换为实数
WW = b1 + b2 / 100
sle_1.text=string(b1)
ole_1.object.RThreshold = 1
// '打开MSComm1事件接收

end if


...全文
115 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
flyhot 2002-11-11
  • 打赏
  • 举报
回复








数据源的问题?
到库里看看!
你用的什么数据库/

































































































































604

社区成员

发帖
与我相关
我的任务
社区描述
PowerBuilder 控件与界面
社区管理员
  • 控件与界面社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧