一种读写PLC数据的方法和装置与流程

文档序号:14425094阅读:491来源:国知局
本发明属于自动化控制领域,具体涉及一种读写plc数据的方法和装置。
背景技术
:由于plc具有可编程,控制稳定性好的优点,其被广泛应用于工业领域。在大型的工业自动化控制中,往往采用分级控制,下级使用plc,主要用于顺序控制、逻辑控制等,上级使用上位机,主要用于数据储存、报表分析、工艺优化等。二者之间采用高速以太网相连进行数据通信。西门子plc在大型自动化系统中占有率非常高,为此采用上位机读写西门子plc数据是一个经常使用到的技术。目前主流的技术包括:(1)基于opc协议;(2)通过tcp/ip协议,通过socket连接进行报文通讯。其中技术(1)需要在上位机上需要安装opcserver,其价格昂贵,且编程与配置复杂,且占用系统资源比较大,移植不灵活。技术(2)需要在plc上进行专用的通讯编程,有一定技术门槛,另外双方约定好通讯报文后,后期改动比较复杂,程序不够灵活。有鉴于此,现有技术提出了采用开源sharp7组件实现上位机读写plc数据的方法:直接利用现有的s7client相关函数实现上位机对plc的数据读取。包括:connetto(ipaddress,rack,slot):连接到目标plcreadarea(area,dbnumber,start,amount,wordlen,byte[]buffer):读取数据writearea(area,dbnumber,start,amount,wordlen,byte[]buffer):写入数据disconnect():关闭连接上述方法虽然成本低廉、无需编程、配置简单、占用系统资源小且程序移植灵活,但是其读写速度依然较慢,不能实现高效的读写。技术实现要素:针对现有技术中存在的缺陷,本发明的目的是提供一种读写plc数据的方法,用于上位机和西门子plc通信中,在保证低成本、编程与配置简单、占用系统资源小且程序移植灵活等特点的同时,还具有快速读写的特点。为达到以上目的,本发明采用的技术方案是:一种读写plc数据的方法,包括以下步骤:s01,获取已配置的需要读写的数据点信息,其中所述数据点信息至少包括:id号、数据块编号、plc数据开始地址、plc数据类型以及pc数据类型;s02,按数据块编号对已获取的所有数据点信息进行分组;s03,对各分组的数据点信息按照plc数据开始地址进行排列;s04,对各组数据点信息按预设规则进行分区,保证各区的数据密度d满足分区密度要求;s05,使用sharp7,在s7multivar中添加各个分区,加入读写队列,执行读写命令。进一步的,所述分区密度要求包括:各区的分区密度d不小于预设的最小密度dmin,计算数据密度d的方法包括:d=c/l其中,c表示区内所有配置占用的字节数;l表示区总长度。进一步的,对各组数据进行分区的方法包括:若一组数据中包含n条数据点信息,则依次判断前n-m条数据点信息是否满足所述分区密度要求,若满足则将对应的数据点信息配置成一个组,其余的信息重新按照分区方法进行判断,其中n为正整数,m的值从0取到n-1。进一步的,在s7multivar中添加各个分区,加入读写队列后,还包括以下步骤:若需要读取plc数据,则从缓冲区获得所有区的字节流,采用sharp7根据plc数据类型得到对应的数据,并转换为pc数据类型,然后再执行读命令;或者,若需要写入plc数据,则将pc数据类型转化为字节流,然后再执行写命令,将字节流写入缓冲区。进一步的,对各分组的数据点信息按照plc数据开始地址进行升序或降序排列。相应的,本发明还公开了一种读写plc数据的装置,包括信息获取模块、信息分组模块、信息排列模块、信息分区模块、信息读写模块,其中:信息获取模块,用于获取已配置的需要读写的数据点信息,其中所述数据点信息至少包括:id号、数据块编号、plc数据开始地址、plc数据类型以及pc数据类型;信息分组模块,用于按数据块编号对已获取的所有数据点信息进行分组;信息排列模块,用于对各分组的数据点信息按照plc数据开始地址进行排列;信息分区模块,用于对各组数据点信息按预设规则进行分区,保证各区的数据密度d满足分区密度要求;信息读写模块,用于使用sharp7,在s7multivar中添加各个分区,加入读写队列,执行读写命令。本发明与现有技术相比的有益效果在于:本发明对获取的需要读写的数据点信息按照预定义的规则进行分组、分区,即通过设置数据密度d的方式找到地址连在一起的数据点信息,可以实现数据的批量读写,极大提高了读写效率。另外,本发明基于免费的sharp7组件,无需采购昂贵的opcserver就能与plc自由通信,节省了成本。并且本发明无需对plc端进行任何编程,系统占有率低,上位机就可以读写plc数据,这样在上位机开发的系统能更灵活。附图说明图1是本发明一种读取plc的读写方法流程图。图2是本发明一种读取plc的读写装置的结构示意图。具体实施方式为了使本发明的目的、技术方案以及优点更加清楚明白,下面结合实施例进行进一步详细说明。应该理解的是,此实施例仅仅是本发明应用的一个方面,并不用于限定本发明。在一些实施例中,图1示出了一种读取plc的读写方法,包括以下步骤:s101,获取已配置的需要读写的数据点信息,其中所述数据点信息包括:id号、数据块编号、plc数据开始地址、plc数据类型、pc数据类型等。当plc数据类型为bit时,还包括remark字段。数据点信息的具体内容如表1所示。表1序号字段名称说明1id唯一编号,实施例选用自动生成的guid。2dbnumber数据块编号3startplc数据开始地址4plcdatatypeplc数据类型5pcdatatypepc数据类型6remark仅当plc数据类型为bit时,此处填第几位其中plcdatatype包括bit,byte,char,word,int,dword,dint,real。其占用的字节数分别是1/8,1,1,2,2,4,4,4。其中pcdatatype包括bool,char,short,int,float等。s102,按数据块编号对已获取的所有数据点信息进行分组。s103,对各分组的数据点信息按照plc数据开始地址进行排列。比如按照升序或降序排列。s104,对各组数据点信息按预设规则进行分区,保证各区的数据密度d满足分区密度要求。数据密度d是衡量数据地址是否连在一起的指标,为了实现数据点信息的批量读取,需要将地址连在一起的数据点信息分为一组。数据密度d的最小阈值dmin必须小于1。经过多次试验,数据密度d的最小阈值dmin优选为0.49。计算数据密度d的公式(1)如下所示:d=c/l(1)其中,c表示区内所有配置占用的字节数;l表示区总长度。可以理解的,当c为小数时(plc数据类型包括bit),其值选取为大于它的最小正整数。对于单个数据点信息组成的区,其数据密度为1。对各组数据进行分区的方法包括:若一组数据中包含n条数据点信息,则依次判断前n-m条数据点信息是否满足所述分区密度要求,若满足则将对应的数据点信息配置成一个组,其余的信息重新按照分区方法进行判断,其中n为正整数,m的值从0取到n-1。现举出一列做更详细的说明。比如,在某钢厂,待读取的plc型号是s7-400,rack=0,slot=3,在按数据块编号对已获取的所有数据点信息进行分组后,以待读取的块号是12001的所有数据为例进行说明。对各分组的数据点信息按照plc数据开始地址进行升序排列,可以得到如表2所示的需要读取的数据。表2开始地址plc数据类型连续数据个数说明0real88工业仪表测量值938int2生产状态944int2生产状态950int2生产状态956int2生产状态962int2生产状态968int2生产状态974int2生产状态980int2生产状态986int2生产状态992int2生产状态998int2生产状态1004int2生产状态1010int2生产状态1016int2生产状态1022int2生产状态从该表中可知,需要采集的数据包括88个real类型数据,30个int类型数据。共118个数据点信息。故n=118,m的取值为0到117。假设选取的最小密度dmin为0.66。当m=0时,d=412/1026=0.402;当m=1时,d=410/1024=0.400;依次类推,当m=29时,d=354/940=0.377;当m=30时,d=352/352=1.000;此时满足数据密度要求。那么则前88个数据点信息分为一个区。剩余的数据点(后30个),重新进行分区判断。此时n=30,m取值为0到29,当m=0时,d=60/88=0.682,满足数据密度要求。则这30个点也组成一个分区。s105,使用sharp7,在s7multivar中添加各个分区,加入读写队列,执行读写命令。具体的,在s7multivar中添加各个分区,加入读写队列后,还包括以下步骤:若需要读取plc数据,则从缓冲区获得所有区的字节流,采用sharp7根据plc数据类型得到对应的数据,并转换为pc数据类型,然后再执行读命令;或者,若需要写入plc数据,则将pc数据类型转化为字节流,然后再执行写命令,将字节流写入缓冲区。利用本发明对表2中的数据读取100次,并多次统计(仅仅读取为字节流,不包括数据类型转换的时间),取平均值得到的读取时间为:1201ms。而利用
背景技术
中提到s7client相关函数实现上位机对plc的数据读取,读取同样的数据,读取同样的次数,取平均值得到的读取时间为:108091ms。由实验数据可知,本发明对获取的需要读写的数据点信息按照预定义的规则进行分组、分区,即通过设置数据密度d的方式找到地址连在一起的数据点信息,可以实现数据的批量读写,极大提高了读写效率。另外,本发明基于免费的sharp7组件,无需采购昂贵的opcserver就能与plc自由通信,节省了成本。并且本发明无需对plc端进行任何编程,系统占有率低,上位机就可以读写plc数据,这样在上位机开发的系统能更灵活。相应的,本发明还公开了一种读写plc数据的装置,包括:信息获取模块10、信息分组模块20、信息排列模块30、信息分区模块40、信息读写模块50,其中:信息获取模块10,用于获取已配置的需要读写的数据点信息,其中所述数据点信息至少包括:id号、数据块编号、plc数据开始地址、plc数据类型以及pc数据类型。当plc数据类型为bit时,还包括remark字段。数据点信息的具体内容如表1所示,在此不再赘述。信息分组模块20,用于按数据块编号对已获取的所有数据点信息进行分组。信息排列模块30,用于对各分组的数据点信息按照plc数据开始地址进行排列。比如按照升序或降序排列。信息分区模块40,用于对各组数据点信息按预设规则进行分区,保证各区的数据密度d满足分区密度要求。数据密度d是衡量数据地址是否连在一起的指标,为了实现数据点信息的批量读取,需要将地址连在一起的数据点信息分为一组。数据密度d的最小阈值dmin必须小于1。经过多次试验,数据密度d的最小阈值dmin优选为0.49。计算数据密度d的公式(1)如下所示:d=c/l(1)其中,c表示区内所有配置占用的字节数;l表示区总长度。可以理解的,当c为小数时(plc数据类型包括bit),其值选取为大于它的最小正整数。对于单个数据点信息组成的区,其数据密度为1。信息分区模块40对各组数据进行分区的方法包括:若一组数据中包含n条数据点信息,则依次判断前n-m条数据点信息是否满足所述分区密度要求,若满足则将对应的数据点信息配置成一个组,其余的信息重新按照分区方法进行判断,其中n为正整数,m的值从0取到n-1。现举出一列做更详细的说明。比如,在某钢厂,待读取的plc型号是s7-400,rack=0,slot=3,在按数据块编号对已获取的所有数据点信息进行分组后,以待读取的块号是12001的所有数据为例进行说明。对各分组的数据点信息按照plc数据开始地址进行升序排列,可以得到如表2所示的需要读取的数据。从该表中可知,需要采集的数据包括88个real类型数据,30个int类型数据。共118个数据点信息。故n=118,m的取值为0到117。假设选取的最小密度dmin为0.66。当m=0时,d=412/1026=0.402;当m=1时,d=410/1024=0.400;依次类推,当m=29时,d=354/940=0.377;当m=30时,d=352/352=1.000;此时满足数据密度要求。那么则前88个数据点信息分为一个区。剩余的数据点(后30个),重新进行分区判断。此时n=30,m取值为0到29,当m=0时,d=60/88=0.682,满足数据密度要求。则这30个点也组成一个分区。信息读写模块50,用于使用sharp7,在s7multivar中添加各个分区,加入读写队列,执行读写命令。具体的,在s7multivar中添加各个分区,加入读写队列后,还包括以下步骤:若需要读取plc数据,则从缓冲区获得所有区的字节流,采用sharp7根据plc数据类型得到对应的数据,并转换为pc数据类型,然后再执行读命令;或者,若需要写入plc数据,则将pc数据类型转化为字节流,然后再执行写命令,将字节流写入缓冲区。利用本发明对表2中的数据读取100次,并多次统计(仅仅读取为字节流,不包括数据类型转换的时间),取平均值得到的读取时间为:1201ms。而利用
背景技术
中提到s7client相关函数实现上位机对plc的数据读取,读取同样的数据,读取同样的次数,取平均值得到的读取时间为:108091ms。由实验数据可知,本发明对获取的需要读写的数据点信息按照预定义的规则进行分组、分区,即通过设置数据密度d的方式找到地址连在一起的数据点信息,可以实现数据的批量读写,极大提高了读写效率。另外,本发明基于免费的sharp7组件,无需采购昂贵的opcserver就能与plc自由通信,节省了成本。并且本发明无需对plc端进行任何编程,系统占有率低,上位机就可以读写plc数据,这样在上位机开发的系统能更灵活。本领域技术人员应该明白,本发明所述的方法和系统并不限于具体实施方式中所述的实施例,上面的具体描述只是为了解释本发明的目的,并非用于限制本发明。本领域技术人员根据本发明的技术方案得出其他的实施方式,同样属于本发明的技术创新范围,本发明的保护范围由权利要求及其等同物限定。当前第1页12
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1