[发明专利]牛肉产品质量安全全程跟踪与追溯方法及系统无效

专利信息
申请号: 200710146336.9 申请日: 2007-09-06
公开(公告)号: CN101201928A 公开(公告)日: 2008-06-18
发明(设计)人: 赵春江;杨信廷;孙传恒;吉增涛;钱建平;刘学馨;韩啸 申请(专利权)人: 北京农业信息技术研究中心
主分类号: G06Q50/00 分类号: G06Q50/00;G06K17/00;A01K11/00
代理公司: 北京众合诚成知识产权代理有限公司 代理人: 黄家俊
地址: 100097*** 国省代码: 北京;11
权利要求书: 查看更多 说明书: 查看更多
摘要:
搜索关键词: 牛肉 产品质量 安全 全程 跟踪 追溯 方法 系统
【权利要求书】:

1.一种牛肉产品质量安全全程跟踪与追溯方法,其特征是把牛肉产品从养殖、屠宰、加工、销售四个阶段,对每一阶段的流程设计、个体标识方法及阶段质量信息管理:

A.养殖阶段

从牛犊出生的第一天开始,打上134.2KHz无源RFID耳标,做为肉牛个体身分的标识,通过手持式的读卡器可以读取标签的ID号码,同时详细记录肉牛品种、出生日期、出生地点和健康状况,通过专用手持式耳标扫描器,详细记录每一头牛的免疫、检疫、消毒信息以及饲料、饲料添加剂投入品和兽药的来源、名称、用量信息;同时对养殖场内牛只个体发病、诊疗、死亡和无害化处理情况实现电子化的跟踪处理:

养殖阶段采用畜禽标识和养殖档案编号设计为15位,标识代码由种类代码、行政区域代码、标识顺序号组成;

B.屠宰阶段

(a)宰前检疫管理:包括检疫合格证明、运载工具消毒证明、宰前检疫报告书,准宰通知单记录,对符合条件的牛,记录旧耳标号,并输入屠宰子系统进行存储;

(b)生产线管理:肉牛进入屠宰线到产品出场全过程,经历了牵入倒挂、屠宰放血、后蹄转轨、剥皮开膛、去头前蹄、净腔劈半、修整过秤、评级入库等环节,设计了从养殖阶段的“旧耳标”与屠宰阶段的“新耳标”的转换,并在屠宰线挂钩上安装RFID标签,实现肉牛屠宰过程标识与物品对应,同时设计数据库接口标准,开发了肉牛溯源数据和屠宰场产品标识数据转换程序模块,实现屠宰加工全过程的肉牛产品部位编号对应;

(c)标识方法:以同一采购员在同一天采购的牛作为一个批次,生成一个批次号,批次号采用流水号生成,采用6位标识时间标识如070316,并依次增加,顺序号采用流水号标识001三位标识,挂钩RFID标签采用915M的UHF标签实现,支持ISO18000-6B和EPC-Gen2两种协议,在称胴体重时依次写入新的耳标号信息,并一直到最终的加工线,挂钩内写入的信息就是每次的新耳标号信息;

C.分割阶段

经过15℃以下的恒温间中排酸后,牛胴体进入分割阶段,从二分体到四分体而后进入分割线,分割为不同牛肉产品,采用同时实现嵌入式电子秤条码打印程序,实现RFID标签到条码标签的转变及分割产品与条码打印的有机结合;在分割车间,读取挂钩RFID标号后,系统关联牛的耳标号,据成块、成批对应关系,生成相应的条码编号,生成每一固定分割部位的成块条码和同一批次的成批条码,采用UDP协议,经无线网络把数据格式下载到条码电子秤上,实现条码电子秤称重与打印的一体化,并且将称重信息实时上传到PC机上进行重量的自动记录;

根据牛肉的烹饪用途将剔骨后牛肉分割成数十种部位,常见成块部位名称如上脑、外脊、眼肉,外肌,里肌,针扒,脍扒,龙尾扒,林肉,牛展,成批分割如肥牛3号、肥牛负3号,腹肉,通过在2条生产线上安装无线电子称实现数据交互,通过电子秤和电脑的同步更新,实现重量存储和条码自动生成打印,根据客户需求进行真空包装;

成块产品的条码标识采用符全国际EAN-UCC编码规则的GTIN+耳标号构成,排酸后的胴体进入加工分割流水线后,RFID挂钩信息转换到电子称上,根据先进先出的设计原则,实现单体产品的追溯;

成批产品的标识采用GTIN+批次号构成,批次号采用生产日期确定,对于两批屠宰同一批分割的牛肉以相邻原则确定屠宰日期;

无线数据包传递格式采用UDP协议,经4001端口在电子秤与PC之间传输;

D.销售阶段

分割产品数据每天以XML的数据格式保存,并以Web Services方式上传到中心服务器,本发明通过“LF RFID电子耳标”——“UHF RFID挂钩”——“条码”的对应关系,最终实现了牛只个体信息与牛肉产品信息的对应,在销售阶段,消费者可以根据生成的条码采用网站、POS机和短信三种方式进行追溯,就可以查出牛从出生到销售的所有信息,包括牛的出生地、出生日期、免疫情况、防疫情况,屠宰地、屠宰检疫以及产品检疫等详细情况,真正实现“从农场到餐桌”的全程控制管理模式。

2.一种实现权利要求1的牛肉产品质量安全全程跟踪与追溯系统,其特征在于分为肉牛养殖管理子系统和屠宰加工子系统,包括

I系统设计的基本架构

系统基于Net框架,采用三层架构体系,开发了权限的牛肉产品质量安全全程跟踪与追溯系统,系统采用组件式开发方法,分为肉牛养殖管理子系统和屠宰加工两个子系统:肉牛管理子系统包括基本信息管理、药物防疫、饲料投喂、养殖管理等功能,屠宰加工子系统括宰前检疫、耳标转换、胴体写入、产品检疫、条码传递、基础配置,同时系统具有智能的权限分级和良好的扩展性:

II系统的具体实现

系统以解决方案形式提供4个工程模块:

1、WinForm::数据表示层,主要作为与用户的接口,使用户能够更自然的与程序进行交互;

2、Bussiness Rules:业务逻辑层,主要目的是为了实现RFID和电子秤中数据的交换,与数据实体类中的数据进行交互:

3、Model:数据实体类,与数据表一一对应,通过数据实体类抽象数据结构:

4、Data:数据访问层,与数据实体一一对应,基本上一个数据访问类对应一个数据实体,通过对对数据实体属性的控制来实现数据的添加、更新、删除、与检索:

III支持硬件的设计与安装

a、基本的硬件组成

(1)电子耳标:养殖场所有的肉牛,从出生起就有低频(134.2KHz RFID)耳标作为其身份的识别;

(2)手持式阅读器:读取电子耳标的ID,由设备传给系统软件,实现电子耳标的管理;

(3)挂钩标签:在屠宰生产线上的每一挂钩上安装UHF 915M电子标签,写入对应的新耳标号;

(4)UHF读卡器:读取挂钩RFID标签,由系统将新耳标号写入挂钩的UHF RFID中;

(5)无线电子秤:接收上位机传入的数据包,并通过嵌入式条码生成程序,生成对应的条码;

b、通过牛肉产品质量安全追溯系统完成追溯的主要步骤

(1)耳标:采用134.2KHz无源RFID耳标

(2)耳标扫描器:采用手持式RFID信息采集器

(3)挂钩标签:采用UHF 915M电子标签

(4)读卡器:采用通用的UHF读卡器

(5)无线电子秤:采用加装有无线网即嵌入式条码电子秤;

完成操作的主要步骤包括:

---------从牛犊出生的第一天开始,打上134.2KHz无源RFID耳标,

--------通过手持式的读卡器将每头牛的对应信息保存到相应的数据库中,

---------从养殖场出厂的牛,经过运输到屠宰场过程中,凡经过其所有检疫的牛,记录旧耳标号,并输入屠宰子系统进行存储,

---------肉牛进入屠宰线前,用条码阅读器读取相应牛的耳标号,经过程序自动生成屠宰阶段的“新耳标”号,保存至相应的数据库,

新耳标是按批次加顺序号生成的,按同一天同一采购员作为一个批次,如20070821001作为2007年8月21日第一个采购员采购的牛作为一个批次,并把其采购的第顺序编号,如第一头牛的新耳标号为20070821001001,其余的依此类推,牛在屠宰线上是依次排列的,在称胴体重时,按顺序依次把新耳标号写入。在写入时,检洲标签的类型、数量,当检测到2个时,尝试写入20次,直到写入成功为止。根据试验,当写入距离在35cm以内时,成功率在98%以上;

---------肉牛进入屠宰线,将牛牵入倒挂到装安装RFID标签的挂钩上,经屠宰放血、后蹄转轨、剥皮开膛、去头前蹄、净腔劈半后,在称重时在钩子的标签内写入该牛的新耳标号,实现每片肉都有相对应的耳标号;

--------牛胴体进入分割阶段,读取挂钩RFID标号后,系统根据分割部位按1∶2生成对应的成块数据和n∶1成批数据,存入数据库;

--------牛在流水线上都是依次排序的,因此与数据库中的数据成对应关系,采用UDP协议,经无线网络把按一定的数据格式把数据库中的数据下载到条码电子秤上,实现条码电子秤称重与打印的一体化,并且将称重信息实时上传到PC机上进行重量的自动记录;

---------分割产品数据每天以XML的数据格式保存,并以Web Services方式上传到中心服务器。以实现多家企业追溯数据的聚合。以便消费者可以根据生成的条码采用网站、POS机和短信三种方式进行追溯,得到相应信息;

C、系统软件的安装对硬件的要求

●CPU在奔腾1V以上

●内存512MB以上

●20G以上硬盘

●操作系统:Microsoft Windows Server 2003、Windows XP Professional Edition、Windows 2000(推荐Me)、Windows 98、Microsoft  Windows XP Home Service Pack 3或更高版本)、WindowsMillennium Edition Windows NT 4.0(需要Service Pack 6a)。

●.net 2.0 framework

通过以上相关硬件设备,加上系统软件作为核心支持,最终实现牛个体识别的自动化,

通过以上软硬件设备,最终实现了牛肉产品全程自动化,其中,实现牛肉从“旧耳标到新耳标转换”模块、“挂钩耳标写入”模块、“条码数据通讯模块”程序模块如下:

“旧耳标到新耳标转换”模块

                    string batch=label2.Text;

                    if(batch==″Wrong″)

                    {

                        MessageBox.Show(″您还没有购买牛!″);

                        return;

                    }

                    string num=iIden_Numb.Text.PadLeft(3,′0′);

                    ht.Add(″sIden_Batch″,batch);

                    string sIden_New=batch+num;

                    ht.Add(″sIden_New″,sIden_New);

                    ht.Add(″sIden_QuanNum″,label24.Text);

                    ht.Add(″iIden_Tooth″,Convert.ToSingle(iIden_Tooth.Text));

                    ht.Add(″sIden_source″,label22.Text);

“挂钩耳标写入”模块

        if(sBoWe_New.Text==″″)

             {

                 MessageBox.Show(″请选择要写入的编号″);

                 return;

}

 bool_continue=true;

try

 {

    if(!sp.IsOpen)

    {

       sp.Open();

    }

}

catch(Exception ex)

{

       MessageBox.Show(ex.ToString());

}

while(_continue)

{

       sp.Write(ReadCommand);

       statusBarl.Text=″正在检测标签..........″;

       Thread.Sleep(300);

       intBytes=sp.BytesToRead;

       while(intBytes==0)

       {

           sp.Write(ReadCommand);

       }

       byte[]bytes=new byte[intBytes];

       sp.Read(bytes,0,intBytes);

       string r=System.Text.Encoding.Default.GetString(bytes);

       if(!TagResultOK.Equals(r))

       {

            ArrayList taglist=TagNum(r);

            statusBarl.Text=″检测到″+taglist.Count+″个标签″;

            MessageBox.Show(″检测到″+taglist.Count+″个标签″);

            if(taglist.Count==2)

{

    int i=0;

    while(i<taglist.Count)

    {

        //division the type of the tag

        if(taglist[0].ToString().Length!=taglist[1].ToString().Length)

        {

            MessageBox.Show(″标签类型不一致!请重试″);

            return;

        }

        else if(taglist[i].ToString().Length==Iso6BLength)

        {

            statusBarl.Text=″标签类型为IS018600-6B″;

            Thread.Sleep(300);

            //MessageBox.Show(″标签类型为IS018600 6B″);

            if(writetag(sBoWe New.Text,taglist[i].ToString()))

                i++;

            else

            {

                MessageBox.Show(″标签过早移开或已损坏!″);

                return;

            }

            //break;

        }

        else if(taglist[i].ToString().Length==EpcIDLength)

        {

            statusBarl.Text=″标签类型为EPC Gen2″;

            Thread.Sleep(300);

            //MessageBox.Show(″标签类型为EPC Gen2″);

            if(writeepctag(sBoWe New.Text,taglist[i]ToString()))

            i++;

                               else

                               {

                                    MessageBox.Show(″标签过早移开或已损坏!″);

                                    return;

                                }

                                    //break;

                            }

                            //sp.Write(″write string(8,12)=″+sBoWe_New.Text-1″″);

                            //sp.Write(″read string(8,12)″);

                        }

                        MessageBox.Show(″写入成功″);

                        continue=false;

                    }

                }

        }

“条码数据通讯模块”模块

PLU(Price Lock Up)结构:

//****************包头Packet Header Struct*****************************

typedef struct{

        unsigned char cSTART;           //包起始标志0×2

        unsigned short nTotalLength;//totallength=sizeof(cmdheader)+pagenumber*pagelength

        unsigned short nPageNum;        //包的帧数  //sizeof(cmdheader)=8

        unsigned short pagelength;      //每帧的大小

        unsigned char cmdrsp;           //命令和响应的标志CMD=0 RSP=1

        unsigned short command;         //命令号如:207

        unsigned short control;         //控制类型如:读取、写入、删除等

        unsigned short departno;        //部门号总是为1

        unsigned char deviceno;         //秤号总是为1

}  command_header;

//****************************************************************************

//************PLU数据结构(ARTICLE FILE)***********************************

//包头中的命令码=207

typedef struct

{

         unsigned long nPluNo;                      //生产部位

         char          cItemNo[13];                 //企业标识

         char          cPluDesc[28];                //部位名称

         char          dummySpace;                  //未使用

         long int      nPrice;                      //单价默认填0

         unsigned char nVAT;                        //税号默认填0

         unsigned char nTare;                       //皮重号默认填0

         unsigned short SA_Nr;                      //默认填0

         long          nFixedWgt;                   //默认填0

         unsigned shortnGroupNo;                    //默认填0

         struct

         {

                 unsigned short pricemethod:1;      //默认填1

                 unsigned short priceoverwrite:1;

                 unsigned short nDummy1:3;          //未使用

                 unsigned short dicount:1;

                 unsigned short nDummy2:10;         //未使用

         }Flag;

         unsigned shortnBestByDateOff;//取12位耳标号后6位并转为整数除以1000的整数部分

(XXX)

         unsigned shortnSellByDateOff;//取12位耳标号后6位并转为整数取余1000的部分(YYY)

         unsigned short nExtraTxtNo;         //默认填0

}plu_data_207_bin;

  public byte[]Create_Header(command_header head_bin,plu_data_207_bin plu_recv_bin)

         {

              int calcLen=sizeof(command_header)+sizeof(plu_data_207_bin);//0×02

              byte[]buf=new byte[calcLen+3];//0×06+CRC

              for(inti=0;i<buf.Length;i++){buf[i]=0×00;}

              buf[0]=0×06;

              head_bin.cmdrsp=0×01;

 //find plu and fill struct

 //生产部位

 uint nPluNo=plu_recv_bin.nPluNo;

 object[]plulnfo=new object[5];

 plulnfo=DataOperation.Data.GetPluInfol(nPluNo.ToString());

 //MessageBox.Show(nPluNo.ToString());

 if(pluInfo==null)

{

    head_bin.cSTART=0×00;

}

else

{

    head_bin.cSTART=0×02;

    //企业标识

    string sItemNo=pluInfo[4].ToString();

    while(sItemNo.Length<13)

    sItemNo=″0″+sItemNo;

    //sItemNo.

    fixed(byte*parr=System.Text.Encoding.Default.GetBytes(sItemNo))

    {plu_recv_bin.cItemNo=*((plu_ItemNo*)parr);}

    //部位名称

    string sPluName=pluInfo[2].ToString();

    int size=((byte[])System.Text.Encoding.Default.GetBytes(sPluNamc)).Length;

    while(size<28)

    {

        sPluName=sPluName+″″;

        size+=2;

    }

    fixed(byte*parr=System.Text.Encoding.Default.GetBytes(sPluName))

    { plu_recv_bin.cPluDesc=*((plu_PluDesc*)parr);}

    //分解耳标号

    string us_New_Ear=pluInfo[3].ToStting();

        byte ne1=Convert.ToByte(us_New_Ear.Substring(0,2));

        byte ne2=Convert.ToByte(us_New_Ear.Substring(2,2));

        byte ne3=Convert.ToByte(us_New_Ear.Substring(4,2));

        ushort ne4=(ushort)Convert.ToInt16(us_New_Ear.Substring(6,3));

        ushort ne5=(ushort)Convert.ToInt16(us_New_Ear.Substring(9,3));

        //耳标号的年月日如20991231

        plu_recv_bin.yy=ne1;

        plu_recv_bin.mm=ne2;

        plu_recv_bin.dd=ne3;

        //耳标号的后6位xxxyyy(如123456)

        plu_recv_bin.nBestByDateOff=ne4;//xxx

        plu_recv_bin.nSeilByDateOff=ne5;//yyy

        plu_recv_bin.nPrice=100;//price

        plu_recv_bin.nExtraTxtNo=0×00;

        //convert to buf

        fixed(byte*parr=&buf[1])

        {

            *((command_header*)parr)=head_bin;

        }

        fixed(byte*part=&but[16])

        {

            *((plu_data_207_bin*)parr)=plu_recv_bin;

        }

        //calc CRC

        Crc16 crc16=new Crc16();

        ushort m=(ushort)(crc16.ComputeChecksum(buf,2,calcLen-1));

        buf[calcLen+1]=Convert.ToByte(m/0×100);

        buf[calcLen+2]=Convert.ToByte(m%0×100);

        plu_id=(int)plulnfo[0];

    }

        return buf;

}

下载完整专利技术内容需要扣除积分,VIP会员可以免费下载。

该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于北京农业信息技术研究中心,未经北京农业信息技术研究中心许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服

本文链接:http://www.vipzhuanli.com/pat/books/200710146336.9/1.html,转载请声明来源钻瓜专利网。

×

专利文献下载

说明:

1、专利原文基于中国国家知识产权局专利说明书;

2、支持发明专利 、实用新型专利、外观设计专利(升级中);

3、专利数据每周两次同步更新,支持Adobe PDF格式;

4、内容包括专利技术的结构示意图流程工艺图技术构造图

5、已全新升级为极速版,下载速度显著提升!欢迎使用!

请您登陆后,进行下载,点击【登陆】 【注册】

关于我们 寻求报道 投稿须知 广告合作 版权声明 网站地图 友情链接 企业标识 联系我们

钻瓜专利网在线咨询

周一至周五 9:00-18:00

咨询在线客服咨询在线客服
tel code back_top