⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 mscom组件.txt

📁 mscomm组件问题的FAQ
💻 TXT
字号:
一、MSComm控件的主要属性及事件
  (1)CommPort:设置或返回串行端口号,缺省值1。
  (2)Setting:设置或返回串口通信参数,格式为“波特率,奇偶校验位,数据位,停止位”。例如:MSComm1.Setting:=′9600,n,8,1′
  (3)PortOpen:打开或关闭串行端口,格式为:MSComm1.PortOpen:={True|False}
  (4)InBufferSize:设置或返回接收缓冲区的大小,缺省值为1024字节。
  (5)InBufferCount:返回接收缓冲区内等待读取的字节数,可通过设置该属性为0来清空接收缓冲区。
  (6)RThreshold:该属性为一阀值,它确定当接收缓冲区内的字节个数达到或超过该值后就产生代码为ComEvReceive的OnComm事件。
  (7)SThreshold:该属性为一阀值,它确定当发送缓冲区内的字节个数少于该值后就产生代码为ComEvSend的OnComm事件。
  (8)InputLen:设置或返回接收缓冲区内用Input读入的字节数,设置该属性为0表示Input读取整个缓冲区的内容。
  (9)Input:从接收缓冲区读取一串字符。
  (10)OutBufferSize:设置或返回发送缓冲区的大小,缺省值为512字节。
  (11)OutBufferCount:返回发送缓冲区内等待发送的字节数,可通过设置该属性为0来清空缓冲区。
  (12)OutPut:向发送缓冲区传送一串字符。
  如果在通信过程中发生错误或事件,就会触发OnComm事件,并由CommEvent属性代码反映错误类型,在通信程序的设计中可根据该属性值来执行不同的操作。CommEvent属性值及其含义如下:
  (1)ComEvSend:值为1,发送缓冲区的内容少于SThreshold指定的值。
  (2)ComEvReceive:值为2,接收缓冲区内字符数达到RThreshold指定的值。
  (3)ComEvFrame:值为1004,硬件检测到帧错误。
  (4)ComEvRxOver:值为1008,接收缓冲区溢出。
  (5)ComEvTxFull:值为1010,发送缓冲区溢出。
  (6)ComEvRxParity:值为1009,奇偶校验错误。
  (7)ComEvEOF:值为7,接收数据中出现文件尾(ASCII码为26)字符。
  二、程序样例
    下面是一接收程序的样例(主要部分),大家可根据实际需要进行完善。
  在Form中放置一Memo控件用于显示接收的数据,Combobox1选择通信参数(Setting属性值),Combobox2选择串口(CommPort属性值),按Button1开始接收数据,按Button2停止接收。
  procedure TForm1.FormCreate(Sender: TObject);
  begin
  Mscomm1.InBufferCount :=0; // 清空接收缓冲区
  Mscomm1.InputLen :=0; // Input读取整个缓冲区内容
  Mscomm1.RThreshold :=1; // 每次接收到字符即产生OnComm事件
  end;
  procedure TForm1.Button1Click(Sender: TObject);
  begin
  Mscomm1.Settings :=ComboBox1.Text;
  if ComboBox2.Text =′com1′ then // 假设只考虑COM1和COM2两种情况
Mscomm1.CommPort :=1
  else
    Mscomm1.CommPort :=2;
  Mscomm1.PortOpen :=true; // 打开串口
  Mscomm1.DTREnable :=true; // 数据终端准备好
  Mscomm1.RTSEnable :=true; // 请求发送
  end;
  procedure TForm1.Button2Click(Sender: TObject);
  begin
  Mscomm1.PortOpen :=false; // 关闭串口
   Mscomm1.DTREnable :=false;
  Mscomm1.RTSEnable :=false;
  end;
  procedure TForm1.MSComm1Comm(Sender: TObject);
  var
  recstr:Olevariant;
  begin
   if Mscomm1.CommEvent = 2 then
    begin
  recstr := Mscomm1.Input ;
  Memo1.text := Memo1.Text + recstr;
  end;
end;  



在Delphi编程环境下实现上位机与PLC的串行通信
张发忠 李晓明(武汉大学电气工程学院)
摘  要:介绍了通过引进ActiveX控件MSComm,在Delphi 6.0编程环境下,实现上位机与Omron C200H PLC串行通信的一般方法,并给出了工程实例。该方法简单可靠、便于移植、实用性强,在工业控制中有着广泛的用途。

关键词:串行通信;ActiveX控件;上位机;PLC

一、引言

PLC(Programmable Logic Controller)作为一种新型的工业控制器,以其功能强、通用性好、可靠性高、安装灵活、扩展方便、编程简单,以及体积小、重量轻、功耗低、性能价格比高等一系列优点,在工业控制中得到越来越广泛的应用。目前,在电力生产过程中,随着国外大型火力发电机组的成套引进,PLC以其优越的性能在国内的很多火电厂也得到越来越广泛的应用。

在火电厂的小型集散控制系统中,如使用专业工控组态软件,如FIX、INTOUCH等,制作上位机的监控界面,而以专用的PLC通信接口模块以及其厂家推荐的DDE Server作为联系上位机和PLC的桥梁,则成本较高,投资较大。所以如果上位机采用高效的Delphi 6.0语言编程,通过引进ActiveX控件MSComm,实现Omron C200H PLC和上位机的通信则是一种较好的技术方案。在工程实际应用中,该方案已在河南信阳火电厂输煤系统中得到了应用,并取得了满意的效果。

二、实现方法

1、设计思想

在Delphi 6.0语言环境下,上位机首先通过引进Visual Basic或Visual C++的通信控件MSComm,编程实现与PLC之间的串行通信。即:上位机定时向PLC发出读数据的命令,PLC响应后,把存放在数据区的数据送入接收缓冲器,然后再把数据赋给临时变量,经过处理后用于显示,再通过编程实现对PLC的自动监控。如果采用RS_485串行通信总线标准进行通信,只要使用RS485/RS232接口转换器即可。其通信简图如图1所示。



上位机和Omron C200H PLC的通信接线示意图如图2所示:



2、通信协议

上位机通过RS232C串口与主机通信有两种命令方式:第一种是由上位机向PLC发送通信请求命令,第二种是由PLC向上位机发送通信响应命令。工业过程监控一般采用第一种方式启动。其通信协议格式如下(以Omron C200H PLC为例):

(1)上位机→PLC的命令帧格式:



其中:@为帧开始标志符;IP2、IP1为PLC的节点标识码,两位十进制数,用来指定与上位机通信的PLC,对应上位机,PLC可在DM6648和DM6653中设置自己的通信节点码;ID2、ID1为两字节命令码;CT为正文内容,用以设置具体的命令参数;F2、F1为两字节的帧校验码FCS,它是从开始符“@”到正文结束的所有字符的ASCII码按位异或的结果;“*”和“/”两字符表示命令结束。

(2)PLC→上位机的响应帧格式:

 

其中:@ 为帧开始标志符;IP2、IP1为与主机通信的PLC节点标识码;ID2、ID1为两字节命令码;E2、E1为命令结束状态码,00表示正常结束,01表示RUN模态下无法完成;CT为正文内容,仅在收到读数据命令时产生;P2、P1为两字节的帧校验码FCS,它是从开始符“@”到正文结束的所有字符的ASCII码按位异或的结果;“*”和“/”两字符表示命令结束。

三、ActiveX控件的引入

1、引入MSComm控件的意义

在计算机的串行通信中,常用的通信方式有三种:直接读写串口、利用WINDOWS API函数读写串口和利用串口通信控件MSComm操作串口。其中直接读写串口即通过调用-inp()和-outp()函数直接读写串口;利用WINDOWS API函数读写串口即通过调用API函数中的 CreateFile()、 ReadFile()、WriteFile()等函数操作串口。

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -