首页 / 专利库 / 疗法 / 治疗 / 放血 / 牛肉产品质量安全全程跟踪与追溯方法及系统

肉产品质量安全全程跟踪与追溯方法及系统

阅读:638发布:2021-03-06

专利汇可以提供肉产品质量安全全程跟踪与追溯方法及系统专利检索,专利查询,专利分析的服务。并且本 发明 牛 肉产品 质量 安全全程 跟踪 与追溯方法及系统,属牛肉产品质量安全数字化范畴。本发明在肉牛养殖阶段采用134.2KHz的 电子 耳 标标识牛只个体,采用养殖管理子程序记录免疫、防疫和饲病情况;在屠宰阶段,程序实现养殖 耳标 到新耳标的转换;在 屠宰线 挂钩上装915M电子标签,在称胴体时将检测标签数量、类型并将“新耳标号”写入对应的挂钩标签;当胴体出排酸库进入分割线后,程序实现屠915M标签到条码的转换,并自动将数据经UDP协议无线方式下发到分割线的电子秤上,通过嵌入式条码打印程序,实现管理、控制、生产的有机集成。本发明将软 硬件 、低高频电子标签、条码与系统管理 软件 紧密结合,实现生产操作与标识管理的无缝集成,大大提高了工作效率。,下面是肉产品质量安全全程跟踪与追溯方法及系统专利的具体信息内容。

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或更高版本)、Windows Millennium 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;
}

说明书全文

技术领域

发明属于肉类产品全程跟踪与追溯技术领域,属于肉产品质量安全监控数字化范畴。

背景技术

我国的牛肉总产量已跃居到世界第三位,但由于肉牛业起步晚,安全管理上缺乏相应的协调、监控机 制,至今没有建立农、牧场生产——加工——流通——消费者完整的安全控制链条。目前规模化养牛场生 产管理仍以传统方式为主,繁育、饲养、迁徙、防疫、屠宰加工、销售等环节缺乏完整的信息,难以达到 安全、优质、高效与可持续化的要求,牛肉质量安全不容乐观。加入WTO以后,国际市场对中国牛肉产 品安全性不断设置绿色技术壁垒,使得原本具有优势的畜牧业处境尴尬,国内牛肉产品安全消费的呼声也 越来越高。
20世纪90年代以来,由于疯牛病(BSE)在欧洲的蔓延,欧洲在1997年提出了实施“从农(牧) 场到餐桌”的全过程质量控制模式;美国在2003年发生第一例疯牛病以后,决定建立全国牛的标识溯源 系统,并营建以网络数据库为主的质量可追溯信息管理系统,对饲养场、屠宰场、分割包装与储运等环节 进行监控,确保农畜产品的质量安全,并计划在全国强制实施,确保一旦发生疫情,能在48小时内追踪 到相关动物。
牛肉产品质量全程追溯体系建立分为从养殖场到屠宰场和从屠宰加工到销售两个阶段,关键在于个体 标识选型及三次编码转换衔接,如何实现养殖、屠宰、加工、销售各阶段信息的传承和编码转换是实现牛 肉产品全程追溯的关键所在;另一关键所在是如何实现生产流程操作与个体标识的无缝集成,以适应快速 流线生产的需求。加拿大、美国和欧盟等发达国家和地区均制定了标识、编码、数据管理等系列标准。 美国采用条形码与数字结合的编码标识,加拿大CCIA(加拿大标识管理机构)采用不同大小、不同颜色 的27种可读条形码标识和7种RFID(射频标识)对肉牛进行标识管理。
国内牛肉产品安全生产可追溯系统仅处于探索阶段,不能有效突破养殖阶段到屠宰加工阶段编码转换 技术壁垒,不能实现生产操作与标识管理的无缝集成。因此,建立综合公共卫生、动物卫生、食品安全的 肉牛全程质量追溯技术体系对于动物疫病控制、保护消费者安全、促进国际贸易,帮助牛肉生产企业规范 生产技术、提高效率,具有十分深远的现实意义。

发明内容

本发明在对肉牛生产企业进行大量调研的基础上,针对中国肉牛生产信息记录不完全,生产管理不规 范,产供销脱节,结合牛肉食品安全消费及优质牛肉出口国际市场的实际需要,抓住牛肉生产中繁育、饲 养、饲料与疫病防治、屠宰分割、产品检验、储运和销售各环节,借鉴国外先进经验与模式,提出了以个 体标标识、胴体挂钩标识和分割肉条码标识为标识主键,对饲养、屠宰分割、储运、销售全过程信息保 存与转换,有效地实现肉牛活体和分割肉对应,将饲养与屠宰分割紧密地连接起来管理控制于一体的方法; 并利用SQL Server 2000关系数据库和.NET数据平台,建立从肉牛全程质量安全跟踪与追溯信息管理系 统。
该发明采用分段设计思想,把肉牛到牛肉产品全程分成养殖、屠宰、加工和销售四大阶段(图1),采 用”低频(LF)134.2Khz RFID+超高频(UHF)915M RFID+条码(EAN-128)”的标识方法,在下一阶段提供上 一阶段的转换接口,从而达到肉牛个体与最终分割产品的一致,实现从养殖到餐桌的全程质量追溯。下面 本发明从养殖、屠宰、加工、销售四个阶段,详细说明每一阶段的流程设计、个体标识方法及阶段质量信 息管理。
1.养殖阶段
从牛犊出生的第一天开始,打上134.2KHz无源RFID耳标,做为肉牛个体身分的标识。通过手持式 的读卡器可以读取标签的ID号码,同时详细记录肉牛品种、出生日期、出生地点和健康状况等。通过专 用手持式耳标扫描器,可以详细记录每一头牛的免疫、检疫、消毒信息以及饲料、饲料添加剂等投入品和 兽药的来源、名称、用量等信息;同时对养殖场内牛只个体发病、诊疗、死亡和无害化处理情况也可实现 电子化的跟踪处理。
养殖阶段采用低频的134.2Khz RFID的耳标(图2)进行肉牛个体标识,采用农业部《畜禽标识和养 殖档案管理办法》编号设计采用15位设计,禽标识编码由畜禽种类代码、县级行政区域代码、标识顺序 号共15位数字及专用条码组成。编码形式为:种类代码(1位)+县级行政区域代码(6位)+标识顺序 号(8位)。
2.屠宰阶段
2.1宰前检疫管理
从养殖场出厂的牛,经过运输到过屠宰场,必须进行宰前检疫,包括检疫合格证明、运载工具消毒证 明、宰前检疫报告书,准宰通知单记录。为了获得档案信息和养殖生产过程的记录信息,对符合宰杀条件 的牛,记录旧耳标号,并输入屠宰子系统进行存储。
2.2生产线管理
肉牛进入屠宰线到产品出场全过程,经历了牵入倒挂、屠宰放血、后转轨、剥皮开膛、去头前蹄、 净腔劈半、修整过秤、评级入库等环节,为避免人为因素对产品追溯造成影响,设计了从养殖阶段的“旧 耳标”与屠宰阶段的“新耳标”的转换,并在屠宰线挂钩上安装RFID标签,实现肉牛屠宰过程标识与物 品对应,达到产品流程与信息定位的同步,同时设计数据库接口标准,开发了肉牛溯源数据和屠宰场产品 标识数据转换程序模,实现屠宰加工全过程的肉牛产品部位编号对应(图3)。
本发明从屠宰、加工环节紧密联系在一起的挂钩入手,采用RFID实现挂钩编号与肉牛耳标号的对应。 首先要实现牛养殖阶段旧耳号到新耳标号的转换,然后在屠宰阶段把新耳标号写入RFID。在称毛重前, 扫描记录肉牛养殖阶段的“旧耳标”,同时按批次对肉牛进行重新顺序编号,生成“新耳标”号;在称排 酸时,根据“先入先出”的原则,依次把“新耳标”号写入装有RFID标签的生产线的2个挂钩内,实现 编码的转换和实物与流程的对应。所有钩子加装RFID标签,并可循环利用。
2.3标识方法
标识方法:基于现存的养殖水平,耳标采用从旧耳标到新耳标编码转换方式实现。采用批次加数量 的管理方法。以同一采购员在同一天采购的牛作为一个批次,生成一个批次号,批次号采用流水号生成, 采用6位标识070316+001,并依次增加,顺序号采用流水号标识(001)三位标识(图4)。
挂钩RFID标签(图5)采用915M的UHF标签实现,支持ISO18000-6B和EPC-Gen2两种协议。在 称胴体重时依次写入新的耳标号信息,并一直到最终的加工线。挂钩内写入的信息就是每次的耳标号信息。
3.分割阶段
经过15℃以下的恒温间中排酸后,牛胴体进入分割阶段。牛分割阶段经历了从二分体到四分体而后进 入分割线,分割为不同牛肉产品的过程。在这一阶段,实现RFID标签到条码标签的转变,同时实现嵌入 式条码打印程序,实现分割产品与条码打印的有机结合。
在分割车间,读取挂钩RFID标号后,系统关联牛的耳标号,据成块、成批对应关系,生成相应的条 码编号,生成每一固定分割部位的成块条码,和同一批次的成批条码。采用UDP协议,经无线网络把按 一定的数据格式下载到条码电子秤上,实现条码电子秤称重与打印的一体化,并且将称重信息实时上传到 PC机上进行重量的自动记录(图6)。
根据牛肉的烹饪用途将剔骨后牛肉分割成数十种部位,常见成块部位名称如上脑、外脊、眼肉,外肌, 里肌,针扒,脍扒,龙尾扒,林肉,牛展,成批分割如肥牛3号、肥牛负3号,腹肉等等。通过在2条生 产线上安装无线电子称实现数据交互,通过电子秤和电脑的同步更新,实现重量存储和条码自动生成打印, 根据客户需求进行真空包装(图7)。
成块产品的条码标识采用符全国际EAN-UCC编码规则的GTIN+耳标号构成(图8)。排酸后的胴体 进入加工分割流水线后,RFID挂钩信息转换到电子称上,根据先进先出的设计原则,实现单体产品的追 溯。
成批产品的标识采用GTIN+批次号构成。批次号采用生产日期(以加工日期)确定。对于两批屠宰同 一批分割的牛肉以相邻原则确定屠宰日期。
无线数据包传递格式(图9)采用UDP协议,经4001端口在电子秤与PC之间传输。
4.销售阶段
分割产品数据每天以XML的数据格式保存,并以Web Services方式上传到中心服务器。本发明通过 “LF RFID电子耳标”——“UHF RFID挂钩”——“条码”的对应关系,最终实现了牛只个体信息与牛 肉产品信息的对应。在销售阶段,消费者可以根据生成的条码采用网站、POS机和短信三种方式进行追溯, 就可以查出牛从出生到销售的所有信息,包括牛的出生地、出生日期、免疫情况、防疫情况,屠宰地、屠 宰检疫以及产品检疫等详细情况,真正实现“从农场到餐桌”的全程控制管理模式。
牛肉及牛产品质量追溯体系是一软硬件结合的系统工程。它利用低频电子耳标、超高频电子标签、条 形码技术,以.Net框架为基础,以组件式的面向对象为开发原形,以养殖场、屠宰加工场、超市为一体, 以局域网和因特网相结合的架构模式,将养殖、屠宰、加工、销售各点信息有机集成,最终为消费者提供 牛肉产品质量安全信息,真正实现“从农场到餐桌”的全程控制管理模式。
有益效果
本发明牛肉产品质量安全全程跟踪及追溯系统已经在北京金维福仁清真食品有限公司使用。经过低频 电子耳标、超高频电子标签和一维条码的自动读取试验,结果表明,试验可有效地提高公司的管理水平, 实现管理的自动化,编码转换写入成功率95%以上,读出成功率99%以上,条码打印成功率100%。
附图说明
图1牛肉质量安全全程跟踪与追溯系统架构
图2 134.2KHz电子耳标
图3屠宰阶段实施方案图
图4新耳标标识格式
图5挂钩电子耳标及外壳
图6加工阶段实施方案图
图7电子秤牛肉分割部位
图8电子秤条码销售标签
图9电子秤数据传输格式
图10条码追溯程序
图11编码转换windows窗体
图12挂钩写入windows窗体
图13条码数据通讯windows窗体

具体实施方式

牛肉产品质量安全全程跟踪及追溯系统分为肉牛养殖管理子系统和屠宰分割加工子系统两大部分,包 括:
1.软件设计的基本构架
系统基于.Net框架,采用三层架构体系,开发了权限的牛肉产品质量安全全程跟踪与追溯系统。系统 采用组件式开发方法,设计六大功能模块,包括宰前检疫、耳标转换、胴体写入、产品检疫、条码传递、 基础配置,同时系统具有智能的权限分级和良好的扩展性。
2.软件具体实现
系统以解决方案形式提供4个工程模块:
1、WinForm::数据表示层,主要作为与用户的接口,使用户能够更自然的与程序进行交互。
2、Bussiness Rules:业务逻辑层,主要目的是为了实现RFID和电子秤中数据的交换,与数据实体类 中的数据进行交互。
3、Model:数据实体类,与数据表一一对应。通过数据实体类抽象数据结构。
4、Data:数据访问层,与数据实体一一对应,基本上一个数据访问类对应一个数据实体,通过对对数 据实体属性的控制来实现数据的添加、更新、删除、与检索。
3.支持硬件的设计与安装
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机和短信三种方式进行追溯,得 到相应信息(图10)。
C、系统软件的安装对硬件的要求
●CPU在奔腾IV以上
●内存512MB以上
●20G以上硬盘
操作系统:Microsoft Windows Server 2003、Windows XP Professional Edition、Windows 2000(推荐Me)、 Windows 98、Microsoft Windows XP Home Service Pack 3或更高版本)、Windows Millennium Edition Windows NT 4.0(需要Service Pack 6a)。
●.net 2.0 framework
通过以上相关硬件设备,加上系统软件作为核心支持,最终实现牛个体识别的自动化。
通过以上软硬件设备,最终实现了牛肉产品全程自动化。其中,实现牛肉从“旧耳标到新耳标转换” 模块、“挂钩耳标写入”模块、“条码数据通讯模块”程序模块如下:
“旧耳标到新耳标转换”模块(图11)
                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);
“挂钩耳标写入”模块(图12)
        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))
{
    //MessageBox.Show(r.ToString());
    ArrayList taglist=TagNum(r);
    statusBar1.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+″″);
            //sp.Write(″read string(8,12)″);
        }
        MessageBox.Show(″写入成功″);
                    _continue=false;
                }
            }
        }
“条码数据通讯模块”模块(图13)
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;      //部号总是为l
         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 short nGroupNo;         //默认填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 short    nBestByDateOff;  //取12位耳标号后6位并转为整数除以1000的整数部分(XXX)
         unsigned short    nSellByDateOff;  //取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(int i=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[]pluInfo=new object[5];
  pluInfo=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(sPluName)).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].ToString();
    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.ToInt 16(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.nSellByDateOff=ne5;//yyy
    plu_recv_bin.nPrice=100;
    plu_recv_bin.nExtraTxtNo=0×00;
    //convert to buf
    fixed(byte*parr=&buf[1])
    {
        *((command_header*)parr)=head_bin;
    }
        fixed(byte*parr=&buf[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)pluInfo[0];
  }
        return buf;
}
高效检索全球专利

专利汇是专利免费检索,专利查询,专利分析-国家发明专利查询检索分析平台,是提供专利分析,专利查询,专利检索等数据服务功能的知识产权数据服务商。

我们的产品包含105个国家的1.26亿组数据,免费查、免费专利分析。

申请试用

分析报告

专利汇分析报告产品可以对行业情报数据进行梳理分析,涉及维度包括行业专利基本状况分析、地域分析、技术分析、发明人分析、申请人分析、专利权人分析、失效分析、核心专利分析、法律分析、研发重点分析、企业专利处境分析、技术处境分析、专利寿命分析、企业定位分析、引证分析等超过60个分析角度,系统通过AI智能系统对图表进行解读,只需1分钟,一键生成行业专利分析报告。

申请试用

QQ群二维码
意见反馈