B bobotu Unregistered / Unconfirmed GUEST, unregistred user! 2002-01-30 #1 用DELPHI 如何实现工业控制计算机与可编程控制器PLC 通讯?
Y yzhshi Unregistered / Unconfirmed GUEST, unregistred user! 2002-01-30 #2 可以,不过有一些问题。 如果单纯是98操作系统,还好办,直接在Delphi里面嵌入汇编语言就可以了。 但是2000不支持直接硬件端口访问,所以这样不行。 对于2000,需要使用DDK编写WDM设备驱动程序才行得通。 对于两个操作系统,都有控件来实现类似功能。
可以,不过有一些问题。 如果单纯是98操作系统,还好办,直接在Delphi里面嵌入汇编语言就可以了。 但是2000不支持直接硬件端口访问,所以这样不行。 对于2000,需要使用DDK编写WDM设备驱动程序才行得通。 对于两个操作系统,都有控件来实现类似功能。
蚊 蚊子 Unregistered / Unconfirmed GUEST, unregistred user! 2002-01-30 #3 和PLC的通讯不就是通过串口嘛;其实就是串口的编程阿;不用写什么驱动吧;
B bobotu Unregistered / Unconfirmed GUEST, unregistred user! 2002-01-30 #4 我只有50分啦 只好少给你们啦 plc 于计算机的通讯 需要rs232与rs485 转换 我没实际用过 现在做课题,写论文 需要啦 只好想各位大侠请教啦
T TK128 Unregistered / Unconfirmed GUEST, unregistred user! 2002-01-31 #5 具体一点,我做过很多PLC,你说具体的PLC型号和控制方式!!!控制PLC不存在2000和98 的问题,不要受误导 有什么疑问可发邮件到LYD_YL@163.NET
L lsssxs Unregistered / Unconfirmed GUEST, unregistred user! 2003-01-19 #8 用pscomm和mscomm都可以的,要的话留下email,为了防止错误要写fcs
G guofengdelphi Unregistered / Unconfirmed GUEST, unregistred user! 2003-01-19 #9 to lsssxs : 我对这很感兴趣,请email给我:guofengboss_2002@163.com 多谢!
J jlr Unregistered / Unconfirmed GUEST, unregistred user! 2003-01-19 #10 http://www.chinakong.net/artical/1322.htm 在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()等函数操作串口。? 使用这两种方法进行编程,既繁琐复杂,又不直观。而通过从Visual Basic或Visual C++中引进ActiveX控件MSComm,编程者只需通过改变MSComm控件的属性设置和编写相应的初始化程序,就能在Windows环境下简单方便地实现不同用户的串行通信要求。 2、引入MSComm控件的方法 (1)进入Delphi 6.0编程环境下,在菜单项中选中Component/Import ActiveX选项,将出现ActiveX控件导入窗口(如图3); (2)在其中选中Microsoft Comm Control 6.0(Version 1.1),并按需要选定Palette pages、unit dir name、Search path值(一般取默认值),最后选择Install按钮进行安装。即可将MSComm控件引入到Delphi 6.0中。 (3)在编程使用中,直接打开ActiveX控件,选取TMSComm控件,放在窗体上,右键选取Properties,出现如图4所示的属性窗口,设置其属性即可。其使用方法与Delphi其它控件相同。 3、MSComm控件相关属性 MSComm控件有27个属性,其中一部分可缺省设置为不用,常用的属性如下: (1)CommPort:设置串行口选择。缺省值为1,选择为COM1;若赋值为2,则选择COM2。 (2)PortOpen:设置通信端的状态。设置为True时,打开端口;设置为False时,关闭端口并清除接收和发送缓冲区。 (3)Settings:设置通信时的波特率、奇偶校验、停止位参数。 (4)Inputlen:设置每次从接收缓冲区读取的字符个数。缺省值为0,表示将读取接收缓冲区中全部内容;若设置值为n(n>0),表示每次将读取接收缓冲区中的n个字符。 (5)InputMode:设置接收数据的类型。 (6)InBufferCount:设置返回接收缓冲区中等待被读取的字符个数。初始化程序时,InBufferCount设置值为0,表示清除接收缓冲区。 (7)OutBufferCount:设置返回发送缓冲区中等待发送的字符个数。设置值为0时,表示清除发送缓冲区。 (8)InBufferSize:设置接收缓冲区中的长度,缺省值为1024字节。 (9)OutBufferSize:设置发送缓冲区中的长度,缺省值为512字节。 (10)Rthreshold:设置表示在触发OnComm事件之前接收缓冲区允许有的字符数。缺省值为0,表示即使接收缓冲区有字符时,也不会触发OnComm事件;设置值为n(n>0)时,表示接收缓冲区每有n个字符时,就会触发一次OnComm事件。 (11)Sthreshold:设置表示在触发OnComm事件之前发送缓冲区允许有的字符数。缺省值为0,表示不触发OnComm事件;设置值为n(n>0)时,表示发送缓冲区每有n个字符时,就会触发一次OnComm事件。 (12)TREnable:设置DTR的有效性。 (13)RTSEnable:设置RTS的有效性。 (14)Input:从串口读取数据。 (15)Output:向串口写入数据。 四、编程实例 1、编程原理 本文采用Delphi 6.0语言作为软件开发平台,主要是因为Delphi在图形处理和数据库管理等方面具有较强的功能,且代码编译速度快,控件使用方便。本例将介绍在Delphi 6.0编程环境下,如何实现从PLCDM0000读取两个字节(一个PLC通道单元)的内容到数据存储区PLCData中,并通过帧数据校验函数来校验数据发送和接收是否准确。? 假设PLC的节点号为00,那么上位机的命令为:? “@00RR00000001F2F1*/r” 而PLC的应答为:? “@00RR00D0D1D2D3P2P1*/r” 其中:F2、F1是上位机发送命令的校验码,D0D1D2D3是上位机要读取的数据, P2、P1是PLC响应命令的校验码。 2、程序实现 (1)启动Delphi 6.0,生成应用窗体,命名为Form1。在窗体上添加通信开始按钮BtnR、通信停止按钮BtnT,并在ActiveX控件栏选中MSComm控件,插入窗体,命名为MSComm1。 (2)为窗体添加FormCreate事件,进行串口初始化,代码如下:? 也可右键单击MSComm控件,选取Properties,出现如图4所示的属性设置窗口,按上述赋值进行属性设置即可。? (3)编写帧校验函数:? 五、小结 本通信方案由于采用了ActiveX控件和面向对象的编程方法,因而具有封装性、继承性、多态性等多方面的特性,从而在工业控制的小型监控系统中有着广阔的应用前景。该方案已在河南信阳火电厂输煤系统中得到了应用,实际运行表明,该通信方式简单、稳定,取得了令人满意的效果。
http://www.chinakong.net/artical/1322.htm 在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()等函数操作串口。? 使用这两种方法进行编程,既繁琐复杂,又不直观。而通过从Visual Basic或Visual C++中引进ActiveX控件MSComm,编程者只需通过改变MSComm控件的属性设置和编写相应的初始化程序,就能在Windows环境下简单方便地实现不同用户的串行通信要求。 2、引入MSComm控件的方法 (1)进入Delphi 6.0编程环境下,在菜单项中选中Component/Import ActiveX选项,将出现ActiveX控件导入窗口(如图3); (2)在其中选中Microsoft Comm Control 6.0(Version 1.1),并按需要选定Palette pages、unit dir name、Search path值(一般取默认值),最后选择Install按钮进行安装。即可将MSComm控件引入到Delphi 6.0中。 (3)在编程使用中,直接打开ActiveX控件,选取TMSComm控件,放在窗体上,右键选取Properties,出现如图4所示的属性窗口,设置其属性即可。其使用方法与Delphi其它控件相同。 3、MSComm控件相关属性 MSComm控件有27个属性,其中一部分可缺省设置为不用,常用的属性如下: (1)CommPort:设置串行口选择。缺省值为1,选择为COM1;若赋值为2,则选择COM2。 (2)PortOpen:设置通信端的状态。设置为True时,打开端口;设置为False时,关闭端口并清除接收和发送缓冲区。 (3)Settings:设置通信时的波特率、奇偶校验、停止位参数。 (4)Inputlen:设置每次从接收缓冲区读取的字符个数。缺省值为0,表示将读取接收缓冲区中全部内容;若设置值为n(n>0),表示每次将读取接收缓冲区中的n个字符。 (5)InputMode:设置接收数据的类型。 (6)InBufferCount:设置返回接收缓冲区中等待被读取的字符个数。初始化程序时,InBufferCount设置值为0,表示清除接收缓冲区。 (7)OutBufferCount:设置返回发送缓冲区中等待发送的字符个数。设置值为0时,表示清除发送缓冲区。 (8)InBufferSize:设置接收缓冲区中的长度,缺省值为1024字节。 (9)OutBufferSize:设置发送缓冲区中的长度,缺省值为512字节。 (10)Rthreshold:设置表示在触发OnComm事件之前接收缓冲区允许有的字符数。缺省值为0,表示即使接收缓冲区有字符时,也不会触发OnComm事件;设置值为n(n>0)时,表示接收缓冲区每有n个字符时,就会触发一次OnComm事件。 (11)Sthreshold:设置表示在触发OnComm事件之前发送缓冲区允许有的字符数。缺省值为0,表示不触发OnComm事件;设置值为n(n>0)时,表示发送缓冲区每有n个字符时,就会触发一次OnComm事件。 (12)TREnable:设置DTR的有效性。 (13)RTSEnable:设置RTS的有效性。 (14)Input:从串口读取数据。 (15)Output:向串口写入数据。 四、编程实例 1、编程原理 本文采用Delphi 6.0语言作为软件开发平台,主要是因为Delphi在图形处理和数据库管理等方面具有较强的功能,且代码编译速度快,控件使用方便。本例将介绍在Delphi 6.0编程环境下,如何实现从PLCDM0000读取两个字节(一个PLC通道单元)的内容到数据存储区PLCData中,并通过帧数据校验函数来校验数据发送和接收是否准确。? 假设PLC的节点号为00,那么上位机的命令为:? “@00RR00000001F2F1*/r” 而PLC的应答为:? “@00RR00D0D1D2D3P2P1*/r” 其中:F2、F1是上位机发送命令的校验码,D0D1D2D3是上位机要读取的数据, P2、P1是PLC响应命令的校验码。 2、程序实现 (1)启动Delphi 6.0,生成应用窗体,命名为Form1。在窗体上添加通信开始按钮BtnR、通信停止按钮BtnT,并在ActiveX控件栏选中MSComm控件,插入窗体,命名为MSComm1。 (2)为窗体添加FormCreate事件,进行串口初始化,代码如下:? 也可右键单击MSComm控件,选取Properties,出现如图4所示的属性设置窗口,按上述赋值进行属性设置即可。? (3)编写帧校验函数:? 五、小结 本通信方案由于采用了ActiveX控件和面向对象的编程方法,因而具有封装性、继承性、多态性等多方面的特性,从而在工业控制的小型监控系统中有着广阔的应用前景。该方案已在河南信阳火电厂输煤系统中得到了应用,实际运行表明,该通信方式简单、稳定,取得了令人满意的效果。
W weitajn Unregistered / Unconfirmed GUEST, unregistred user! 2003-01-22 #12 我做了很多这方面的东东,比如像PLC及其它综自设备.其实通信形式无非就这么几种,串口(包括RS232/485/422),以太网,CAN网,LONWORDKS网,或者是直接插数据采集卡,这些要么有相应的通用组件要么有DLL让你直接调用.其实最终还是编写通讯协议稍微有点麻烦.当然也有比较简单的协议!
我做了很多这方面的东东,比如像PLC及其它综自设备.其实通信形式无非就这么几种,串口(包括RS232/485/422),以太网,CAN网,LONWORDKS网,或者是直接插数据采集卡,这些要么有相应的通用组件要么有DLL让你直接调用.其实最终还是编写通讯协议稍微有点麻烦.当然也有比较简单的协议!