專利名稱:豬個(gè)體標(biāo)識的一種控制方法
技術(shù)領(lǐng)域:
本項(xiàng)發(fā)明涉及豬肉可追溯系統(tǒng)中的豬個(gè)體標(biāo)識控制方法,屬于現(xiàn)代豬肉生產(chǎn)數(shù)字化管理控制領(lǐng)域。
背景技術(shù):
隨著一系列食品安全事件的發(fā)生以及人畜共患傳染病的爆發(fā)帶給人們的恐慌,世界各國對食品安全越來越關(guān)注,瘋牛病、口蹄疫和禽流感等疫病的爆發(fā)給相關(guān)國家的畜牧養(yǎng)殖業(yè)造成巨大的、甚至是毀滅性的打擊,畜禽產(chǎn)品出口受阻,市場銷售下降。在畜禽養(yǎng)殖行業(yè),一些不法畜禽生產(chǎn)者使用違禁添加劑時(shí)有發(fā)生,藥物殘留往往嚴(yán)重超標(biāo),其產(chǎn)品進(jìn)入消費(fèi)市場,嚴(yán)重影響消費(fèi)者的身體健康。因此,畜禽生產(chǎn)迫切需要一個(gè)安全體系框架,使其生產(chǎn)過程在合理地制度和監(jiān)督下進(jìn)行,消費(fèi)者需要“安全透明”,使畜產(chǎn)品生產(chǎn)和流通過程變得可監(jiān)督和稽查,使消費(fèi)者買得放心、吃得放心。針對消費(fèi)者對食品安全的信心喪失,世界各國紛紛制定相關(guān)法律和制度,約束和限制違規(guī)生產(chǎn)的發(fā)生,并試圖從源頭上控制和杜絕疫病的引入和傳播,盡快查清病畜的遷移歷史及可能進(jìn)入食物鏈的畜產(chǎn)品,通過可稽查的食品安全追溯系統(tǒng)來確保食物的安全生產(chǎn)。
畜產(chǎn)品可追溯系統(tǒng)的建立包括畜體標(biāo)識、中央數(shù)據(jù)庫和信息傳遞系統(tǒng)及家畜流動登記三個(gè)基本要素。所以建立豬肉生產(chǎn)的標(biāo)識方法是實(shí)施可追溯系統(tǒng)的前提與關(guān)鍵。豬個(gè)體標(biāo)識需具備成本低、易使用、融入當(dāng)前的管理程序、較高的保留率、易在市場與屠宰場識別、易在屠宰場收集、不得有碎片進(jìn)入肉品或血液中,以及易將標(biāo)識信息錄入數(shù)據(jù)庫中。
國外的家畜標(biāo)識自動化程度較高,如電子耳標(biāo)、電子瘤胃丸、DNA識別、虹膜識別等,但普遍存在成本太高的問題,很難在我國進(jìn)行推廣應(yīng)用。國內(nèi)的家畜標(biāo)識還沒有實(shí)現(xiàn)自動化技術(shù),無法滿足豬肉生產(chǎn)安全管理的自動化水平。
發(fā)明內(nèi)容
技術(shù)問題本發(fā)明針對現(xiàn)有豬個(gè)體識別的自動化程度低,與信息管理無法集成控制的現(xiàn)狀,提供一種豬肉生產(chǎn)分階段自動識別控制方法,開發(fā)一個(gè)集個(gè)體識別設(shè)備、個(gè)體標(biāo)識信息保存和轉(zhuǎn)換的自動記錄系統(tǒng)、管理控制于一身的綜合方法,不僅可以提高個(gè)體標(biāo)識的自動化水平、而且可以和豬肉生產(chǎn)可追溯系統(tǒng)進(jìn)行無縫結(jié)合,提高豬肉產(chǎn)品生產(chǎn)的安全水平。
技術(shù)方案豬肉可追溯系統(tǒng)中的豬個(gè)體標(biāo)識的一種控制方法,包括個(gè)體標(biāo)識設(shè)備和軟件的個(gè)體標(biāo)識控制模塊。個(gè)體標(biāo)識模塊采用了N層結(jié)構(gòu)即數(shù)據(jù)庫、數(shù)據(jù)訪問層、業(yè)務(wù)層以及客戶界面;采用組件技術(shù)開發(fā)方法,即數(shù)據(jù)訪問層和業(yè)務(wù)層全部由組件構(gòu)成,豬個(gè)體識別方法的技術(shù)特征在于
——在生豬養(yǎng)殖階段采用二維條碼耳標(biāo),軟件系統(tǒng)的養(yǎng)殖階段耳標(biāo)號控制程序?qū)⒇i耳標(biāo)號傳遞給系統(tǒng)軟件的個(gè)體標(biāo)識組件,完成養(yǎng)殖階段耳標(biāo)號保存;
——生豬出售時(shí),將養(yǎng)殖階段二維條碼耳標(biāo)的信息轉(zhuǎn)換為XML文件,通過Web Service上傳到Web服務(wù)器;
——在生豬屠宰階段,當(dāng)生豬去頭時(shí),用條碼閱讀器讀取條形碼的信息;
——條形碼的信息由閱讀器讀入后,通過計(jì)算機(jī)的鍵盤口,將讀取的條形碼信息轉(zhuǎn)換為豬耳標(biāo)號數(shù)據(jù),傳入計(jì)算機(jī);
——然后軟件系統(tǒng)的耳標(biāo)號控制程序?qū)⒇i耳標(biāo)號傳遞給系統(tǒng)軟件的個(gè)體標(biāo)識組件,由個(gè)體標(biāo)識組件實(shí)現(xiàn)耳標(biāo)號在數(shù)據(jù)庫中的存儲;
——豬劈半后,在每一片肉上掛上一個(gè)無線射頻卡;
——卡信息由閱讀器讀取,通過計(jì)算機(jī)的鍵盤口,將讀取的射頻卡信息轉(zhuǎn)換為豬的電子標(biāo)識號數(shù)據(jù),傳入計(jì)算機(jī);
——然后軟件系統(tǒng)的電子標(biāo)識號控制程序?qū)⒇i的電子標(biāo)識號傳遞給系統(tǒng)軟件的個(gè)體標(biāo)識組件,由個(gè)體標(biāo)識組件實(shí)現(xiàn)電子標(biāo)識號在數(shù)據(jù)庫中的存儲;
——當(dāng)一批豬屠宰完成后,軟件系統(tǒng)的耳標(biāo)號與電子標(biāo)識號控制程序通過個(gè)體標(biāo)識組件從數(shù)據(jù)庫中分別讀取豬耳標(biāo)號與電子標(biāo)識號,再由個(gè)體標(biāo)識組件完成耳標(biāo)號與電子標(biāo)識號的對應(yīng);
——當(dāng)肉進(jìn)入冷庫冷藏后,無線射頻卡閱讀器再次讀取每個(gè)射頻卡的信息,通過計(jì)算機(jī)的鍵盤口,將讀取的射頻卡信息轉(zhuǎn)換為豬的電子標(biāo)識號數(shù)據(jù),傳入計(jì)算機(jī);
——然后軟件系統(tǒng)中一維條碼打印控制程序?qū)⒇i的電子標(biāo)識號傳遞給系統(tǒng)軟件的個(gè)體標(biāo)識組件,個(gè)體標(biāo)識組件根據(jù)電子標(biāo)識號從數(shù)據(jù)庫中讀取相應(yīng)的豬耳標(biāo)號;
——將豬耳標(biāo)號轉(zhuǎn)換為一維條碼的信息,傳遞給條碼打印機(jī),打印一維條碼標(biāo)簽,貼在每一片豬肉上,完成豬肉生產(chǎn)各階段的個(gè)體標(biāo)識控制過程。
通過以上相互關(guān)聯(lián)的硬件設(shè)備,加上系統(tǒng)軟件作為核心支持,最終實(shí)現(xiàn)了豬個(gè)體識別的自動化。
有益效果
本發(fā)明豬肉可追溯系統(tǒng)中的豬個(gè)體標(biāo)識管理系統(tǒng)已在南京天環(huán)養(yǎng)殖場、南京天環(huán)屠宰場等地開始使用。經(jīng)過四批二維條碼耳標(biāo)、電子標(biāo)識、一維條碼標(biāo)簽的自動讀取試驗(yàn),試驗(yàn)結(jié)果表明,可顯著提高豬個(gè)體標(biāo)識的自動化識別水平,耳標(biāo)自動讀取成功率達(dá)到85%以上,標(biāo)識控制效果準(zhǔn)確率100%。
表1 二維條碼耳標(biāo)讀取試驗(yàn)結(jié)果
豬肉安全可追溯管理系統(tǒng)是一個(gè)軟硬件集成的系統(tǒng)工程。它是利用動物耳標(biāo)、條形碼和電子標(biāo)識技術(shù),以.NET框架為基礎(chǔ),以組件技術(shù)為核心,以養(yǎng)豬場、屠宰場和超市為一體,以Internet為網(wǎng)絡(luò)架構(gòu),將各應(yīng)用點(diǎn)上的局域網(wǎng)(LAN)、廣域網(wǎng)(WAN)互聯(lián)起來,最終為消費(fèi)者提供豬肉安全生產(chǎn)信息,提高消費(fèi)者對豬肉安全品質(zhì)的信心,構(gòu)建一個(gè)豬肉生產(chǎn)安全管理的現(xiàn)代化信息平臺。
本發(fā)明通過耳標(biāo)號——電子標(biāo)識號的對應(yīng)關(guān)系,系統(tǒng)最終實(shí)現(xiàn)了豬所有檔案信息的個(gè)體對應(yīng)。在銷售階段,用戶只需掃描或輸入條碼標(biāo)簽上的耳標(biāo)號,就可以查閱豬從出生到銷售全過程的所有信息,真正實(shí)現(xiàn)了“從農(nóng)場到餐桌”的全程控制管理模式。
四
圖1.二維條碼耳標(biāo)
圖2.無線射頻卡
圖3.基本網(wǎng)絡(luò)構(gòu)架
圖4.耳標(biāo)與RFID的轉(zhuǎn)換模塊
圖5.個(gè)體標(biāo)識數(shù)據(jù)庫模型
圖6.耳標(biāo)號保存web窗體
圖7.電子標(biāo)識號保存web窗體
圖8.耳標(biāo)號與電子標(biāo)識號保存web窗體
圖9.一維條碼打印Windows窗體
五具體實(shí)施例方式
本發(fā)明為豬個(gè)體標(biāo)識的一種控制方法,包括
1、設(shè)計(jì)軟件的基本構(gòu)架
個(gè)體標(biāo)識功能模塊基于.NET框架,采用了N層結(jié)構(gòu)即數(shù)據(jù)庫、數(shù)據(jù)訪問層、業(yè)務(wù)層以及客戶界面;采用組件技術(shù)開發(fā)方法,即數(shù)據(jù)訪問層和業(yè)務(wù)層全部由組件構(gòu)成。
2、設(shè)計(jì)軟件基本組件
(1)數(shù)據(jù)訪問組件
a、采用SQL語句和存儲過程兩種形式訪問數(shù)據(jù)庫。
b、可以將查詢結(jié)果以DataSet或DataView結(jié)構(gòu)形式返回?cái)?shù)據(jù)集。
c、可以執(zhí)行查詢,不返回任何執(zhí)行結(jié)果。
d、可以執(zhí)行查詢,只返回第一行第一個(gè)列的值。
(2)數(shù)據(jù)庫連接組件
a、在實(shí)現(xiàn)對數(shù)據(jù)庫的訪問時(shí),提供數(shù)據(jù)庫服務(wù)器的基本參數(shù)。
(3)個(gè)體標(biāo)識組件
a、管理養(yǎng)殖階段二維條碼耳標(biāo),實(shí)現(xiàn)養(yǎng)殖階段二維條碼耳標(biāo)的查詢、添加、修改、刪除。
b、管理屠宰階段二維條碼耳標(biāo),實(shí)現(xiàn)屠宰階段二維條碼耳標(biāo)的查詢、添加、修改、刪除。
c、管理無線射頻卡,實(shí)現(xiàn)電子標(biāo)識信息的查詢、添加、修改、刪除。
d、管理豬耳標(biāo)號與電子標(biāo)識號的對應(yīng),實(shí)現(xiàn)耳標(biāo)號與電子標(biāo)識對應(yīng)信息的查詢、添加、修改、刪除。
e、實(shí)現(xiàn)一維條碼標(biāo)簽的數(shù)據(jù)獲取和打印。
(4)網(wǎng)絡(luò)模塊
a、數(shù)據(jù)上傳功能通過養(yǎng)殖階段的二維條碼耳標(biāo)信息以XML形式,通過Web Service,將資料上傳至Internet,進(jìn)行個(gè)體標(biāo)識信息的統(tǒng)一管理。
b、個(gè)體標(biāo)識信息的發(fā)布可以將個(gè)體標(biāo)識信息發(fā)布到Internet,供消費(fèi)者查看。
各個(gè)組件之間,既相互獨(dú)立,又通過各個(gè)組件間的接口相互聯(lián)系。通過組件接口間的信息傳遞,各個(gè)組件相互協(xié)調(diào)配合,最終實(shí)現(xiàn)了從豬飼養(yǎng)、屠宰、銷售的個(gè)體識別,也通過網(wǎng)絡(luò)模塊實(shí)現(xiàn)了數(shù)據(jù)資源共享。
3、支持硬件的設(shè)計(jì)與安裝
a、基本的硬件組成
(1)條碼耳標(biāo)豬場的所有豬,從第一次免疫起就有二維條碼耳標(biāo)作為其身份的識別。
(2)條碼掃描器(讀卡器)讀取豬的條碼耳標(biāo)上的條形碼,將條形碼傳給識別設(shè)備,由識別設(shè)備提交給系統(tǒng)軟件,實(shí)現(xiàn)豬耳標(biāo)號的管理。
(3)無線射頻卡在屠宰劈半后,掛在每一片肉上,作為身份識別。
(4)讀卡器讀取豬的射頻卡,將卡的信息傳給識別設(shè)備,由識別設(shè)備提交給系統(tǒng)軟件,實(shí)現(xiàn)豬電子標(biāo)識號的管理。
(5)讀卡器讀取豬的射頻卡,將卡的信息傳給識別設(shè)備,由識別設(shè)備提交給系統(tǒng)軟件,軟件根據(jù)豬電子標(biāo)識號獲取豬耳標(biāo)號,傳遞給打印機(jī),打印一維條碼標(biāo)簽。
b通過自動識別系統(tǒng)完成識別的基本步驟
(1)耳標(biāo)采用農(nóng)業(yè)部統(tǒng)一使用的塑料耳標(biāo)。
(2)條形碼采用市場上通用的Data Matrix,在耳標(biāo)上用激光進(jìn)行雕刻。
(3)條碼掃描器采用和條形碼配套的掃描器。
(4)無線射頻卡采用市場上通用的無線射頻卡。
(5)識別器采用和無線射頻卡配套的識別器。
(6)一維條碼打印機(jī)采用市場上通用的一維條碼打印機(jī)。
完成任務(wù)的步驟包括
——在生豬養(yǎng)殖階段,每只豬佩戴兩只二維條碼耳標(biāo);
——通過軟件系統(tǒng)控制程序?qū)⒚恐回i的兩個(gè)二維條碼耳標(biāo)的對應(yīng)關(guān)系保存在數(shù)據(jù)庫中;
——生豬出售時(shí),將養(yǎng)殖階段二維條碼耳標(biāo)的信息上傳到Web服務(wù)器;
——在生豬屠宰階段,當(dāng)生豬去頭時(shí),用條碼閱讀器隨機(jī)讀取每只豬的兩個(gè)耳標(biāo)中的一個(gè)條形碼的信息;
——通過計(jì)算機(jī)的鍵盤口,將讀取的條形碼信息轉(zhuǎn)換為豬耳標(biāo)號數(shù)據(jù),傳入計(jì)算機(jī);
——然后軟件系統(tǒng)控制程序?qū)⒇i耳標(biāo)號在數(shù)據(jù)庫中的存儲;
——豬劈半后,在每一片肉上掛上一個(gè)無線射頻卡;
——卡信息由閱讀器讀取,通過計(jì)算機(jī)的鍵盤口,將讀取的射頻卡信息轉(zhuǎn)換為豬的電子標(biāo)識號數(shù)據(jù),傳入計(jì)算機(jī)。豬耳標(biāo)號與電子標(biāo)識號的轉(zhuǎn)換包括二維條碼耳標(biāo)號和電子標(biāo)識號的轉(zhuǎn)換,主要通過數(shù)據(jù)庫來實(shí)現(xiàn),結(jié)構(gòu)如圖5。
豬在流水線上都是依次排列的,在去頭時(shí)依次讀取二維條碼耳標(biāo)號,存入數(shù)據(jù)表豬耳標(biāo)號中。對無法讀取的號碼,系統(tǒng)用“99999999999999”進(jìn)行識別。對非試驗(yàn)耳標(biāo)的耳標(biāo)號碼用“88888888888888”進(jìn)行識別。這樣屠宰線上所有豬的耳標(biāo)號在數(shù)據(jù)表中進(jìn)行順序排列。在胴體劈半后,依次在每頭豬的兩片肉上掛電子標(biāo)識,并將電子標(biāo)識號存入數(shù)據(jù)表電子標(biāo)識號中。最后將兩個(gè)數(shù)據(jù)表中當(dāng)天的記錄一對二的讀取,存入數(shù)據(jù)表耳標(biāo)號與電子標(biāo)識號中,這樣某天的每一個(gè)電子標(biāo)識號就可以對應(yīng)唯一的耳標(biāo)號。在胴體冷卻時(shí),取下電子標(biāo)識,讀取電子標(biāo)識號,在數(shù)據(jù)庫中獲取對應(yīng)的耳標(biāo)號,打印出一維條碼貼在胴體上,直到超市出售。通過這樣的耳標(biāo)號與電子標(biāo)識號的相互轉(zhuǎn)換(耳標(biāo)號與電子標(biāo)識號的轉(zhuǎn)換模塊如圖5),超市出售的每片肉都可以對應(yīng)原始的耳標(biāo)號,根據(jù)耳標(biāo)號可以獲取所有生豬屠宰檔案信息。在表豬耳標(biāo)號中,同時(shí)記錄屠宰方式,主要是為了在保存豬耳標(biāo)號的同時(shí)保存該豬的生豬屠宰記錄,減少工作量。
——軟件系統(tǒng)的控制程序?qū)⒇i的電子標(biāo)識號在數(shù)據(jù)庫中的存儲;
——當(dāng)一批豬屠宰完成后,軟件系統(tǒng)的控制程序通過個(gè)體標(biāo)識組件從數(shù)據(jù)庫中分別讀取豬耳標(biāo)號與電子標(biāo)識號,完成耳標(biāo)號與電子標(biāo)識號的對應(yīng);
——當(dāng)肉進(jìn)入冷庫冷藏后,無線射頻卡閱讀器再次讀取每個(gè)射頻卡的信息。通過計(jì)算機(jī)的鍵盤口,將讀取的射頻卡信息轉(zhuǎn)換為豬的電子標(biāo)識號數(shù)據(jù),傳入計(jì)算機(jī);
——然后軟件系統(tǒng)控制程序根據(jù)電子標(biāo)識號,從數(shù)據(jù)庫中讀取相應(yīng)的豬耳標(biāo)號;
——將豬耳標(biāo)號轉(zhuǎn)換為一維條碼的信息,傳遞給條碼打印機(jī),打印一維條碼標(biāo)簽。工作人員將條碼標(biāo)簽貼在每一片豬肉上,完成豬肉生產(chǎn)各階段的個(gè)體標(biāo)識過程。
通過以上相互關(guān)聯(lián)的硬件設(shè)備,加上系統(tǒng)軟件作為核心支持,最終實(shí)現(xiàn)了豬個(gè)體識別的自動化。c系統(tǒng)軟件的安裝對系統(tǒng)軟硬件的要求是
●CPU在奔騰II以上
●內(nèi)存128MB以上
●2G以上硬盤
●操作系統(tǒng)Microsoft Windows Server 2003、Windows XP Professional、Windows XP HomeEdition、Windows 2000(推薦Service Pack 3或更高版本)、Windows Millennium Edition(WindowsMe)、Windows 98、Microsoft Windows NT 4.0(需要Service Pack 6a)。
通過以上三個(gè)相互關(guān)聯(lián)的硬件設(shè)備,加上系統(tǒng)軟件作為核心支持,最終實(shí)現(xiàn)了,豬個(gè)體識別自動化。
其中實(shí)現(xiàn)豬個(gè)體標(biāo)識的全程控制的″耳標(biāo)號控制″程序模塊、″電子標(biāo)識號控制″程序模塊、″耳標(biāo)號與電子標(biāo)識號聯(lián)合控制序模塊和″一維條碼打印控制″程序模塊如下
#Region″耳標(biāo)號控制″(圖6)
將耳標(biāo)號保存功能單獨(dú)列出,當(dāng)執(zhí)行BtOK.Click事件時(shí)調(diào)用SaveData方法
Public Sub SaveData(ByVal textstr As String,ByVal usedate As DateTime,ByVal mode As String,ByVal slaughter As String,ByVal farmname As String) If textstr=config.Earmark1 Then’沒有二維條碼耳標(biāo)的豬用config.Earmark1(即99999999999999) 表示 EarMark=″″ EarMark=textstr Dim accountSystem As New SMEarmark(0,textstr,usedate,mode,slaughter,farmname) accountSystem.Save() ElseIf textstr=config.Earmark2 Then’有二維條碼耳標(biāo)的豬但無法讀取耳標(biāo)號時(shí)用config.Earmark2(即88888888888888)表示 EarMark=″″ EarMark=textstr Dim accountSystem As New SMEarmark(0,textstr,usedate,mode,slaughter,farmname) accountSystem.Save() Else’自動讀取系統(tǒng)豬耳標(biāo)號 EarMark=textstr Dim useid As Integer If EarMark<>″″Then’如果輸入的耳標(biāo)數(shù)據(jù)不為空,則判斷該耳標(biāo)號是否已經(jīng)保存在數(shù)據(jù)庫中 useid=SMEarmark.GetID(EarMark) End If If useid<>0 Then’如果沒有數(shù)據(jù)庫中沒有,則插入該記錄,否則修改該記錄 Dim accountSystem As New SMEarmark(useid,textstr,usedate,mode,slaughter, farmname) accountSystem.Save() Else Dim accountSystem As New SMEarmark(0,textstr,usedate,mode,slaughter,farmname) accountSystem.Save() End If<!-- SIPO <DP n="5"> --><dp n="d5"/> End If End Sub
’*********************從數(shù)據(jù)庫讀取耳標(biāo)號數(shù)據(jù)************************
Public Sub EarmarkFromDatabase(ByVal usedate As DateTime) Dim earmark As SMEarmark Dim config As IDataConn=New ConnStr Dim number As Integer=0 Dim earstr As String Dim ArrEarmark As New ArrayList Dim dv As DataView dv=SMEarmark.GetEarmarkByDate(usedate) If dv.Table.Rows.Count>0 Then TxtCount.Text=dv.Table.Rows.Count Dim dr As DataRow For Each dr In dv.Table.Rows earstr=Trim(dr(1).ToString) ArrEarmark.Add(earstr+″,″+Trim(dr(2).ToString)) If earstr=config.Earmark1 Then’非系統(tǒng)豬 number=number+1 End If Next dr TxtNoCount.Text=number End If ListEarmark.DataSource=ArrEarmark ListEarmark.DataBind() End Sub
條碼閱讀器讀取的數(shù)據(jù)直接輸入到Txtearmark文本框中,因?yàn)闂l碼閱讀器讀取數(shù)據(jù)是以回車鍵結(jié)束,因此執(zhí)行Page_Load事件。
Private Sub Page_Load(ByVal sender As System.Object,ByVal e As System.EventArgs)Handles MyBase.Load If Not IsPostBack Then’初始化頁的用戶代碼 DListName.DataSource=SMCorporation.GetCorporationName’綁定屠宰場名稱控件 DListName.DataBind() DlistFarm.DataSource=SMCorporation.GetCorporationName’綁定屠宰場名稱控件 DlistFarm.DataBind() Dim focus As GetFocus focus.SetFocus(Txtearmark)’獲得焦點(diǎn) txtdate.Text=Today EarmarkFromDatabase(Convert.ToDateTime(txtdate.Text).ToString(″d″)) ListEarmark.DataBind() Else If Txtearmark.Text<>""Then’如果輸入的耳標(biāo)數(shù)據(jù)不為空,則該保存耳標(biāo)號到數(shù)據(jù)庫中 SaveData(Txtearmark.Text,Convert.ToDateTime(txtdate.Text).ToString(″d″), DListMode.SelectedValue,TxtSlaughter.Text,TxtFarmname.Text)<!-- SIPO <DP n="6"> --><dp n="d6"/> Txtearmark.Text=″″ End If EarmarkFromDatabase(Convert.ToDateTime(txtdate.Text).ToString(″d″)) Dim focus As GetFocus focus.SetFocus(Txtearmark)’獲得焦點(diǎn) End If End Sub
點(diǎn)擊確定按鈕也可保存數(shù)據(jù),這時(shí)執(zhí)行BtOK.Click事件
Private Sub BtOK_Click(ByVal sender As Object,ByVal e As System.EventArgs)Handles BtOK.Click If Txtearmark.Text<>""Then SaveData(Txtearmark.Text,Convert.ToDateTime(txtdate.Text).ToString(″d″),DListMode.SelectedValue,TxtSlaughter.Text,TxtFarmname.Text) Txtearmark.Text=″″ End If Txtearmark.Text=″″ EarmarkFromDatabase(Convert.ToDateTime(txtdate.Text).ToString(″d″)) Dim focus As GetFocus focus.SetFocus(Txtearmark)’獲得焦點(diǎn) End Sub#End Region#Region″電子標(biāo)識號控制″(圖7)Public Sub SaveData(ByVal textstr As String,ByVal number As String,ByVal usedate As DateTime) Dim useid As Integer useid=SMPipelining.GetID(textstr,usedate) If useid<>0 Then Dim accountSystem As New SMPipelining(useid,textstr,number,usedate) accountSystem.Save() Else Dim accountSystem As New SMPipelining(0,textstr,number,usedate) accountSystem.Save() End IfEnd Sub#End Region#Region″從數(shù)據(jù)庫中讀取″Public Function ReaderDatabase(ByVal number As String,ByVal usedate As DateTime)As String Dim earmark As SMEarmark Dim ReadString As String Dim dv As DataView=SMPipelining.GetdetailsDataViewBynumberdate(number,usedate) If dv.Table.Rows.Count>0 Then ReadString=″″ Dim dr As DataRow For Each dr In dv.Table.Rows ReadString=ReadString+ControlChars.Cr+Trim(dr(1).ToString)+″,″+<!-- SIPO <DP n="7"> --><dp n="d7"/>Trim(dr(2).ToString)+″,″+Trim(dr(3).ToString) Next dr End If Return ReadString End Function#End Region
無線射頻標(biāo)簽閱讀器讀取的數(shù)據(jù)直接輸入到TxtRFIDOne文本框中,因?yàn)殚喿x器讀取數(shù)據(jù)是以回車鍵結(jié)束,因此執(zhí)行Page_Load事件。
Private Sub Page_Load(ByVal sender As System.Object,ByVal e As System.EventArgs)Handles MyBase.Load If Not IsPostBack Then’初始化頁的用戶代碼 Dim focus As GetFocus focus.SetFocus(TxtRFIDOne)’獲得焦點(diǎn) Session(″number″)=1 txtdate.Text=Today TxtRFIDLists.Text=ReaderDatabase(DListNumber.SelectedValue,txtdate.Text) Else’重新加載該頁的用戶代碼 If TxtRFIDOne.Text<>″″Then SaveData(TxtRFIDOne.Text,DListNumber.SelectedValue,Convert.ToDateTime(txtdate.Text).ToString(″d″)) TxtRFIDOne.Text=″″ End If TxtRFIDLists.Text=ReaderDatabase(DListNumber.SelectedValue,txtdate.Text) Dim focus As GetFocus focus.SetFocus(TxtRFIDOne)’獲得焦點(diǎn) End If End Sub
點(diǎn)擊確定按鈕也可保存數(shù)據(jù),這時(shí)執(zhí)行BtOK.Click事件
Private Sub BtOK_Click(ByVal sender As System.Object,ByVal e As System.EventArgs) If TxtRFIDOne.Text<>″″Then SaveData(TxtRFIDOne.Text,DListNumber.SelectedValue,Convert.ToDateTime(txtdate.Text).ToString(″d″)) TxtRFIDOne.Text=″″ End If TxtRFIDLists.Text=ReaderDatabase(DListNumber.SelectedValue,txtdate.Text) Dim focus As GetFocus focus.SetFocus(TxtRFIDOne)’獲得焦點(diǎn) End Sub
#Region″耳標(biāo)號與電子標(biāo)識號聯(lián)合控制″(圖8)
根據(jù)日期讀取數(shù)據(jù)庫中記錄的耳標(biāo)號
Private Function ArrEarDatabase(ByVal usedate As DateTime)As ArrayList Dim dv As DataView Dim ArrEarID As New ArrayList dv=SMEarmark.GetEarmarkByDate(usedate) If dv.Table.Rows.Count>0 Then<!-- SIPO <DP n="8"> --><dp n="d8"/> Dim dr As DataRow For Each dr In dv.Table.Rows ArrEarID.Add(dr(0).ToString)’earmarkID Next dr End If Return ArrEarID End Function<br/>
根據(jù)日期和胴體上掛的電子標(biāo)簽個(gè)數(shù)讀取數(shù)據(jù)庫中記錄的電子標(biāo)識號
Private Function ArrRFDatabase(ByVal number As String,ByVal usedate As DateTime)As ArrayList Dim dv As DataView Dim ArrEar As New ArrayList dv=SMPipelining.GetdetailsDataViewBynumberdate(number,usedate) If dv.Table.Rows.Count>0 Then Dim dr As DataRow For Each dr In dv.Table.Rows ArrEar.Add(dr(0).ToString)’PipeliningID Next dr End If Return ArrEar End Function #End Region#Region″查看耳標(biāo)事件″ Private Sub BtnEarOK_Click(ByVal sender As System.Object,ByVal e As System.EventArgs)HandlesBtnEarOK.Click TxtLists1.Text=EarReaderDatabase(Convert.ToDateTime(txtdate.Text).ToString(″d″)) End Sub#End Region#Region″查看電子標(biāo)識事件″ Private Sub BtnRFIDOK_Click(ByVal sender As System.Object,ByVal e As System.EventArgs)HandlesBtnRFIDOK.Click TxtLists2.Text=RFReaderDatabase(DListNumber.SelectedValue,Convert.ToDateTime(txtdate.Text).ToString(″d″)) End Sub#End Region#Region″查看耳標(biāo)與電子標(biāo)識關(guān)系的事件″ Private Sub BtnQuery_Click(ByVal sender As System.Object,ByVal e As System.EventArgs)HandlesBtnQuery.Click Dim ArrEarmarkID As New ArrayList Dim ArrRFID As New ArrayList Dim earstr1,RFStr,IDStr As String IDStr=″″ ArrEarmarkID=ArrEarDatabase(Convert.ToDateTime(txtdate.Text).ToString(″d″)) ArrRFID=ArrRFDatabase(DListNumber.SelectedValue,Convert.ToDateTime(txtdate.Text).ToString(″d″))<!-- SIPO <DP n="9"> --><dp n="d9"/> Dim i,j,k,earcount,Rfcount,number As Integer earcount=ArrEarmarkID.Count Rfcount=ArrRFID.Count number=Convert.ToInt32(DListNumber.SelectedValue) j=0 For i=0 To earcount-1 If j>Rfcount-1 Then Exit For End If Dim earclass As New SMEarmark(Convert.ToInt32(ArrEarmarkID.Item(i))) earclass.Load() earstr1=earclass.earmark IDStr=IDStr+Trim(earstr1)+″,″ For k=1 To number Dim RFClass As New SMPipelining(ArrRFID.Item(j)) RFClass.Load() RFStr=RFClass.Pipelining IDStr=IDStr+Trim(RFStr)+″,″ j=j(luò)+1 Next IDStr=IDStr+ControlChars.Cr Next TxtID.Text=IDStr End Sub#End Region#Region″保存耳標(biāo)與電子標(biāo)識″ Private Sub BtOK_Click(ByVal sender As Object,ByVal e As System.EventArgs)Handles BtOK.Click Dim ArrEarmarkID As New ArrayList Dim ArrRFID As New ArrayList Dim earstr1.RFStr As String Dim useid As Integer ArrEarmarkID=ArrEarDatabase(Convert.ToDateTime(txtdate.Text).ToString(″d″)) ArrRFID=ArrRFDatabase(DListNumber.SelectedValue,Convert.ToDateTime(txtdate.Text).ToString(″d″)) Dim i,j,k,earcount,Rfcount,number As Integer earcount=ArrEarmarkID.Count Rfcount=ArrRFID.Count number=Convert.ToInt32(DListNumber.SelectedValue) j=0 For i=0 To earcount-1 If j>Rfcount-1 Then Exit For End If Dim earclass As New SMEarmark(Convert.ToInt32(ArrEarmarkID.Item(i))) earclass.Load()<!-- SIPO <DP n="10"> --><dp n="d10"/> earstr1=earclass.earmark Dim config As IDataConn=New ConnStrIf earstr1=config.Earmark1 Then’非本系統(tǒng)豬耳標(biāo)號 j=j(luò)+number Exit For ElseIf earstr1=config.Earmark2 Then’本系統(tǒng)豬,但無法讀取耳標(biāo)號 earstr1=TxtBatch.Text End If ’*************保存屠宰記錄********************* useid=SMPigButcher.GetID(earstr1) If useid<>0 Then Dim accountSystem As New SMPigButcher(useid,earstr1,earclass.notedate,earclass.mode,earclass.slaughter,earclass.farmname) accountSystem.Save() Else Dim accountSystem As New SMPigButcher(0,earstr1,earclass.notedate,earclass.mode,earclass.slaughter,earclass.farmname) accountSystem.Save() End If ’***************耳標(biāo)與電子標(biāo)識號********************* For k=1 To number Dim RFClass As New SMPipelining(ArrRFID.Item(j)) RFClass.Load() RFStr=RFClass.Pipelining useid=SMEarPipelining.GetID(earstr1,RFStr,RFClass.Number) If useid<>0 Then Dim accountSystem As New SMEarPipelining(useid,earstr1,RFStr,RFClass.Number,Convert.ToDateTime(txtdate.Text).ToString(″d″),″″) accountSystem.Save() Else Dim accountSystem As New SMEarPipel ining(0,earstr1,RFStr,RFClass.Number,Convert.ToDateTime(txtdate.Text).ToString(″d″),″″) accountSystem.Save() End If j=j(luò)+1 Next Next End Sub#End Region
一維條碼打印控制(采用VB 6.0中文版編寫)(圖9)
″″″打印機(jī)控制函數(shù)WinPPLA.DLL Version 2.7AW″″″″″
Private Declare Function A_CreatePrn Lib″WINPPLA.DLL″(ByVal selection As Long,ByVal filename As
String)As Long
Private Declare Function A_Set_Darkness Lib″WINPPLA.DLL″(ByVal darkness As Long)As Long
Private Declare Function A_Prn_Barcode Lib″WINPPLA.DLL″(ByVal x As Long,ByVal y As Long,ByVal
ori As Long,ByVal typee As Byte,ByVal narrow As Long,ByVal width As Long,ByVal height
As Long,ByVal mode As Byte,ByVal numeric As Long,ByVal data As String)As Long
Private Declare Function A_Prn_Text Lib″WINPPLA.DLL″(ByVal x As Long,ByVal y As Long,ByVal ori
As Long,ByVal font As Long,ByVal typee As Long,ByVal hor_factor As Long,ByVal ver_factor
As Long,ByVal mode As Byte,ByVal numeric As Long,ByVal data As String)As Long
Private Declare Function A_Print_Out Lib″WINPPLA.DLL″(ByVal width As Long,ByVal height As Long,
ByVal copies As Long,ByVal amount As Long)As Long
Private Declare Sub A_ClosePrn Lib″WINPPLA.DLL″()
’’一維條碼打印窗體載入事件’’
Private Sub Form_Load() If DataEnvironmentl.rsCmdSel.State<>adStateOpen Then DataEnvironmentl.rsCmdSel.Open End If i=0 limit=3 Combo2.Clear If DataEnvironmentl.rsDateList.State<>adStateOpen Then DataEnvironmentl.rsDateList.Open End If Do WhiIe Not DataEnvironmentl.rsDateList.EOF Combo2.AddItem DataEnvironmentl.rsDateList.Fields(0).Value DataEnvironmentl.rsDateList.MoveNext LoopEnd SubTxtRFID按下回車鍵事件,獲取對應(yīng)豬耳標(biāo)號Private Sub TxtRFID_KeyPress(KeyAscii As Integer)On Error Resume NextIf KeyAscii=vbKeyReturn Then With DataEnvironmentl.rsNumberSel If .State<>adStateClosed Then .Close End If DataEnvironmentl.Commands(″NumberSel″).Parameters(0)=Trim(TxtRFID.Text) .Open TxtEarmark.Text=.Fields(″豬耳標(biāo)號″) End WithEnd IfEnd Sub一維條碼打印事件Private Sub CmdPrn_Click()Dim intI As IntegerDim i As Integer<!-- SIPO <DP n="12"> --><dp n="d12"/>intI=Val(Trim(TxtNumber.Text))For i=1 To intI Print A_CreatePrn(1,″a22″) Print A_Set_Darkness(10) Print A_Prn_Barcode(25,10,1,69,0,10,50,98,1,″A″& Mid(TxtEarmark.Text,7,9)) Print A_Prn_Text(20,70,1,4,0,1,1,110,2,TxtEarmark.Text) Print A_Print_Out(1,1,1,1) Call A_ClosePrnNext iEnd Sub
以上豬肉可追溯系統(tǒng)中的豬個(gè)體標(biāo)識控制方法已在南京天環(huán)養(yǎng)殖場、南京天環(huán)屠宰場等地開始使用。經(jīng)過四批二維條碼耳標(biāo)、電子標(biāo)識、一維條碼標(biāo)簽的自動讀取試驗(yàn),試驗(yàn)結(jié)果表明,可顯著提高豬個(gè)體標(biāo)識的自動化識別水平,耳標(biāo)自動讀取成功率為85%以上,標(biāo)識控制準(zhǔn)確率100%。
表1 二維條碼耳標(biāo)讀取試驗(yàn)結(jié)果
權(quán)利要求
1、豬個(gè)體標(biāo)識的一種控制方法,包括個(gè)體標(biāo)識設(shè)備和軟件的個(gè)體標(biāo)識控制模塊,個(gè)體標(biāo)識模塊采用了N層結(jié)構(gòu),即數(shù)據(jù)庫、數(shù)據(jù)訪問層、業(yè)務(wù)層以及客戶界面;數(shù)據(jù)訪問層和業(yè)務(wù)層全部采用組件技術(shù)開發(fā)方法,其特征在于
——在生豬養(yǎng)殖階段采用二維條碼耳標(biāo);
——在生豬屠宰階段,當(dāng)生豬去頭時(shí),用二維條碼閱讀器讀取條形碼的信息,作為豬耳標(biāo)號,傳入計(jì)算機(jī),由程序模塊完成二維條碼數(shù)據(jù)的保存;
——豬劈半后,在每一片肉上掛上一個(gè)無線射頻卡;
——讀取每個(gè)射頻卡的信息,作為電子標(biāo)識號,傳入計(jì)算機(jī),由程序模塊完成無線射頻卡數(shù)據(jù)的保存;
——當(dāng)一批豬屠宰完成后,從數(shù)據(jù)庫中讀取豬耳標(biāo)號與電子標(biāo)識號,通過程序模塊完成耳標(biāo)號與電子標(biāo)識號的對應(yīng);
——當(dāng)肉進(jìn)入冷庫冷藏后,再次讀取每個(gè)射頻卡的信息,程序模塊根據(jù)射頻卡數(shù)據(jù)從數(shù)據(jù)庫中獲得相應(yīng)的豬耳標(biāo)號;
——將豬耳標(biāo)號轉(zhuǎn)換為一維條碼的信息,傳遞給條碼打印機(jī),打印一維條碼標(biāo)簽,貼在每一片豬肉上,完成豬肉生產(chǎn)各階段的個(gè)體標(biāo)識過程。
2、根據(jù)權(quán)利要求1所述的豬個(gè)體標(biāo)識的一種控制方法,其中實(shí)現(xiàn)豬個(gè)體標(biāo)識的全程控制的″耳標(biāo)號控制″程序模塊、″電子標(biāo)識號控制″程序模塊、″耳標(biāo)號與電子標(biāo)識號聯(lián)合控制″程序模塊和″一維條碼打印控制″程序模塊如下
#Region″耳標(biāo)號控制″
將耳標(biāo)號保存功能單獨(dú)列出,當(dāng)執(zhí)行BtOK.Click事件時(shí)調(diào)用SaveData方法
Public Sub SaveData(ByVal textstr As String,ByVal usedate As DateTime,ByVal mode As String,ByVal slaughter As String,ByVal farmname As String)
If textstr=config.Earmark1 Then’沒有二維條碼耳標(biāo)的豬用config.Earmark1(即99999999999999)表示
EarMark=″″
EarMark=textstr
Dim accountSystem As New SMEarmark(0,textstr,usedate,mode,slaughter,farmname)
accountSystem.Save()
ElseIf textstr=config.Earmark2 Then’有二維條碼耳標(biāo)的豬但無法讀取耳標(biāo)號時(shí)用config.Earmark2(即88888888888888)表示
EarMark=″″
EarMark=textstr
Dim accountSystem As New SMEarmark(0,textstr,usedate,mode,slaughter,farmname)
accountSystem.Save()
Else’自動讀取系統(tǒng)豬耳標(biāo)號
EarMark=textstr
Dim useid As Integer
If EarMark<>″″Then’如果輸入的耳標(biāo)數(shù)據(jù)不為空,則判斷該耳標(biāo)號是否已經(jīng)保存在數(shù)據(jù)庫中
useid=SMEarmark.GetID(EarMark)
End If
If useid<>0 Then’如果沒有數(shù)據(jù)庫中沒有,則插入該記錄,否則修改該記錄
Dim accountSystem As New SMEarmark(useid,textstr,usedate,mode,slaughter,
farmname)
accountSystem.Save()
Else
Dim accountSystem As New SMEarmark(0,textstr,usedate,mode,slaughter,farmname)
accountSystem.Save()
End If
End If
End Sub從數(shù)據(jù)庫中讀取數(shù)據(jù)
Public Sub EarmarkFromDatabase(ByVal usedate As DateTime)
Dim earmark As SMEarmark
Dim config As IDataConn=New ConnStr
Dim number As Integer=0
Dim earstr As String
Dim ArrEarmark As New ArrayList
Dim dv As DataView
dv=SMEarmark.GetEarmarkByDate(usedate)
If dv.Table.Rows.Count>0 Then
TxtCount.Text=dv.Table.Rows.Count
Dim dr As DataRow
For Each dr In dv.Table.Rows
earstr=Trim(dr(1).ToString)
ArrEarmark.Add(earstr+″,″+Trim(dr(2).ToString))
If earstr=config.Earmark1 Then’非系統(tǒng)豬
number=number+1
End If
Next dr
TxtNoCount.Text=number
End If
ListEarmark.DataSource=ArrEarmark
ListEarmark.DataBind()
End Sub
條碼閱讀器讀取的數(shù)據(jù)直接輸入到Txtearmark文本框中,因?yàn)闂l碼閱讀器讀取數(shù)據(jù)是以回車鍵結(jié)束,因此執(zhí)行Page_Load事件;Private Sub Page_Load(ByVal sender As System.Object,ByVal e As System.EventArgs)Handles MyBase.Load
If Not IsPostBack Then’初始化頁的用戶代碼
DListName.DataSource=SMCorporation.GetCorporationName’綁定屠宰場名稱控件
DListName.DataBind()
DlistFarm.DataSource=SMCorporation.GetCorporationName’綁定屠宰場名稱控件
DlistFarm.DataBind()
Dim focus As GetFocus
focus.SetFocus(Txtearmark)’獲得焦點(diǎn)
txtdate.Text=Today
EarmarkFromDatabase(Convert.ToDateTime(txtdate.Text).ToString(″d″))
ListEarmark.DataBind()
Else
If Txtearmark.Text<>″″Then’如果輸入的耳標(biāo)數(shù)據(jù)不為空,則該保存耳標(biāo)號到數(shù)據(jù)庫中
SaveData(Txtearmark.Text,Convert.ToDateTime(txtdate.Text).ToString(″d″),
DListMode.SelectedValue,TxtSlaughter.Text,TxtFarmname.Text)
Txtearmark.Text=″″
End If
EarmarkFromDatabase(Convert.ToDateTime(txtdate.Text).ToString(″d″))
Dim focus As GetFocus
focus.SetFocus(Txtearmark)’獲得焦點(diǎn)
End If
End Sub
點(diǎn)擊確定按鈕也可保存數(shù)據(jù),這時(shí)執(zhí)行BtOK.Click事件 Private Sub BtOK_Click(ByVal sender As Object,ByVal e As System.EventArgs)Handles BtOK.Click
If Txtearmark.Text<>″″Then
SaveData(Txtearmark.Text,Convert.ToDateTime(txtdate.Text).ToString(″d″),DListMode.SelectedValue,TxtSlaughter.Text,TxtFarmname.Text)
Txtearmark.Text=″″
End If
Txtearmark.Text=″″
EarmarkFromDatabase(Convert.ToDateTime(txtdate.Text).ToString(″d″))
Dim focus As GetFocus
focus.SetFocus(Txtearmark)’獲得焦點(diǎn)
End Sub#End Region#Region″電子標(biāo)識號控制″
Public Sub SaveData(ByVal textstr As String,ByVal number As String,ByVal usedate As DateTime)
Dim useid As Integer
useid=SMPipelining.GetID(textstr,usedate)
If useid<>0 Then
Dim accountSystem As New SMPipelining(useid,textstr,number,usedate)
accountSystem.Save()
Else
Dim accountSystem As New SMPipelining(0,textstr,number,usedate)
accountSystem.Save()
End If
End Sub#End Region#Region″從數(shù)據(jù)庫中讀取″
Public Function ReaderDatabase(ByVal number As String,ByVal usedate As DateTime)As String
Dim earmark As SMEarmark
Dim ReadString As String
Dim dv As DataView=SMPipelining.GetdetailsDataViewBynumberdate(number,usedate)
If dv.Table.Rows.Count>0 Then
ReadString=″″
Dim dr As DataRow
For Each dr In dv.Table.Rows
ReadString=ReadString+ControlChars.Cr+Trim(dr(1).ToString)+″,″+Trim(dr(2).ToString)+″,″+Trim(dr(3).ToString)
Next dr
End If
Return ReadString
End Function#End Region
無線射頻標(biāo)簽閱讀器讀取的數(shù)據(jù)直接輸入到TxtRFIDOne文本框中,因?yàn)殚喿x器讀取數(shù)據(jù)是以回車鍵結(jié)束,因此執(zhí)行Page_Load事件。Private Sub Page_Load(ByVal sender As System.Object,ByVal e As System.EventArgs)Handles MyBase.Load
If Not IsPostBack Then’初始化頁的用戶代碼
Dim focus As GetFocus
focus.SetFocus(TxtRFIDOne)’獲得焦點(diǎn)
Session(″number″)=1
txtdate.Text=Today
TxtRFIDLists.Text=ReaderDatabase(DListNumber.SelectedValue,txtdate.Text)
Else’重新加載該頁的用戶代碼
If TxtRFIDOne.Text<>″″Then
SaveData(TxtRFIDOne.Text,DListNumber.SelectedValue,Convert.ToDateTime(txtdate.Text).ToString(″d″))
TxtRFIDOne.Text=″″
End If
TxtRFIDLists.Text=ReaderDatabase(DListNumber.SelectedValue,txtdate.Text)
Dim focus As GetFocus
focus.SetFocus(TxtRFIDOne)’獲得焦點(diǎn)
End If
End Sub
點(diǎn)擊確定按鈕也可保存數(shù)據(jù),這時(shí)執(zhí)行BtOK.Click事件 Private Sub BtOK_Click(ByVal sender As System.Object,ByVal e As System.EventArgs)
If TxtRFIDOne.Text<>″″Then
SaveData(TxtRFIDOne.Text,DListNumber.SelectedValue,Convert.ToDateTime(txtdate.Text).ToString(″d″))
TxtRFIDOne.Text=″″
End If
TxtRFIDLists.Text=ReaderDatabase(DListNumber.SelectedValue,txtdate.Text)
Dim focus As GetFocus
focus.SetFocus(TxtRFIDOne)’獲得焦點(diǎn)
End Sub#Region″耳標(biāo)號與電子標(biāo)識號聯(lián)合控制″根據(jù)日期讀取數(shù)據(jù)庫中記錄的耳標(biāo)號
Private Function ArrEarDatabase(ByVal usedate As DateTime)As ArrayList
Dim dv As DataView
Dim ArrEarID As New ArrayList
dv=SMEarmark.GetEarmarkByDate(usedate)
If dv.Table.Rows.Count>0 Then
Dim dr As DataRow
For Each dr In dv.Table.Rows
ArrEarID.Add(dr(0).ToString)’earmarkID
Next dr
End If
Return ArrEarID
End Function根據(jù)日期和胴體上掛的電子標(biāo)簽個(gè)數(shù)讀取數(shù)據(jù)庫中記錄的電子標(biāo)識號
Private Function ArrRFDatabase(ByVal number As String,ByVal usedate As DateTime)As ArrayList
Dim dv As DataView
Dim ArrEar As New ArrayList
dv=SMPipelining.GetdetailsDataViewBynumberdate(number,usedate)
If dv.Table.Rows.Count>0 Then
Dim dr As DataRow
For Each dr In dv.Table.Rows
ArrEar.Add(dr(0).ToString)’PipeliningID
Next dr
End If
Return ArrEar
End Function
#End Region#Region″查看耳標(biāo)事件″
Private Sub BtnEarOK_Click(ByVal sender As System.Object,ByVal e As System.EventArgs)HandlesBtnEarOK.Click
TxtLists1.Text=EarReaderDatabase(Convert.ToDateTime(txtdate.Text).ToString(″d″))
End Sub#End Region#Region″查看電子標(biāo)識事件″
Private Sub BtnRFIDOK_Click(ByVal sender As System.Object,ByVal e As System.EventArgs)HandlesBtnRFIDOK.Click
TxtLists2.Text=RFReaderDatabase(DListNumber.SelectedValue,Convert.ToDateTime(txtdate.Text).ToString(″d″))
End Sub#End Region#Region″查看耳標(biāo)與電子標(biāo)識關(guān)系的事件″
Private Sub BtnQuery_Click(ByVal sender As System.Object,ByVal e As System.EventArgs)HandlesBtnQuery.Click
Dim ArrEarmarkID As New ArrayList
Dim ArrRFID As New ArrayList
Dim earstr1,RFStr,IDStr As String
IDStr=″″
ArrEarmarkID=ArrEarDatabase(Convert.ToDateTime(txtdate.Text).ToString(″d″))
ArrRFID=ArrRFDatabase(DListNumber.SelectedValue,Convert.ToDateTime(txtdate.Text).ToString(″d″))
Dim i,j,k,earcount,Rfcount,number As Integer
earcount=ArrEarmarkID.Count
Rfcount=ArrRFID.Count
number=Convert.ToInt32(DListNumber.SelectedValue)
j=0
For i=0 To earcount-1
If j>Rfcount-1 Then
Exit For
End If
Dim earclass As New SMEarmark(Convert.ToInt32(ArrEarmarkID.Item(i)))
earclass.Load()
earstr1=earclass.earmark
IDStr=IDStr+Trim(earstr1)+″,″
For k=1To number
Dim RFClass As New SMPipelining(ArrRFID.Item(j))
RFClass.Load()
RFStr=RFClass.Pipelining
IDStr=IDStr+Trim(RFStr)+″,″
j=j(luò)+1
Next
IDStr=IDStr+ControlChars.Cr
Next
TxtID.Text=IDStr End Sub#End Region#Region″保存耳標(biāo)與電子標(biāo)識″
Private Sub BtOK_Click(ByVal sender As Object,ByVal e As System.EventArgs)Handles BtOK.Click
Dim ArrEarmarkID As New ArrayList
Dim ArrRFID As New ArrayList
Dim earstr1,RFStr As String
Dim useid As Integer
ArrEarmarkID=ArrEarDatabase(Convert.ToDateTime(txtdate.Text).ToString(″d″))
ArrRFID=ArrRFDatabase(DListNumber.SelectedValue,Convert.ToDateTime(txtdate.Text).ToString(″d″))
Dim i,j,k,earcount,Rfcount,number As Integer
earcount=ArrEarmarkID.Count
Rfcount=ArrRFID.Count
number=Convert.ToInt32(DListNumber.SelectedValue)
j=0
For i=0 To earcount-1
If j>Rfcount-1 Then
Exit For
End If
Dim earclass As New SMEarmark(Convert.ToInt32(ArrEarmarkID.Item(i)))
earclass.Load()
earstr1=earclass.earmark
Dim config As IDataConn=New ConnStr
If earstr1=config.Earmark1 Then’非本系統(tǒng)豬耳標(biāo)號
j=j(luò)+number
Exit For
ElseIf earstr1=config.Earmark2 Then’本系統(tǒng)豬,但無法讀取耳標(biāo)號
earstr1=TxtBatch.Text
End If
’*************保存屠宰記錄*********************
useid=SMPigButcher.GetID(earstr1)
If useid<>0 Then
Dim accountSystem As New SMPigButcher(useid,earstr1,earclass.notedate,earclass.mode,earclass.slaughter,earclass.farmname)
accountSystem.Save()
Else
Dim accountSystem As New SMPigButcher(0,earstr1,earclass.notedate,earclass.mode,earclass.slaughter,earclass.farmname)
accountSystem.Save()
End If
’***************耳標(biāo)與電子標(biāo)識號*********************
For k=1 To number
Dim RFClass As New SMPipelining(ArrRFID.Item(j))
RFClass.Load()
RFStr=RFClass.Pipelining
useid=SMEarPipelining.GetID(earstr1,RFStr,RFClass.Number)
If useid<> 0 Then
Dim accountSystem As New SMEarPipelining(useid,earstr1,RFStr,RFClass.Number,Convert.ToDateTime(txtdate.Text).ToString(″d″),″″)
accountSystem.Save()
Else
Dim accountSystem As New SMEarPipelining(0,earstr1,RFStr,RFClass.Number,Convert.ToDateTime(txtdate.Text).ToString(″d″),″″)
accountSystem.Save()
End If
j=j(luò)+1
Next
Next
End Sub#End Region一維條碼打印控制(采用VB 6.0中文版編寫)打印機(jī)控制函數(shù)WinPPLA.DLL Version 2.7AW″Private Declare Function A_CreatePrn Lib″WINPPLA.DLL″(ByVal selection As Long,ByVal filename As
String)As LongPrivate Declare Function A_Set_Darkness Lib″WINPPLA.DLL″(ByVal darkness As Long)As LongPrivate Declare Function A_Prn_Barcode Lib″WINPPLA.DLL″(ByVal x As Long,ByVal y As Long,ByVal
ori As Long,ByVal typee As Byte,ByVal narrow As Long,ByVal width As Long,ByVal height
As Long,ByVal mode As Byte,ByVal numeric As Long,ByVal data As String)As LongPrivate Declare Function A_Prn_Text Lib″WINPPLA.DLL″(ByVal x As Long,ByVal y As Long,ByVal ori
As Long,ByVal font As Long,ByVal typee As Long,ByVal hor_factor As Long,ByVal ver_factor
As Long,ByVal mode As Byte,ByVal numeric As Long,ByVal data As String)As LongPrivate Declare Function A_Print_Out Lib″WINPPLA.DLL″(ByVal width As Long,ByVal height As Long,
ByVal copies As Long,ByVal amount As Long)As LongPrivate Declare Sub A_ClosePrn Lib″WINPPLA.DLL″()”一維條碼打印窗體載入事件”Private Sub Form_Load() If DataEnvironment1.rsCmdSel.State<>adStateOpen Then
DataEnvironment1.rsCmdSel.Open End If i=0 limit=3 Combo2.Clear If DataEnvironment1.rsDateList.State<>adStateOpen Then
DataEnvironment1.rsDateList.Open End If Do While Not DataEnvironment1.rsDateList.EOF
Combo2.AddItem DataEnvironment1.rsDateList.Fields(0).Value
DataEnvironment1.rsDateList.MoveNext LoopEnd SubTxtRFID按下回車鍵事件,獲取對應(yīng)豬耳標(biāo)號Private Sub TxtRFID_KeyPress(KeyAscii As Integer) On Error Resume Next If KeyAscii=vbKeyReturn Then
With DataEnvironment1.rsNumberSel
If.State<>adStateClosed Then
.Close
End If
DataEnvironment1.Commands(″NumberSel″).Parameters(0)=Trim(TxtRFID.Text)
.Open
TxtEarmark.Text=.Fields(″豬耳標(biāo)號″)
End With End IfEnd Sub一維條碼打印事件Private Sub CmdPrn_Click()Dim intI As IntegerDim i As IntegerintI=Val(Trim(TxtNumber.Text))For i=1To intI
Print A_CreatePrn(1,″a22″)
Print A_Set_Darkness(10)
Print A_Prn_Barcode(25,10,1,69,0,10,50,98,1,″A″& Mid(TxtEarmark.Text,7,9))
Print A_Prn_Text(20,70,1,4,0,1,1,110,2,TxtEarmark.Text)
Print A_Print_Out(1,1,1,1)
Call A_ClosePrn Next iEnd Sub。
全文摘要
本項(xiàng)發(fā)明涉及豬個(gè)體標(biāo)識的一種控制方法,屬于豬肉產(chǎn)品安全生產(chǎn)數(shù)字化管理控制領(lǐng)域。在生豬養(yǎng)殖階段采用二維條碼耳標(biāo),在生豬屠宰階段,由程序模塊完成二維條碼數(shù)據(jù)的保存;豬劈半后,在每一片肉上掛上一個(gè)無線射頻卡,作為電子標(biāo)識號,通過程序模塊完成耳標(biāo)號與電子標(biāo)識號的對應(yīng);當(dāng)肉進(jìn)入冷庫冷藏后,程序模塊轉(zhuǎn)換為一維條碼的信息打印貼在每一片豬肉上,完成豬肉生產(chǎn)各階段的個(gè)體標(biāo)識控制過程。本發(fā)明將相關(guān)硬件與系統(tǒng)管理軟件緊密結(jié)合。它既能夠適應(yīng)現(xiàn)代化豬場飼養(yǎng)管理要求,又能夠提供個(gè)體標(biāo)識的自動化水平,提高生產(chǎn)效率。同時(shí),它還可以通過軟件的網(wǎng)絡(luò)模塊實(shí)現(xiàn)個(gè)體標(biāo)識信息在不同階段的資源共享,為豬肉可追溯系統(tǒng)的實(shí)施提供條件。
文檔編號G06F17/00GK1716285SQ20051004010
公開日2006年1月4日 申請日期2005年5月20日 優(yōu)先權(quán)日2005年5月20日
發(fā)明者陸昌華, 謝菊芳, 王立方, 胡肄農(nóng) 申請人:江蘇省農(nóng)業(yè)科學(xué)院