📄 mscom组件.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 + -