delphi用mscomm做串口通讯 接收到数据是乱码 怎么办啊?
发布网友
发布时间:2022-05-17 03:37
我来回答
共3个回答
热心网友
时间:2023-09-29 02:01
当发送类型是二进制时,应将以字节型数据放入Variant型变量中。
发送端:
procere TForm1.BitBtn1Click(Sender: TObject);
var
i,size: integer;
send_Command87:variant;
//fStream: TFileStream;
begin
size:=100;
send_Command87:= VarArrayCreate([1,size], varByte);
for i := 0 to size-1 do
begin
send_Command87[i]:=$ED//这里输入所要传输的数据
end;
mscomm.Output:=send_Command87;
end;
接收端:
var
buffer: Olevariant;//MSComm1.InputMode = comInputModeBinary
i: integer;
begin
case MSComm1.CommEvent of
comEvReceive: //串行接收事件处理
begin
buffer := MSComm1.Input;//读出后会自动清除接收缓冲区
for i := 0 to MSComm1.RThreshold - 1 do //32字节Hex转换
begin
Edit3.Text := Edit3.Text + inttohex(buffer[i], 2) + ' ';
end;
Memo1.Lines.Add(Edit3.Text);//加入一行显示
end;
end;
发送端数据读入你可以自己想方法 只要是Variant都行。
呵呵,没时间了写得很乱,吃饭去也。
热心网友
时间:2023-09-29 02:02
出现乱码可能
1 上位机下位机参数设置不一致 波特率 校验==
2 mscomm控件属性 设置 具体看下
设置一下控件属性
7)InputMode属性
void SetInputMode(long nNewValue); long GetInputMode();
访属性用于设置或者返回传输数据的类型。其取值和基本含义如下表所示。
设定值 值 描述
ComInputModeText(缺省) 0 通过Input属性以文本方式取回数据
ComInputModeBinary 1 通过Input属性以二进制方式取回数据
热心网友
时间:2023-09-29 02:02
应该 用 2进制 方式接受
然后 在 转换!
祝你顺利