待码如下:
procedure TfrmMainComm.CommTest1ReceiveData(Sender: TObject;
Buffer: PAnsiChar; BufferLength: Word);
var
j: integer;
s: string;
begin
j := BufferLength; SetLength(S, j);
Move(Buffer^, PChar(s)^, j);
Memo1.Lines.Text:=Memo1.Lines.Text + s;
end;偶实在找不到原因了。
procedure TfrmMainComm.CommTest1ReceiveData(Sender: TObject;
Buffer: PAnsiChar; BufferLength: Word);
var
j: integer;
s: string;
begin
j := BufferLength; SetLength(S, j);
Move(Buffer^, PChar(s)^, j);
Memo1.Lines.Text:=Memo1.Lines.Text + s;
end;偶实在找不到原因了。
解决方案 »
- 收藏 不显示删除回复显示所有回复显示星级回复显示得分回复 怎样解决截屏问题。我的程序是通过服务间接启动执行的
- 怎样在提问中贴图?
- 为何 unit1.Form1与Form1不是指向同一个地址呢?
- delphi新手:请问大家在用表格形式的数据录入时,是用stringgrid吗?
- 如何固定DBGrid的某个列?
- 求救--在fastreport教本编辑里面为什么输不了汉字??(急)
- 如何控制输入法中“选择文字”的提示框的位置。
- 关于数据排序问题!请大家帮忙,我十分为急。
- 测试高手请进。得到代码覆盖率后,知道哪些行运行过,哪些行没运行过。怎么才能设计测试用例,提高代码覆盖率
- 俺的Detail怎么只能显示一条记录?
- 请高手帮忙把这小段代码转成delphi的,谢谢
- delphi 利用ADOQuery查询 在DBChart显示
请检查你的串口设置是否正确,还有需要 CommTest1.StartComm;
begin
if (Button1.Caption = '打开串口') and
(not CommTest1.PortOpen) then
begin
with CommTest1 do
begin
CommPort:= cbPort.ItemIndex+1;
BaudRate:= StrToInt(cbBaut.Text);
StartComm;
if PortOpen then
Button1.Caption := '关闭串口'
else
showmessage('com is not exist,or is closed');
end;
end
else
begin
CommTest1.StopComm ;
Button1.Caption := '打开串口'
end;
end;procedure TfrmMainComm.Button2Click(Sender: TObject);
begin
if (Button2.Caption = '打开串口') and
(not CommTest2.PortOpen) then
begin
with CommTest2 do
begin
CommPort:= ComboBox1.ItemIndex+1;
BaudRate:= StrToInt(ComboBox2.Text);
StartComm;
if PortOpen then
Button2.Caption := '关闭串口'
else
showmessage('com is not exist,or is closed');
end;
end
else
begin
CommTest2.StopComm ;
Button2.Caption := '打开串口'
end;
end;procedure TfrmMainComm.CommTest1ReceiveData(Sender: TObject;
Buffer: PAnsiChar; BufferLength: Word);
var
j: integer;
s: string;
begin
j := BufferLength; SetLength(S, j);
Move(Buffer^, PChar(s)^, j);
Memo1.Lines.Text:= Memo1.Lines.Text + s;
end;procedure TfrmMainComm.CommTest2ReceiveData(Sender: TObject;
Buffer: PAnsiChar; BufferLength: Word);
var
j: integer;
s: string;
begin
j := BufferLength; SetLength(s, j);
Move(Buffer^, PChar(s)^, j);
Memo3.Lines.Text:= Memo3.Lines.Text + s;
end;procedure TfrmMainComm.btnSend1Click(Sender: TObject);
begin
CommTest1.WriteCommData(Pchar(Memo2.Text),Length(Memo2.Text));
end;procedure TfrmMainComm.btnSend2Click(Sender: TObject);
begin
CommTest2.WriteCommData(Pchar(Memo4.Text),Length(Memo4.Text));
end; //SetLengthprocedure TfrmMainComm.Timer1Timer(Sender: TObject);
begin
if CheckBox1.Checked
then CommTest1.WriteCommData(Pchar(Memo2.Text),Length(Memo2.Text))
end;procedure TfrmMainComm.Edit1Change(Sender: TObject);
begin
Timer1.Interval:=strtoint(Edit1.text)
end;
end.
有,startcomm,可以发送,就是不能接收。
BufferLength: Word);
var
s_fetch:string;
begin
setlength(s_fetch,bufferlength);
move(buffer^,pchar(@s_fetch[1])^,bufferlength);
arr[0]:=strtofloat(copy(s_fetch,2,11));
arr[1]:=strtofloat(copy(s_fetch,15,11));
arr[2]:=strtofloat(copy(s_fetch,28,11));
arr[3]:=strtofloat(copy(s_fetch,41,11));
end;
上面是我以前写的一个 记得当时也是memo没有数据 而实际上字符串s_fetch 已经有值了你直接show一下你的s值看看
j := BufferLength;
SetLength(s, j);
Move(Buffer^, PChar(s)^, j);
Memo3.Lines.Text:= Memo3.Lines.Text + s;
6楼正解,我也是遇到过这样的情况但是我觉得楼主这里的情况有点不一样,InX_XonXoffFlow属性是设置握手协议,也就是说握手协议用到的字符,程序会认为是开始通信和结束通信的标记而不算作是数据的内容,给忽略掉,但是握手协议之外的数据还是可以接收到的。所以请楼主先确认一下,串口是不是有数据发送过来。建议楼主用个示波器接在串口的接收引脚上,看看有没有波形过来,有的话就是你程序的设置问题,如果没有的话,就检查串口发送端(和你通信的那个机器的发送端)。如果楼主没有示波器的话,网上下个AccessPort也可以用。试过后结果发上来,别人好帮你判断
就是这个程序收不到。
SPCOMM控件设置如下:
boudrate:9600
bytesize:8
commname:com1
commport:2
dsrsensitivity:false
dtrcontrol:EtrEnable
IgnoreNullChar:False
Inx_XonXoffFlow:False
Output
Type:Unassigned
Outx_CtsFlow:False
Outx_DsrFlow:False
Outx_XonXoffFlow:False
Parity:None
ParityCheck:None
PortOpen:False
PortOpenError:
ReddintervalTime:100
ReadTotalTimeoutConstart:0
ReadTotalTimeoutMultiplier:0
ReplacedChar:#0
ReplaceWhenParityError:False
RtsControl:RtsDisable
TxcontinueOnXoff:False
WriteTotalTimeoutConstant:0
ReadTotalTimeoutMultiplier:0
XoffChar #19
XoffLimit 500
XonChar #17
XonLimit 500
不知道哪里下的话,我传给你,邮箱给我
恩人哪,非常感谢!
ReddintervalTime:1