高分求一段485 通讯代码 控件不限,TURBRO POWER ,MSCOMM,SPCOMM,API都行,最好全有(200分。。。急,急,见者有分 ( 积分:

  • 主题发起人 主题发起人 天涯一客
  • 开始时间 开始时间

天涯一客

Unregistered / Unconfirmed
GUEST, unregistred user!
高分求一段485 通讯代码 控件不限,TURBRO POWER ,MSCOMM,SPCOMM,API都行,最好全有(200分。。。急,急,见者有分 ( 积分: 200 )<br />希望各位大侠,给我一段 DELPHI 485通讯代码,我采用的是发送BYTE ,但我无法与下微机取的通读(轮询法),请各位高手帮助
 
不就是普通的串口通信么?有什么问题?

“但我无法与下微机取的通读(轮询法)”这句没看懂
 
协议没读懂吧
 
协议没有错,是采用ASCII值,请给我个代码参考(就是无法通讯啊)轮询就是发送一次后,等待一段时间看看有没有反回数据,接着一个一个的发下去,就是机子,反复做着一样的动作,以读取下微机的信息
 
定义 :
长度为:23
但我定义为数组类型为:byte
列如:
sbuf:array[0..22] of byte
sbuf[0]:=85;(ASCII值)
sbuf[1]:=56;(从这位开始XOR校验)
....
...
sbuf[20]:=(xor校验码的高位)(
sbuf[21]:=(xor校验码的低位)
sbuf[22]:=13(结束标志符)
以后工作怎么做请指正
 
呵呵,你是用什么串口组件
 
我这有个Cport的,测试和PLC的通讯,用的是MOBUS,好简单的:
procedure TForm1.btn1Click(Sender: TObject);
var
crc,adr,v:Word;
plcadr:Byte;
i,n:Integer;
dv,rv:array [0..7] of Byte;
wb:TWordRec;
s:string;
begin
adr:=StrToInt(edtwa1.Text);
v:=StrToInt(edtwv1.Text);
plcadr:=StrToInt(edtPLCAdr.Text);
dv[0]:=plcadr;
dv[1]:=$06;
dv[2]:=HiByte(adr);
dv[3]:=adr;
dv[4]:=HiByte(v);
dv[5]:=v;
crc:=CalCRC16(dv,0,5);
lblcrc1.Caption:=IntToStr(crc);
dv[6]:=crc;
dv[7]:=HiByte(crc);

lblb1.Caption:=IntToHex(dv[0],2);
lblb2.Caption:=IntToHex(dv[1],2);
lblb3.Caption:=IntToHex(dv[2],2);
lblb4.Caption:=IntToHex(dv[3],2);
lblb5.Caption:=IntToHex(dv[4],2);
lblb6.Caption:=IntToHex(dv[5],2);
lblb7.Caption:=IntToHex(dv[6],2);
lblb8.Caption:=IntToHex(dv[7],2);

if not comprt1.Connected then
comprt1.Open;
comprt1.ClearBuffer(True,True);
try
comprt1.Write(dv,8);
Sleep(100);
n:=comprt1.Read(rv,8);
if n >= 8 then
begin
for i := 0 to 7 do
lstrv.Items.Add(IntToHex(rv,2));
lblplc.Caption:=IntToStr(rv[0]);
lblFun.Caption:=IntToStr(rv[1]);
wb.bh:=rv[2];
wb.bl:=rv[3];
lbladr.Caption:=IntToStr(wb.w);
wb.bh:=rv[4];
wb.bl:=rv[5];
lblValue.Caption:=IntToStr(wb.w);
wb.bh:=rv[7];
wb.bl:=rv[6];
lblcrc.Caption:=IntToStr(wb.w);
end
else
begin
s:='返回值错误! 返回值字节数:'+ IntToStr(n);
stat1.SimpleText:=s;
end;
except
Application.MessageBox('写PLC错误!','错误',MB_OK);
end;
end;
 
我用的是COMPORT 控件
SPCOMM我做通了,但是我用COMPORT控件在接收时为什么数据有截断的现象,请问是为什么?但我设置断点后就没有了,请问我怎么样设置
 
当然会截断,是系统驱动的原因
 
不是系统驱动方面的原,我做SLEEP后问题解决
 
用 TURBRO POWER 来做,关键是要看协议,看手册上的例子。

最好的调试方法是要先用厂家的DEMO程序,先确保通讯成功,说明硬件没问题,软件也可以用,其它的就是要自己写看好手册写程序了。
 
我觉得主要是通信参数和协议。
我一般用Moxa公司的PComm做串口通信。
 
发数据后,没有做延时处理
 
关注中,我也正在写与8530D的接口,想要获取电子称上的相关数据,使用mscomm或者spcomm,有高手有相关的代码能给mail一份吗
wbclient@126.com 有偿!!
 
有那位高手做过TURBO POWER 控件的请给我例子观赏一下,好吗?上面发布的问题本人早以解决,非参考以上信息,但我会把分发给大家,请多发言,发表见解
 
哎,我当年就专门用API做了个串口DLL,调试好了这几年全部使用该DLL开发,很好用地。
 
to sim_might
能否把你的DLL公开来看一下,最好有源码,给你加分
 
以上問題早以解决,为感谢大家,我把分分给大家
 
多人接受答案了。
 

Similar threads

S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
D
回复
0
查看
2K
DelphiTeacher的专栏
D
D
回复
0
查看
2K
DelphiTeacher的专栏
D
D
回复
0
查看
1K
DelphiTeacher的专栏
D
后退
顶部