全新论坛MCU智学网上线,欢迎访问新论坛!稀缺资源、技术干货、参考设计、原厂资料尽在MCU智学网
更新自动建库工具PCB Footprint Expert 2024.04 Pro / Library Expert 破解版

采用Delphi5.0实现计算机与三垦变频器通讯实例

[复制链接]
2922 0

本文包含原理图、PCB、源代码、封装库、中英文PDF等资源

您需要 登录 才可以下载或查看,没有帐号?注册会员

x
摘要:
本文介绍了三垦VM05变频器的通讯功能,并列举了采用Delphi5.0实现计算机与三垦VM05变频器通讯的应用实例。
Abstract: This  paper  introduced  the communication function of SanKen VM05 inverter,and the application of computer communicated with Sanken inverter by delphi 5.0.

关键词:
三垦变频器  通讯   Delphi5.0   SPCOMM

Key Words:SanKen inverter  Communication  Delphi5.0  SPCOMM

一、引言
为了满足广大用户对通讯功能应用的要求,在三垦VM05系列变频器中对通讯功能进行了加强,机器本身标准配置了RS232RS485通讯接口,可方便地实现一对一或一对多通讯。三垦变频器的使用说明书中介绍了采用VB6.0实现通讯的实例,因VB6.0中自带一个可实现通讯的MSCOMM控件,可以比较方便的完成通讯功能。Delphi5.0为Inprise公司开发的一款优秀的可视化软件开发工具,因其短小精悍、真编译、易学易用等优点,逐渐成为越来越多程序员喜爱的开发工具。遗憾的是,Delphi自身没有实现串行通讯功能的控件,当然我们可以采用Windows的API函数或内欠汇编程序完成通讯功能,但如此需要我们熟悉复杂的API函数、汇编程序、多线程、消息处理机制以及掌握大量的通信知识等技术。但是,Delphi深受广大程序员爱好的一个非常重要的原因是因为Delphi有着众多的强大的第三方控件,SPCOMM就是一款流行的应用于Delphi中的串口通讯控件。她因其源代码完全采用面向对象的PASCAL语言编写而能与Delphi很好的结合,经过编译安装后的控件可以与Delphi自身的控件一样的使用。

二、三垦VM05变频器通讯功能简介
由于篇幅所限,关于通讯的基本知识不是本文介绍的要点,读者可以参考相关的书籍。三垦VM05变频器通讯的电文格式主要有两种形式:①ASCII形式:以ASCII代码文字构成的电文的一种形式。②BINARY形式:以16进制数据构成变频器的编号及数据部分的一种形式。ASCII形式电文长度较BINARY形式长,故电文传送时间要比BINARY形式的长些,但ASCII形式电文可以实现强大通讯要求的功能,所以是本文介绍的重点。

1、ASCII形式电文构成形式如下:


①开始代码为“*”,即ASCII代码的2AH
②③变频器编号,固定为2个字节,范围为1~32。如1号变频器写为:01。
④指令代码,变频器的指令代码,参考下面的描述。
⑤数据,与指令代码配合的操作数,可参考三垦变频器说明书的指令代码说明。
⑥校验和,将①~⑤的数据以二进制求和,取得到结果的低2位16进制数的补码,最后将bit7设为0,bit6设为1。
⑦⑧终止代码,可以由变频器功能码Cd151决定采用CR+LF和CR两种形式。
注:CR,回车符ASCII 的0DH;LF,换行符ASCII的0AH。

2、指令代码。
三垦变频器的标准电文中共有27种命令。限于篇幅需要,本文只简单介绍几个常用的命令,其他命令可以参考三垦变频器的使用说明书中的描述。



3、变频器参数设定


其他参数均采用默认值。其中与通讯有关的参数为:波特率Cd148=1(4800 bps),奇偶校验位Cd149=1(奇数),停止位Cd150=1(1位),终止代码Cd151=0(CR+LF)。

三、采用SPCOMM控件完成上位机对三垦变频器的控制。
1、SPCOMM控件的安装。
为了让SPCOMM控件能像Delphi本身自带的控件一样使用,必须进行安装与编译。首先将SPCOMM.PAS等文件拷贝到Delphi的安装目录\Delphi5\lib\下,然后打开Delphi5,选择下拉菜单 Component中的 Install Component选项,在 Unit file name处点击Browse按钮,在\Delphi5\lib\下选择SPCOMM.PAS,其他各项可用默认值,点击 OK按钮。编译安装成功后,在System控件面板中会出现一个红色COM  232字样控件(如下图所示)。现在就可以像使用Delphi自带控件一样使用SPCOMM控件了。

2、窗体的建立以及程序的编写。
拖动一个SPCOMM控件到窗体上,然后布置如下的界面,全部源程序如下:


unit Unit1;
interface
uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, SPComm, Buttons, StdCtrls, ComCtrls;
type
  TForm1 = class(TForm)
    Comm1: TComm;
    Edit1: TEdit;
    BitBtn1: TBitBtn;
    Memo1: TMemo;
    Label1: TLabel;
    Label2: TLabel;
    StatusBar1: TStatusBar;
    function  SumCheck(s:string):integer;
    procedure   SendCommand(s:string);
    procedure   BitBtn1Click(Sender: TObject);
    procedure   Comm1ReceiveData(Sender: TObject; Buffer: Pointer;
      BufferLength: Word);
    Procedure   FormCreate(Sender: TObject);
    Procedure   FormClose(Sender: TObject; var Action: TCloseAction);
  private
    { Private declarations }
  public
    { Public declarations }
  end;
var
  Form1: TForm1;
  Str_Send,Str_Input:string;  
implementation
{$R *.DFM}
procedure TForm1.FormCreate(Sender: Tobject );//窗体创建时对一些参数初始化
begin
Comm1.BaudRate:=4800;     //设置波特率为4800
Comm1.CommName:=COM1; //设置通讯口为COM1
Comm1.Parity:=Odd;         //设置校验位为奇校验(Odd)
Comm1.StopBits:=_1;        //设置停止位为1位
Comm1.StartComm;         //启动通讯口
end;
Function TForm1.SumCheck(s:string):integer; //自建立校验和函数
var Str_Sum,i:integer;
begin
   Str_Sum:=0;
   for i:=1 to length(s) do
    begin
       Str_Sum:=Str_Sum + Ord(s);
       Application.ProcessMessages ; //转让系统控制权
    end;
  Str_Sum:=(((0-Str_Sum) And 127) Or 64);
  Result:=Str_Sum;
end ;
procedure Tform1.SendCommand(s:string);
var i:integer;
begin
  for i:=1 to length(s) do   //完成对字符串的发送
     begin
      Comm1.WriteCommData(@s,1);
      Application.ProcessMessages;
      end
end;
procedure TForm1.BitBtn1Click(Sender: TObject);
begin
Str_Send:=Edit1.Text;             //将Edit1输入的字符串设为命令的开始部分
Str_Send:=Str_Send + Chr(sumcheck(str_send))+ #13 + #10; //对电文增加校验和以及CR+LF
StatusBar1.Panels[1].Text:=Str_Send; //将命令显示在状态条上,便于查看
SendCommand(Str_Send);         //发送控制命令
end;
procedure TForm1.Comm1ReceiveData(Sender: TObject; Buffer: Pointer;
  BufferLength: Word);
begin    //以下程序为将接收到的数据显示在Memo1上。
SetLength(Str_Input, BufferLength);
Move(Buffer^, PChar(Str_Input)^, BufferLength);
Memo1.Lines.Add(Str_Input);
Memo1.Invalidate;
end;
procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
Comm1.StopComm;     //程序退出时关闭通讯口
end;
end.
以上程序在Windows2000 Professional,Delphi5.0环境下编译通过。

四、结束语
将以上的程序编译运行,然后将计算机的COM1口连接到三垦变频器的RS232通讯口上(参考三垦变频器使用说明书),并设定好前文所示的变频器参数,就可以实现通讯了。如在发送的命令框里输入:*01O00500,按发送按钮,就可以将频率设定为5HZ,同时Memo1里增加了返回的代码。输入*01P,变频器可以实现正转。由于返回的电文里含有回车与换行符,大家可以发现Memo1自动的换行显示。本文为了使程序简洁易懂,并未加任何通讯错误处理与花哨的界面,大家在此程序的基础上修改后即可满足您对三垦变频器监控的要求。

参考文献:
1、《三垦变频器VM05系列使用说明书》-三垦力达电气(江阴)有限公司。
2、《Delphi 5 开发指南》  电子工业出版社  王忠 迟忠先 编着。

作者简介:
徐占先,男,工程师,2001年毕业于青岛大学机电工程学院。
E-mail:qdxzx@163.com ,电话:13589019660  网址:www.51bianpin.com 。

举报

回复
*滑块验证:
您需要登录后才可以回帖 登录 | 注册会员

本版积分规则

打开支付宝扫一扫,最高立得1212元红包
搜索

图文热点

更多

社区学堂

更多

客服中心

QQ:187196467 服务时间:周一至周日 8:30-20:30

关注我们

关于我们
关于我们
友情链接
联系我们
帮助中心
网友中心
购买须知
支付方式
服务支持
资源下载
售后服务
定制流程
关注我们
官方微博
官方空间
官方微信
快速回复 返回顶部 返回列表