Upload
barnard-wiggins
View
214
Download
0
Tags:
Embed Size (px)
Citation preview
Objectives
Overview of barcode/mobile applications Discussion of one such application
Requirements What would you do? Our solution
Barcode
A machine-readable representation of information in a visual format on a surface.
Store data in the width and spacing of parallel lines; patterns of dots; concentric circles; and hidden within images.
Improve speed and accuracy of data entry
From Wikipedia
Types of Barcodes
1-D
2-D
RFID Radio-frequency identification (RFID) is an automatic identification method, relying on storing and remotely retrieving data using devices called RFID tags or transponders.
Types of Barcode Scanners
USB/Keyboard Wedge (Non-batch) Directly connected to a PC
with an interface cable, transmits the decoded scan data, one scan at a time, directly into the keyboard buffer or USB port.
Some USB or Keyboard Wedge scanners have proprietary programming languages.
Examples: Symbol LS4208 or Symbol P304IMG Imager
Types of Barcode Scanners
Portable Memory Data Terminal (Batch) The operator carries the
scanner with them, but unlike other scanners, data can be batch uploaded. These devices vary greatly in price, memory capacity and optional features.
Examples: Symbol MC series, PPT 8800; Metrologic SP5500 Optimus S
Types of Barcode Scanners
Wireless, Cordless and Bluetooth The operator carries the
scanner with them and transmits the data wirelessly, one scan at a time. These scanners communicate with their own base station or with other Bluetooth-equipped devices.
Examples: Metrologic MS9535 Voyager, Symbol LS3478
Data Transfer and Storage
Serial inputs from COM/TCP ports (wedge) Wireless ActiveSync: Windows application using TCP
ports for data transfer
XML Database
Customer overview
The customer is a leading adult stem cell therapeutic company.
They develop and market products to treat medical conditions in the inflammatory, orthopedic, and cardiovascular areas.
Project overview
The customer wanted a Chain of Custody application to keep track of product units from manufacturing release through shipping.
The customer purchased a Laboratory Information Management System (LIMS) to do the recordkeeping.
The customer wanted to automate data input to the LIMS as an alternative to using lab notebooks and manual data entry.
Functional requirements Through LIMS, register product and assign
customer code Print and attach barcode labels to units and
locations User and reviewers scan their Id’s Move product from manufacturing to Work in
Progress location, scan unit and location Id’s Move product through several post-production
phases, scan product label at each location Update LIMS Generate packing list in LIMS
Environment Considerations
Customer could not implement wireless Customer did not want to implement a web service
for data transport No clean room scans 24x7, no onsite IT support for second and third
shifts Customer wanted a scanner that was double impact
tested and offered persistent storage Customer required some data validation at time of
scan
Challenges
Minimize need for tech support No wireless -> wired, batch upload required LIMS vendor prohibited direct database update Required some validation of scans (location,
number of scans/record, duplicate scans for one product)
Unit record consisted of multiple scans, but scans could be in any order, plus associated data
Unit Record
Scanned data User Id Unit Id Location (location) Id (verified against database) (Optional) comments (“unit moved in error”) (Optional) verifier Id
Non-scanned data Date and time of scan Date and time of verification
Decisions To Be Made Select mobile device
Optical Scanner Pocket PC
Select development environment for custom application Operating System Framework Language
Select data storage mechanism XML and/or database
Select data transport mechanism Wireless Web service Synchronization
Discussion
What decisions would you have made about Hardware? Data storage? Data transfer?
Additional considerations to complete system design?
We Decided
Pocket PC with its own local database Scans have unique formats to identify them Upload via ActiveSync Use XML as upload format
Project Tasks Design and print custom barcodes Develop Pocket PC application to capture user ids,
product unit Id’s and locations through barcode scans Design local database for Pocket PC Design XML file for data upload to the desktop via
ActiveSync Design desktop application to update the LIMS database
via proprietary API’s Design final post-processing “handshake” between
desktop and Pocket PC Write documentation
Implementation Details User scans their ID only once per session Verifier (optional) also scans their ID only once per session Scans have unique patterns to differentiate them Consecutive product id scans are compared; a warning message
is shown if not the same Last scan “of a type” is accepted Location scans are verified against a database on the PocketPC Final check for required scans/unit record
Pocket PC User Interface
Ability to clear unit and location scans in case of error
Each unit record is written to the database on Save, with current date and time
On Exit, an XML file is created of all unit records that have not yet been uploaded
Status bars to display State and error messages
Display no. of units scanned
Physical Elements of Our Solution
Barcode printing software Examples: BarTender, ID
Automation/Crystal Reports Barcode printer
Example: Zebra Scanner/data collectors
Software Elements of Our Solution
Windows Mobile 5.0 Operating System Microsoft Compact Framework SQL Mobile database XML file for unit records XML configuration files Error logs ActiveSync/RAPI Custom desktop application in C# Custom Pocket PC applications in C#
•Read user and verifier ids•Read and process scans•Write scans to local db•Create XML scans file•Dock, upload to PC
•User Login•ActiveSync Pocket PC•Update LIMS•Send confirmation
Process
Pocket PC Application Tasks Differentiate between different scans (user, verifier,
unit, location) In-memory storage of User and Verifier Ids Display error messages Verify location against local database, reject invalid
entry Check that data for each scan is complete Provide dropdown with optional comments Write unit records to local database Display number of units scanned Create XML data transfer file
Elements of the Desktop Application
Authenticate users through LIMS API Read data file from Pocket PC via ActiveSync Update LIMS database through LIMS API Notify Pocket PC that data has been
uploaded and database has been updated
Pocket PC Application Process Flow Open Windows Form Handle Scan Data
Determine scan type Store Unit data Hold UserId and VerifierId in memory
Assign State Display UI messages Display error messages Check final data Write to local database Create XML unit records file, close form
Desktop Process Flow
On completion of scans, user docks the PocketPC and logs in to the main LIMS system for authorization and authentication
On verification of user id, application checks through ActiveSync to see if PocketPC is docked
Application uploads XML scans file from PocketPC Application updates LIMS database Application calls second executable on PocketPC
which updates local database records and deletes XML scans file
Files and Documentation
Both the PocketPC and desktop have their own log files
Both the PocketPC and desktop have their own XML configuration files
Both the PocketPC and desktop have their own databases
End user document System test documents
State Machineprivate enum AppState { INIT, SCANUSER, SCANUNIT, SCANLOCATION, SCANVERIFIER, READYTOSAVE, CLEAR, ERROR, SAVINGDATA, SAVED, NOTSAVED, NOSTATE }
private void AppState_Set(AppState appState) { //Set the private global variable to the passed in value this._currentAppState = appState;
//Execute the state machine AppState_Set(); }
State Machine (cont’d)private void AppState_Set() { switch (_currentAppState) { case AppState.INIT: statusBar1.Text = "Scan your user id"; lblVersion.Text = Utilities.GetVersionInformation(); break; case AppState.SCANUNIT: lblUserId.Text = "User Id: " + userId; statusBar1.Text = "Scan unit"; break; case AppState.SCANLOCATION: lblUnit.Text = "Unit: "+sampleCode; statusBar1.Text = "Scan freezer/shelf"; break;
…..}
RefreshLabels(); }
AppState_Set(AppState.SCANLOCATION);
File Transfer via RAPI public DataSet GetDataSetFromHandheld() { DataSet ds = new DataSet(); RAPI myrapi = new RAPI(); if (myrapi.DevicePresent) { while (!myrapi.Connected) myrapi.Connect(true, 3); } if(myrapi.DeviceFileExists(ConfigurationManager.AppSettings.Get("RemoteSamplesXMLFile")))
//(@"\Application\ScannedSamples.xml")) { string localXMLFile=ConfigurationManager.AppSettings.Get("LocalSamplesXMLFile"); if(System.IO.File.Exists(localXMLFile)) System.IO.File.Delete(localXMLFile); myrapi.CopyFileFromDevice(localXMLFile,
ConfigurationManager.AppSettings.Get("RemoteSamplesXMLFile"));//@"C:\Testing\Scan_Unit_Date.txt",@"\Application\ScannedSamples.xml");
ds.ReadXml(ConfigurationManager.AppSettings.Get("LocalSamplesXMLFile")); } return ds; }
using System; using System.Collections.Generic; using System.Configuration; using System.Text; using System.Xml;
namespace PostProcessing { public class ReadXML {
public bool UpdateRecordsInXMLFile() { string samplecode = ""; string sampledate = ""; string sampletime = "";
string localXMLFile = Utilities.GetAppSetting("filePath"); XmlReaderSettings settings = new XmlReaderSettings(); settings.ConformanceLevel = ConformanceLevel.Auto; settings.IgnoreWhitespace = true; settings.IgnoreComments = true;
XmlReader reader = XmlReader.Create(localXMLFile,settings); try { string readerName = ""; while (reader.Read()) { if (reader.Name != "") readerName = reader.Name; if (reader.NodeType == XmlNodeType.Text && readerName == "samplecode") samplecode = reader.Value; else if (reader.NodeType == XmlNodeType.Text && readerName == "sampledate") sampledate = reader.Value; else if (reader.NodeType == XmlNodeType.Text && readerName == "sampletime") { sampletime = reader.Value; Utilities.SetUploadedToTrue(samplecode, sampledate, sampletime); Utilities.LogError("Successful update: " + samplecode + " " + sampledate + " " + sampletime); } } reader.Close(); return true; } catch(Exception exc) { reader.Close(); Utilities.LogError("ScanCleanup failed: " + exc.Message); throw new SystemException("ScanCleanup failed"); } }
XML Configuration File <?xml version="1.0" encoding="utf-8" ?> <configuration> <appSettings> <add key="filePath" value="/Application/ScannedUnits.xml" /> <add key=“locationsfilePath" value="/Application/Locations.xml" /> <add key="dbPath" value="/Application/Program Files/SQL Mobile/EN/" /> <add key="localDB" value=“mydb.sdf" /> <add key="localPWD" value=“password" /> </appSettings> </configuration>
Excerpt from the User Doc Using the Handheld The handheld is turned on by holding down the power button on the upper right corner. Scanning is accomplished by pushing one of the three yellow buttons on the front and side of the handheld. The stylus may be used to tap or select objects on the screen. Before uploading the scans, the user must ensure that the handheld is firmly docked. The middle top orange light will be on
when the unit is properly docked. A Microsoft program called ActiveSync manages the connection between the PC and the handheld. If ActiveSync is
working correctly, there will be a bright green icon in the PC’s taskbar (lower right corner of the monitor display). It may take several seconds after docking for the PC and the handheld to “synch up”. This is normal. The handheld has persistent storage of data; as long as the user has properly saved and exited from the program, their data
will be saved. So, if the handheld loses power, saved data is protected. The handheld should be docked when it is not in use. Troubleshooting the Handheld If necessary, the handheld can be warm booted by holding down the power button in the upper right hand corner until the
warm boot screen is displayed. The handheld can be cold booted by simultaneously holding down the 1 and 9 keys and the power button.
If necessary, the application can be closed by clicking on the “x” in the upper right hand corner. In that case, any scans that have not been saved will be lost.
The application keeps an error log in File Explorer->Application/ErrorLog In the event assistance is needed with the application, Tech Support may ask for a copy of this error log file.
The application includes a SQL Server Mobile database, also located in FileExplorer->Application. Only IT personnel are permitted to view or change this database, and only at the direction of the vendor.
The application uses a file called Configuration.xml. This file must not be changed unless directed by the vendor. Please refer to the manufacturer’s documentation for information on maintenance and handling of the Pocket PC.
Excerpt from the Testing Docs Test Identification Title : Accurately decode scanned data Test Reference No. : PR001/001 Objective of Test This test will ensure that data is decoded accurately Description of Sub Tests The following sub tests will be performed. Normal startup Correctly decode unit id scan Flag dissimilar consecutive unit id scans Correctly decode verifier id scan Correctly decode location id scan Correctly decode performer id scan Clear scans
Preparation for test Start the application from the drop down link on the handheld.
Development Setup VS 2005 Windows Mobile 5.0 Operating System .NET Compact Framework 2.0 SQL Server 2005 Mobile Edition ActiveSync 4.2 (deprecated by VISTA) Windows Mobile 5.0 SDK for PocketPC (6.0 March 2007) Windows Mobile 5.0 Developer Resource Kit http://www.microsoft.com/downloads/details.aspx?FamilyID=3ba
a5b7d-04c1-4ec2-83dc-61b21ec5fe57&DisplayLang=en Windows Mobile 6.0 SDK:
http://www.microsoft.com/downloads/details.aspx?FamilyID=06111a3a-a651-4745-88ef-3d48091a390b&DisplayLang=en
System Requirements Supported Operating Systems: Windows Mobile 2002 software
for Pocket PCs; Windows Mobile 2003 software for Pocket PCs; Windows XP
1.5 GHz computer with 512 MB of RAM, supporting at least 1024 x 768 resolution and 32-bit color
Microsoft Windows 2000 Service Pack or later, or Microsoft Windows XP Service Pack 2 or later
Microsoft Internet Explorer version 5.0 or later
Visual Studio 2005 Standard Edition or higher