DELPHI盒子
!实时搜索: 盒子论坛 | 注册用户 | 修改信息 | 退出
检举帖 | 全文检索 | 关闭广告 | 捐赠
技术论坛
 用户名
 密  码
自动登陆(30天有效)
忘了密码
≡技术区≡
DELPHI技术
lazarus/fpc/Free Pascal
移动应用开发
Web应用开发
数据库专区
报表专区
网络通讯
开源项目
论坛精华贴
≡发布区≡
发布代码
发布控件
文档资料
经典工具
≡事务区≡
网站意见
盒子之家
招聘应聘
信息交换
论坛信息
最新加入: laidabin
今日帖子: 1
在线用户: 2
导航: 论坛 -> 网络通讯 斑竹:liumazi,sephil  
作者:
男 sxbug (太阳雨) ★☆☆☆☆ -
盒子活跃会员
2021/1/1 9:31:19
标题:
为什么nrcomm无法发送高位为1的16进制字符? 浏览:2604
加入我的收藏
楼主: 使用nrComm dataprocessor 发送和接收数据,在一台电脑上测试,短接了串口的rx和tx,使用memo作为nrcomm的terminal,nrcomm设置为115200bps,parity=none,stopbits=1,streamprotocol=none,bytesize=8。
  nrDataProcessor1.DataPackets[0].PacketBegin:=#$5A;
  nrDataProcessor1.DataPackets[0].Packetend:=#$FE;
  nrDataProcessor1.DataPackets[0].Active:=True;
采用如下命令发送:
mystr:=#$5A#$31#$80#$32#$33#$34#$FE#$EF;
  if nrComm1.Active then
    nrComm1.SendString(mystr)
  else
    ShowMessage('serial not open');

send:5A 31 32 33 34 FE EF
recv:5A 31 32 33 34 C3 BE C3 AF

send:5A 31 80 32 33 34 FE EF
recv:5A 31 C2 80 32 33 34 C3 BE C3 AF

请高人指点,谢谢
----------------------------------------------
-
作者:
男 sxbug (太阳雨) ★☆☆☆☆ -
盒子活跃会员
2021/1/1 10:47:21
1楼: send:5A A5 0A 00 05 C2 00 D0 FE EF
recv:5A 3F 05 3F C3 90 C3 BE 3F

难道编码问题?
----------------------------------------------
-
作者:
男 kentty (kentty) ★☆☆☆☆ -
普通会员
2021/1/1 10:52:40
2楼: 都要发二进制数据了,为啥还用sendString,SendData不香么?
----------------------------------------------
-
作者:
男 sxbug (太阳雨) ★☆☆☆☆ -
盒子活跃会员
2021/1/1 15:47:00
3楼: mystr:pansichar;
mystr:=#$5A#$31#$80#$32#$33#$34#$FE#$EF;
  if nrComm1.Active then
    //nrComm1.SendString(mystr)
    nrComm1.SendData(mystr,10)

         5A 31 80 32 33 34 FE EF
recv:5A 31 C2 80 32 33 34 C3 BE C3 AF

更奇怪了,水平有限,请指教。
----------------------------------------------
-
作者:
男 roadrunner (roadrunner) ★☆☆☆☆ -
盒子活跃会员
2021/1/1 16:00:00
4楼: 看起来一切正常的样子,楼主说的问题在哪里?
----------------------------------------------
-
作者:
男 sxbug (太阳雨) ★☆☆☆☆ -
盒子活跃会员
2021/1/1 16:47:50
5楼: 我认为发送的,要和接收的字符是一样的吧。但现在从结果来看,不一样。
发送的:5A 31 80 32 33 34 FE EF
接收的:5A 31 C2 80 32 33 34 C3 BE C3 AF

不知道是怎么回事?请指教
----------------------------------------------
-
作者:
男 sxbug (太阳雨) ★☆☆☆☆ -
盒子活跃会员
2021/1/1 16:50:27
6楼: 还有一个问题,为什么收到数据了,dataprocessor还报  timeout?
----------------------------------------------
-
作者:
男 sxbug (太阳雨) ★☆☆☆☆ -
盒子活跃会员
2021/1/1 22:12:59
7楼: 必须用 array of byte 来发送,就没有问题。但是为什么dataprocessor 还是报 timeout,就不知道了。
----------------------------------------------
-
作者:
男 arhaha (lin) ★☆☆☆☆ -
盒子活跃会员
2021/1/1 23:05:44
8楼: mystr:pansichar;  改为 mystr: ansistring; 或者 mystr:rawbytestring;
----------------------------------------------
-
作者:
男 tiez (骑牛夜旅) ★☆☆☆☆ -
普通会员
2021/1/2 10:25:33
9楼: 使用COM发送数据,最好用tbytes或array of byte做数据的承载体,无必要不要使用字符串了,因为不小心字符串就会在unicode、长度判断等地方处理出错。8楼建议的rawbytestring也是个选择,这个类型在内部引用是不会被自动处理,可保证值的原始性。
nrcomm这个控件是没问题的,使用很久了。
使用时要注意几个问题,AfterReceive收到包之后放缓冲里拼接,查到包尾之后移出马上触发其它线程来处理。二是流控要搞清楚原理。
----------------------------------------------
-
作者:
男 zhhzm (Redbreast) ★☆☆☆☆ -
盒子活跃会员
2021/1/2 20:04:01
10楼: 去掉流控看看
----------------------------------------------
菩提有树无树,明镜是台非台,关我鸡毛鸟事,坐看云去云来。
作者:
男 sxbug (太阳雨) ★☆☆☆☆ -
盒子活跃会员
2021/1/2 21:07:11
11楼: 感谢大家的帮助。我使用 array of byte 已经能用。其它方法暂时没有测试。但厂家的人也按我的要求做了一个程序。看界面 用了sendstring,效果是对的。

我看他是用ansistring做的

流控我是去掉的
----------------------------------------------
-
作者:
男 arhaha (lin) ★☆☆☆☆ -
盒子活跃会员
2021/1/2 21:52:16
12楼: 一点不奇怪,你用 mystr:pansichar;  这是一个指针,它指向哪里了??mystr:=#$5A#$31#$80#$32#$33#$34#$FE#$EF;  这样直接给指针赋值,你的程序没有报AV就不错了。但是这样写,报AV是迟早的事!
----------------------------------------------
-
信息
登陆以后才能回复
Copyright © 2CCC.Com 盒子论坛 v3.0.1 版权所有 页面执行60.54688毫秒 RSS