DELPHI盒子
!实时搜索: 盒子论坛 | 注册用户 | 修改信息 | 退出
检举帖 | 全文检索 | 关闭广告 | 捐赠
技术论坛
 用户名
 密  码
自动登陆(30天有效)
忘了密码
≡技术区≡
DELPHI技术
移动应用开发
Web应用开发
数据库专区
报表专区
网络通讯
开源项目
论坛精华贴
≡发布区≡
发布代码
发布控件
文档资料
经典工具
≡事务区≡
网站意见
盒子之家
招聘应聘
信息交换
论坛信息
最新加入: 123glimmer
今日帖子: 19
在线用户: 11
导航: 论坛 -> DELPHI技术 斑竹:liumazi,sephil  
作者:
男 shanguan71 (上官) ▲△△△△ -
注册会员
2021/3/14 10:34:12
标题:
DELPHI XE 10.4串口通信,不能发送数据 浏览:608
加入我的收藏
楼主: 请问各位大神,DELPHI XE 10.4串口通信用什么控件?
我用SPCOMM 3.1,串口可以接收到数据,但发送不了数据。发送时正常返回,不报错,就是没有发送数据。
发送代码:
  S: AnsiString;
  S := mmoSend.text;
  FComm.WriteCommData(@S[1], length(S));
SPCOMM控件中实现部分:
function TComm.WriteCommData( pDataToWrite: PChar; dwSizeofDataToWrite: Word ): Boolean;
var
   Buffer: Pointer;
begin
     if (WriteThread <> nil) and (dwSizeofDataToWrite <> 0) then
     begin
          Buffer := Pointer(LocalAlloc( LPTR, dwSizeofDataToWrite+1 ));
          Move( pDataToWrite^, Buffer^, dwSizeofDataToWrite );
          FSendDataEmpty := False;
          if PostThreadMessage( WriteThread.ThreadID, PWM_COMMWRITE,
          WPARAM(dwSizeofDataToWrite), LPARAM(Buffer) ) then
          begin
          Result := True;
          Exit
          end
     end;

     Result := False
end;
----------------------------------------------
-
作者:
男 bjlg (蓝天) ★☆☆☆☆ -
盒子活跃会员
2021/3/14 10:57:41
1楼: 你程序的问题吧,spcomm本身没有太多问题
----------------------------------------------
http://delphi-z.ru>http://delphi.icm.edu.pl/ftp/http://delphi-z.ru
作者:
男 janker (janker) ★☆☆☆☆ -
盒子活跃会员
2021/3/14 11:26:19
2楼: function TComm.WriteCommData( pDataToWrite: PChar; dwSizeofDataToWrite: Word ): Boolean;
这里参数是Pchar,你传的是AnsiSting,这个不对
----------------------------------------------
-
作者:
男 ksrsoft (cb168) ★☆☆☆☆ -
注册会员
2021/3/14 17:35:54
3楼: XE pansichar(ansichar()) 这样转换,发送没问
----------------------------------------------
-
作者:
男 shanguan71 (上官) ▲△△△△ -
注册会员
2021/3/14 17:53:47
4楼: PChar,PAnsiChar,PWideChar数据类型都试过了,还是不能发送数据,怀疑是SPCOMM这个版本控件不能在DELPHIXE10.4下用。
----------------------------------------------
-
作者:
男 bjlg (蓝天) ★☆☆☆☆ -
盒子活跃会员
2021/3/14 20:29:19
5楼:  你发送的时候是不是线程中发送的,有时候就有问题,有时候没有问题
----------------------------------------------
http://delphi-z.ru>http://delphi.icm.edu.pl/ftp/http://delphi-z.ru
作者:
男 glwang (glwang) ★☆☆☆☆ -
盒子活跃会员
2021/3/14 20:43:47
6楼: 我用SPCOMM在 Delphi 10.3.3中做过项目,10.4也应该没有问题
----------------------------------------------
作者:
男 ksrsoft (cb168) ★☆☆☆☆ -
注册会员
2021/3/14 21:22:20
7楼: 用byte 发送试试,发送一个字节
----------------------------------------------
-
作者:
男 shanguan71 (上官) ▲△△△△ -
注册会员
2021/3/14 21:55:54
8楼: 是在主线程中发送的,一个字符也试过了,都不行,换TComPort控件算了
----------------------------------------------
-
作者:
男 glwang (glwang) ★☆☆☆☆ -
盒子活跃会员
2021/3/14 22:18:53
9楼: var
  data    : TBytes;
begin
  SetLength(data, 6);
  data[0]  := StrToInt('$FE'); //这种写法在PC和安卓下都可用
  data[1]  := StrToInt('$55');
  data[2]  := StrToInt('$04');
  data[3]  := StrToInt('$04');
  data[4]  := StrToInt('$05');
  data[5]  := StrToInt('$FD');

  SpCom2.WriteCommData(@data[0],length(data)); 
end;
----------------------------------------------
作者:
男 janker (janker) ★☆☆☆☆ -
盒子活跃会员
2021/3/14 22:33:21
10楼: 没用过SPCOMM(都是用Cport),看了源码,没发现有处理单字节和双字节字符的地方,带的Demo也是有D7和XE5的,但是它传递的长度都是Lenght(S),这个不是有问题吗?奇怪了,双字节时,length是字节数/2,这个3.1版本是别人改的:
// Version 3.0     1999/5/31
//          - Modify some error from source code,and can send data without
//          lose any byte.Modified some error about the SENDEMPTY property,
//          so it can be checked in applicaiton.
//
// Version 3.1  2013/11/06 Modified by HDW   1046500219@qq.com
// 1. Add new property Connected;
// 2. modify implementation of CommName property: Can use any WinNT Comm Port (1 to 254),
//    including virtual comm ports
// 3. DEMO: (SPCommDemoXE5 and SPCommD7)

这样的
function WriteCommData( pDataToWrite: PChar; dwSizeofDataToWrite: Word ): Boolean;
当传字符串时(字节数组肯定可以),在D7和XE5下同时可以用?请大侠们解惑........
----------------------------------------------
-
作者:
男 tiez (骑牛夜旅) ★☆☆☆☆ -
普通会员
2021/3/15 9:37:14
11楼: 注意一下你spcomm的流控方式改成none
你这种情况十有八九是流控搞成软流控了,结果接收端收到xoff了,然后接收端的发送行为就会被暂停,往往在你关闭连接的时候会一次发出去。
注意一下,发送的不是纯asc码的话不要用软流控。用无流控或接好四根线做硬流控。
----------------------------------------------
-
作者:
男 tiez (骑牛夜旅) ★☆☆☆☆ -
普通会员
2021/3/15 9:50:56
12楼: 串口是一种非常简单的通讯手段,其两端是对等的,如果一个方向正常,那另一个方向也应该是正常的,但由于其安全机制简单,所以不是安全的,需要自己了解通讯的细节。使用了不正确的通讯配置,那会出现很多奇怪的现象。
----------------------------------------------
-
作者:
男 kwer (★★★★★) ★☆☆☆☆ -
普通会员
2021/3/15 10:09:51
13楼: 收藏了,,,好久不碰串口。。。记得以前就是用线程收发数据。
----------------------------------------------
==========-==========-==========-==========-==========
     多隆, 给我备一匹最快的马, 我有事要走先~~~
==========-==========-==========-==========-==========
作者:
男 bjlg (蓝天) ★☆☆☆☆ -
盒子活跃会员
2021/3/15 10:32:22
14楼: 你发送对方接受不到,也 有可能是对方的设备的问题(如果不是电脑)例如用485等都可能出现,不一定是这边的问题,你首先要解决的问题是看看发出去没有,然后用示波器活别的工具看看
----------------------------------------------
http://delphi-z.ru>http://delphi.icm.edu.pl/ftp/http://delphi-z.ru
作者:
男 shanguan71 (上官) ▲△△△△ -
注册会员
2021/3/15 11:16:17
15楼: 各种数据类型都试过了,一个字节一个字节发送也试过了,接收端也是电脑上运行的串口工具软件,完全没有收到数据,应该是根本就没有发出去。甚至在SPCOMM的WriteCommData方法中写入发送的数据,还是发不出数据。
----------------------------------------------
-
作者:
男 glwang (glwang) ★☆☆☆☆ -
盒子活跃会员
2021/3/15 14:28:45
16楼: 使用串口监控软件查看一下就知道了
----------------------------------------------
作者:
男 pcplayer (pcplayer) ★☆☆☆☆ -
普通会员
2021/3/15 16:58:16
17楼: 很多做串口编程的程序员,不知道串口还需要流控。

不知道的结果,没有收发算是很容易解决的。很多时候收发正常,以为产品已经做好了。但是,产品发布后,发现经常丢数据,然后怪串口有问题。
----------------------------------------------
-
作者:
男 glwang (glwang) ★☆☆☆☆ -
盒子活跃会员
2021/3/29 16:46:35
18楼: function WriteCommData( pDataToWrite: PChar; dwSizeofDataToWrite: Word ): Boolean;

PChar改成PAnsiChar
----------------------------------------------
作者:
男 zyp1984 (小李他妈的飞刀) ★☆☆☆☆ -
普通会员
2021/3/29 21:05:36
19楼: mscomm32最好用。。。
----------------------------------------------
山外青山楼外楼,能人背后有能人弄..
信息
登陆以后才能回复
Copyright © 2CCC.Com 盒子论坛 v2.1 版权所有 页面执行46.875毫秒 RSS