Cognex移动条形码SDK(cmbSDK)是一个用于开发手机条码扫描应用程序的工具。CmbSDK基于Cognex, DataMan技术和海牛的条形码扫描SDK允许您创建应用程序适合移动设备上的条形码扫描。移动设备用于条形码扫描支持智能手机、平板电脑和MX系列工业条形码阅读器。CmbSDK抽象设备通过一个CMBReaderDevice连接层。一旦应用程序建立连接与读者,一个单一的、统一的API作为接口配置设备,没有写太多的条件代码。
CmbSDK提供了两个基本CMBReaderDevice连接层:
cmbSDK支持Cognex使用cmbSDK MX系列移动终端的特性:
提交一个请求https://cmbdn.cognex.com/mfi/apply对于每一个iOS应用程序你想发布到应用商店。您可以创建MFi请求提前当应用程序名称和包ID是固定的,这样就可以加快后来发布流程应用程序商店。
一旦你的MFI产品计划处理请求,你通知通过电子邮件关于进一步措施,在这段时间里,你可以提交你的应用直接苹果。
更新你的app Store应用笔记之前提交:
你的移动设备(手机、平板电脑)连接到你的电脑通过USB或者闪电港口开始调试。如果一个MX移动终端连接到你的移动设备通过USB或者闪电端口,而您的应用程序正在运行,您需要调试应用程序通过wi - fi。
先决条件:
如果您运行您的应用程序在XCode,确保你的设备通过闪电电缆,使插入通过网络连接在你的移动设备:
现在你可以关闭设备窗口并开始调试应用程序不使用闪电有线或USB。
先决条件。
启动应用程序后,您可以安全地拔掉,继续你的调试会话wi - fi。
没有硬件触发,移动设备必须使用替代方法进行条码扫描。cmbSDK支持三种方法来触发条码扫描:
内置摄像头提供直播预览显示的移动设备,可以在部分或全部屏幕中,横向或纵向,条形码的目标。重新定位的移动设备,直到条形码出现在视野的内置摄像头和解码应用程序。
cmbSDK支持被动埃梅认为:设备连接到移动设备或设备的情况下,使用LED闪光灯作为光源项目目标或目标模式。移动设备可以项目瞄准手的模式类似于专用扫描仪所以不需要在线预览。
此外CmbSDK支持积极瞄准手,有自己的内置led照明和目标:mx - 100条形码阅读器。的mx - 100是一个移动设备配件iOS智能手机连接到移动设备与移动设备的情况。mx - 100项目的内置了一个绿点,帮助阅读条形码。
cmbSDK支持肖像取向、横向和自动旋转的表示条码预览和扫描方向。移动设备最能扫描条形码不管应用程序和移动设备的方向。
为更好的读性能读取QR数据矩阵,和Maxicode肖像取向,并在横向长码PDF417。
cmbSDK为移动环境优化,但图像分析和条码解码仍然是CPU密集型活动。由于这些进程共享CPU的移动设备的移动操作系统(OS),服务,和其他应用程序,以下流程优化你的条形码扫描应用程序并限制它只使用cmbSDK,他们需要的功能。
优化你的应用程序:
设置您的应用程序使用iOS cmbSDK:
打开XCode,开始一个新项目。
* SystemConfiguration.framework * AVFoundation.framework * CoreGraphics.framework * CoreMedia.framework * CoreVideo.framework * MediaPlayer.framework * Security.framework * AudioToolbox.framework * cmbSDK.framework
去您的项目Info.plist文件并添加隐私,摄像头的使用说明或NSCameraUsageDescription显示消息应用程序如何使用相机用户的移动设备。
如果您使用的是cmbSDK MX移动终端,您还需要添加支持外部附属协议或UISupportedExternalAccessoryProtocols来com.cognex.dmcc在你的项目的Info.plist。(你必须创建一个小额信贷机构请求之前,在这种情况下发布你的应用在苹果应用商店。你可以阅读更多细节让你的MX支持移动终端的应用程序到应用程序商店部分。)
cmbSDK设计提供一个高层次、抽象接口支持扫描设备。这不仅包括移动终端的MX系列,也打算使用移动设备的应用程序相机成像设备。错综复杂的沟通和管理这些设备本身就是封装在SDK:离开应用程序连接到设备的选择,然后使用它。
主应用程序之间的接口和一个支持条形码扫描设备CMBReaderDevice类。这个类代表设备本身的抽象层,处理所有通信以及任何必要的硬件管理(例如,智能手机扫描)。
使用cmbSDK执行以下步骤:
初始化一个阅读器设备类型的设备你想使用:MX读者或相机。
读者设备连接。
配置读者(如果需要)。
开始扫描。
初始化、连接和配置通常在您的应用程序只需要执行一次,除了以下情况:
初始化CMBReaderDevice使用一个MX移动终端像MX - 1000 MX - 1100,或MX - 1502很容易:简单地创建读者设备使用MX设备方法(它不需要参数),并设置适当的委托(通常自我):
让readerDevice: CMBReaderDevice = CMBReaderDevice.readerOfMX () readerDevice.delegate =自我
CMBReaderDevice * readerDevice = [CMBReaderDevice readerOfMXDevice];readerDevice.delegate =自我;
MX移动终端的可用性可以改变设备打开或关闭时,或如果闪电电缆连接或断开连接。你可以使用以下处理这些变化CMBReaderDeviceDelegate方法。
func availabilityDidChange (ofReader读者:CMBReaderDevice)
- (void) availabilityDidChangeOfReader: (CMBReaderDevice *)读者
如果你想连接到Cognex设备在网络上(e。g手持或固定架)必须使用另一个命名为框架NetworkDiscovery。这个框架可以在cmbSDK包。
条形码扫描内置摄像头的移动设备可以更复杂的比一个MX移动终端。因此cmbSDK支持多个配置提供最大的灵活性,包括可选的外部支持埃梅还和照明,以及能够定制的外观直播预览。mx - 100是一个外部设备为您的iPhone,我们称之为主动瞄准手。
扫描条形码使用mx - 100或移动设备的内置摄像头,初始化CMBReaderDevice对象使用readerOfDeviceCameraWithCameraMode静态方法。相机初始化时读者有几个选项。需要以下参数:
* CDMCameraMode * CDMPreviewOption * UIView
的CameraMode参数的类型CDMCameraMode(定义在CDMDataManSystem.h),它接受下列值之一:
上面的模式为移动设备提供以下默认设置代码的读者:
基于所选择的模式,以下附加选项设置和行为:
的previewOptions类型的参数(CDMPreviewOption中定义的,CDMDataManSystem.h)是用来改变读者的默认值或覆盖默认值来自所选的CameraMode。可以指定多个选项和ing时传递参数。可用的选项如下:
kCDMPreviewOptionHighResolution:使用该设备在高分辨率相机帮助小条形码扫描,但缓慢的解码时间。选择分辨率设置为1920 x1080设备上支持它,和默认的设备上没有。默认的分辨率为1280 x720。
例子:
创建一个读者没有瞄准手和一个全屏幕直播预览:
让readerDevice: CMBReaderDevice = CMBReaderDevice。readerOfDeviceCamera (: CDMCameraMode。noAimer previewOptions: CDMPreviewOption。init (rawValue: 0), previewView: nil) readerDevice.delegate =自我
CMBReaderDevice * readerDevice = [CMBReaderDevice readerOfDeviceCameraWithCameraMode: kCDMCameraModeNoAimer previewOptions: kCDMPreviewOptionDefaults previewView: nil);readerDevice.delegate =自我;
创建一个读者没有瞄准手,没有变焦按钮,并使用一个模拟触发:
让readerDevice: CMBReaderDevice = CMBReaderDevice。readerOfDeviceCamera (: CDMCameraMode。noAimer previewOptions: [CDMPreviewOption。noZoomBtn CDMPreviewOption。hwTrigger], previewView: nil) readerDevice.delegate =自我
CMBReaderDevice * readerDevice = [CMBReaderDevice readerOfDeviceCameraWithCameraMode: kCDMCameraModeNoAimer previewOptions: (kCDMPreviewOptionNoZoomBtn | kCDMPreviewOptionHwTrigger) previewView: nil);readerDevice.delegate =自我;
初始化CMBReaderDevice并设置一个委托处理来自读者的响应。
然后连接使用connectWithCompletion:
/ /确保设备打开,如果self.readerDevice准备。可用性= = CMBReaderAvailibilityAvailable{/ /创建对象和设备self.readerDevice readerDevice之间的连接。连接(完成:{(错误:错误?)如果错误! = nil{/ /处理连接错误}})}
/ /确保设备打开,如果(readerDevice准备。可用性= = CMBReaderAvailibilityAvailable){/ /创建readerDevice之间的连接对象和设备(readerDevice connectWithCompletion: ^ (NSError *误差){如果(错误){/ /处理连接错误}});}
当连接connectionStateDidChangeOfReader在调用委托,你可以检查你的读者设备的连接状态connectionState参数。它应该是CMBConnectionStateConnected,这意味着您已经成功连接CMBReaderDevice,就可以开始使用Cognex移动条形码SDK。
更改一些设置在连接到设备cmbSDK提供了一组高级设备独立api来设置和检索当前配置的设备。
使用一个MX读者之间的差异和扫描相机的读者是下面几节详细讨论。
移动终端的MX的家庭提供了先进的设备配置和管理包括在设备上保存配置。MX设备来Cognex预配置与大多数象征学和功能可以使用了。
如果你想自定义配置,配置通过,DataMan设置工具,或Cognex快速设置。这两个工具都容易保存配置分发给多个设备进行简单的配置管理。
移动应用程序能够配置MX设备给你选择:
cmbSDK雇佣了一个默认的选项集条码阅读的内置摄像头的移动设备。然而,要记住的有两个重要的差别:
mx - 100是device-case附件仅供iphone提供了额外的功能的内置摄像头瞄准能力和更好的照明控制等。MX的混合动力装置,内置扫描仪,瞄准手的MX - 100有设置强度、光照强度,并瞄准手调制存储在设备上,而其他的设置,如象征学设置,存储在cmbSDK。看到mx - 100用户指南为更多的信息。
这里有几件事要记住当使用一个mx - 100设备:
个人象征学可以启用使用以下的方法CMBReaderDevice对象:
- (void) setSymbology: (CMBSymbology)符号:启用(bool)启用完成:(空白(^)(NSError *误差))completionBlock;
所有用于符号象征学参数在此方法中可以找到CMBReaderDevice.h。
例子
self.readerDevice。setSymbology (CMBSymbologyQR启用:真的,完成:{(_错误:错误?)- >空白如果错误! = nil{/ /未能使符号学,可能的原因是:读者断开连接,电池或电缆不插电,或标记不支持当前readerDevice}})
[readerDevice setSymbology: CMBSymbologyQR启用:是的完成:^ (NSError *误差){如果(错误){/ /未能使符号学,可能的原因是:读者断开连接,电池或电缆不插电,或标记不支持当前readerDevice}});
同样的方法也可以用来关闭象征学:
self.readerDevice。setSymbology (CMBSymbologyUpcEan启用:假的,完成:{(_错误:错误?)- >空白如果错误! = nil{/ /未能使符号学,可能的原因是:读者断开连接,电池或电缆不插电,或标记不支持当前readerDevice}})
[readerDevice setSymbology: CMBSymbologyUpcEan启用:没有完成:^ (NSError *误差){如果(错误){/ /未能使符号学,可能的原因是:读者断开连接,电池或电缆不插电,或标记不支持当前readerDevice}});
如果你的读者设备配备照明(例如发光二极管),您可以控制是否打开或关闭扫描开始时使用以下的方法CMBReaderDevice对象:
self.readerDevice.setLightsON(真正的){(错误:错误?)如果错误! = nil{/ /未能使照明,可能的原因是:读者断开连接,电池或电缆不插电,或设备没有附带照明灯光}}
[readerDevice setLightsON:是的完成:^ (NSError *误差){如果(错误){/ /未能使照明,可能的原因是:读者断开连接,电池或电缆不插电,或设备没有附带照明灯光}});
请记住,并不是所有的设备和设备支持的模式cmbSDK允许照明控制。例如,如果使用内置摄像头在被动瞄准手模式中,照明因为领导不在被用于瞄准。
如果使用内置摄像头作为读者设备配置的缩放级别的可能性和定义的方式使用这些缩放级别。
有三个缩放级别的手机相机,这是:
您可以定义这些缩放级别与“相机。ZOOM-PERCENT [100 - max] [100 - max)”命令。它配置两个层面将放大多少百分比。100没有变焦,马克斯(上升到1000)将放大的设备的能力。第一个参数用于设置一级放大,而第二个二级放大。
当你想要检查当前的设置,你可以与“相机。ZOOM-PERCENT”返回两个值:1级和2级放大。
例子
readerDevice.dataManSystem () ?。sendCommand(“设置相机。ZOOM-PERCENT 250 500”)
[readerDevice。dataManSystem sendCommand: @”设置相机。ZOOM-PERCENT 250 500”);
这是另一个命令,设置您想要使用的缩放级别或返回的实际设置:“获取/设置相机。变焦0 - 2”。
SET命令可能的值是:
你可以叫这个命令之前扫描甚至在扫描过程中,缩放上升到配置水平。
当扫描完成后,值重置为正常(0)。
例子
readerDevice.dataManSystem () ?。sendCommand(“设置相机。放大2”)
[readerDevice。dataManSystem sendCommand: @”设置相机。放大2”);
当使用移动设备的内置camrea, cmbSDK允许你看到相机预览在容器或在全屏预览。这个预览版还包含一个覆盖,可以定制。cmbSDK相机覆盖由变焦按钮,flash,关闭扫描仪(全屏),进度条显示扫描超时,线条的相机预览。有两种可用的覆盖:遗产和招商银行覆盖。
使用传统相机覆盖,cmbSDK v2.0中使用。xand the ManateeWorks SDK, use this property from MWOverlay before initializing theCMBReaderDevice:
MWOverlay.setOverlayMode (Int32 (OM_LEGACY.rawValue))
[MWOverlay setOverlayMode OM_LEGACY):;
如果使用招商银行的叠加,可以发现资源/布局的布局文件目录:必威随行版官网
CMBScannerPartialView.xib使用扫描仪时开始在容器(部分视图)
CMBScannerView.xib当扫描仪始于全屏
你需要复制的布局文件,或两个布局,然后修改它们。改变大小,位置和颜色的观点,删除视图,并添加您自己的观点,就像一个覆盖图像。使用的视图cmbSDK(缩放、flash,关闭按钮,视图用于绘制线条的角落,和进度条)是由sdk访问使用标签属性,确保标签属性保持不变,所以cmbSDK能够认识到视图和继续正常工作。
招商银行和遗留覆盖允许您更改使用的图像缩放和flash按钮。要做到这一点,首先复制文件夹以外的资产MWBScannerImages.xcassets从资源dir到您的必威随行版官网项目。在XCode中你可以看看这个资产中包含的图片文件夹,并代之以自己的同时保持图像的名字不变。
招商银行和遗留覆盖允许您更改的颜色和宽度矩形显示当一个条形码检测。这里有一个例子怎么做:
MWOverlay.setLocationLineUIColor (UIColor.yellow) MWOverlay.setLocationLineWidth (5)
[MWOverlay setLocationLineUIColor UIColor.yellowColor):;[MWOverlay setLocationLineWidth: 5];
每个Cognex扫描装置实现,DataMan控制命令(DMCC)、配置和控制设备的方法。几乎所有设备的特性可以控制使用这个基于文本的语言。API提供了一种方法将DMCC命令发送到设备。命令设置和查询配置属性存在。
附录A包括完整的DMCC使用相机的读者参考。DMCC命令支持对其他设备(如mx - 1000)中包含的文档的特定设备。
附录B为相机读者提供默认值的配置设置相应DMCC相关设置。
下面的例子展示不同DMCC命令发送到设备更先进的配置。
例子:
全向改变扫描方向:
self.readerDevice.dataManSystem () ?。sendCommand(“设置解码器。1D-SYMBOLORIENTATION 0", withCallback: { (response:CDMResponse?) in if response?.status == DMCC_STATUS_NO_ERROR { // Command was executed successfully } else { // Command failed, handle errors here } })
[readerDevice。dataManSystem sendCommand: @“设置DECODER.1D-SYMBOLORIENTATION 0”withCallback: ^ (CDMResponse *响应){如果(响应。状态= = DMCC_STATUS_NO_ERROR){/ /命令成功执行}其他{/ /命令失败,处理错误}});
改变扫描直播预览到10秒的超时:
self.readerDevice.dataManSystem () ?。sendCommand(“设置解码器。MAX-SCAN-TIMEOUT 10”, withCallback:{如果反应(响应:CDMResponse ?) ?。状态= = DMCC_STATUS_NO_ERROR其他{/ /命令成功执行}{/ /命令失败,处理错误}})
[readerDevice。dataManSystem sendCommand: @”设置解码器。MAX-SCAN-TIMEOUT 10“withCallback: ^ (CDMResponse *响应){如果(响应。状态= = DMCC_STATUS_NO_ERROR){/ /命令成功执行}其他{/ /命令失败,处理错误}});
连接设备的类型:
self.readerDevice.dataManSystem () ?。sendCommand(“设备。类型”,withCallback:{如果反应(响应:CDMResponse ?) ?。状态= = DMCC_STATUS_NO_ERROR{/ /命令成功执行让deviceType:字符串=反应?。其他载荷}{/ /命令失败,处理错误}})
[readerDevice。dataManSystem sendCommand: @”设备。类型“withCallback: ^ (CDMResponse *响应){如果(响应。状态= = DMCC_STATUS_NO_ERROR){/ /命令成功执行NSString * deviceType = response.payload;其他}{/ /命令失败,处理错误}});
cmbSDK包括重置设备其默认设置的方法。对于一个MX移动终端,这是配置保存在默认情况下,在内置摄像头的情况下,这些违约标识在附录B,象征学不会启用。该方法如下:
self.readerDevice。resetConfig{(错误:错误?)如果错误! = nil{/ /重置配置失败,可能原因是:读者断开连接,电池或电缆不插电}}
[readerDevice resetConfigWithCompletion: ^ (NSError *误差){如果(错误){/ /重置配置失败,可能原因是:读者断开连接,电池或电缆不插电}});
正确配置的读者,你准备扫描条形码。这是通过调用来完成startScanning ()方法从你CMBReaderDevice对象。接下来会发生什么是基于类型的CMBReaderDevice和它如何被配置。一般来说:
扫描停止在下列条件之一:
当条码解码成功,你将收到一个CMBReadResults在你的数组CMBReaderDevice的委托使用以下CMBReaderDeviceDelegate方法:
func didReceiveReadResult (fromReader读者:CMBReaderDevice,结果readResults: CMBReadResults !)
- (void) didReceiveReadResultFromReader:读者(CMBReaderDevice *)结果:readResults (CMBReadResults *);
只显示一个ReadResult扫描条码后:
func didReceiveReadResult (fromReader读者:CMBReaderDevice,结果readResults: CMBReadResults !)如果readResults.readResults {。数> 0{让readResult: CMBReadResult = readResults.readResults ?。首先是!如果readResult CMBReadResult。图像!= nil { self.ivPreview.image = readResult.image } if readResult.readString != nil { self.lblCode.text = readResult.readString } } }
- (void) didReceiveReadResultFromReader: (CMBReaderDevice *)结果:读者(CMBReadResults *) readResults{如果(readResults.readResults。数> 0){CMBReadResult * readResult = readResults.readResults.firstObject;如果(readResult.image) {self.ivPreview。形象= readResult.image;如果(readResult.readString) {self.lblCode}。文本= readResult.readString;}}}
在上面的示例中,ivPreview是一个UIImageView用于显示图像的条码扫描,然后呢lblCode是一个从条形码UILabel用来显示结果。您还可以使用布尔值readResult.goodRead检查扫描是否成功与否。
当一个成功读取条形码,CMBReadResult对象创建和返回的didReceiveReadResultFromReader:结果:方法。如果有多个条形码成功读取单个图像/框架上,多个CMBReadResult对象返回。这就是为什么CMBReadResults类的数组CMBReadResult对象包含所有结果。
的CMBReadResult类的属性描述条形码读取的结果:
扫描结束后,没有成功的阅读,一个CMBReadResult返回的goodRead属性设置为false。这通常发生在扫描取消或超时。
使图像和imageGraphics属性被填满CMBReadResult对象,您必须设置相应的imageResultEnabled和/或SVGResultEnabled的属性CMBReaderDevice对象。
看到一个例子如何使用图像和SVG图形并显示在平行,参考SDK提供的示例应用程序包。
访问原始字节从扫描条形码,可以使用XML属性。字节存储作为Base64字符串“full_string”标签下。这里有一个例子如何使用iOS XML解析器来提取原始字节从XML属性。
例子:
解析XML并提取Base64字符串使用完成xmlparse
/ / XMLParserDelegate var currentElement = " " var base64String = "函数解析器(_解析器:xmlparse didStartElement elementName:字符串,namespaceURI:字符串?,qualifiedName qName:字符串?、属性attributeDict:[字符串:String] = [:]) {currentElement = elementName}函数解析器(_解析器:xmlparse foundCharacters字符串:字符串){如果currentElement = =“full_string”{base64String =字符串}}
# pragma NSXMLParserDelegate NSString * currentElement;NSString * base64String;- (void)解析器:(NSXMLParser *)解析器didStartElement: (NSString *) elementName namespaceURI: (NSString *) namespaceURI qualifiedName: (NSString *) qName属性:(NSDictionary < NSString *、NSString * > *) attributeDict {currentElement = elementName;}- (void)解析器:(NSXMLParser *)解析器foundCharacters:字符串(NSString *){如果([currentElement isEqualToString: @ " full_string "]) {base64String =字符串;}}
后设置XMLParserDelegate从XML提取base64字符串的结果,您需要创建一个xmlparse对象和解析结果。xml使用这个委托。可以当收到扫描的结果CMBReaderDeviceDelegate,或者当访问CMBReadResult对象。这是如何得到原始字节使用前面创建的委托:
让xmlparse: xmlparse = xmlparse。init(数据:result.xml) xmlParser.delegate =自我如果xmlParser.parse(){/ /通过该变量让字节:访问原始字节数据?=数据。init (base64Encoded: base64String)}
NSXMLParser * xmlparse = [NSXMLParser。alloc initWithData result.XML):;xmlParser.delegate =自我;如果([xmlparse解析]){/ /通过该变量访问原始字节NSData *字节= [NSData。alloc initWithBase64EncodedString: base64String选项:0);}
默认情况下,图像和SVG的结果被禁用,这意味着,当扫描,CMBReadResults不会包含任何数据在相应的属性。
使图像结果,设置imageResultEnabled属性从CMBReaderDevice类通过使用下面的方法:
self.readerDevice。imageResultEnabled= true
[readerDevice setImageResultEnabled:是的);
使SVG的结果,设置imageResultEnabled属性从CMBReaderDevice类通过使用下面的方法:
self.readerDevice。svgResultEnabled = true
[readerDevice setSVGResultEnabled:是的);
可能存在情况下断开设备由于电池电量不足情况或手动电缆断开。这种情况下可以检测到的connectionStateDidChangeOfReader回调的CMBReaderDeviceDelegate。
回到您的应用程序免受非活动状态后,读者设备仍是初始化但没有连接。不需要重新初始化SDK,但你需要贯通。
iOS版本恢复时将发送一个“可用性”通知的应用程序可用的外部配件。你可以使用这个CMBReaderDeviceDelegate方法:(空白)availabilityDidChangeOfReader: w (CMBReaderDevice *)读者母鸡读者可用,你可以连接。
例如:
func availabilityDidChange (ofReader读者:CMBReaderDevice){如果读者。可用性= = {readerDevice CMBReaderAvailibilityAvailable)。连接(completion: { error in if error != nil { // handle connection error } }) } }
- (void) availabilityDidChangeOfReader:{如果(readerDevice (CMBReaderDevice *)读者。可用性= = CMBReaderAvailibilityAvailable) {[readerDevice connectWithCompletion: ^ (NSError *误差){如果(错误){/ /处理连接错误}});}}
一些iOS版本不报告的可用性变化对简历,所以你需要手动处理这个问题。添加一个观察者UIApplicationDidBecomeActiveNotification和连接。
例子:
覆盖func viewDidLoad () {super.viewDidLoad() / /重新连接时应用简历NotificationCenter.default.addObserver(自我,选择器:#选择器(self.appBecameActive)名称:NSNotification.Name。UIApplicationDidBecomeActive,对象:nil)} / /处理程序恢复func appBecameActive(){如果readerDevice ! = nil & & readerDevice。= = CMBReaderAvailibilityAvailable & & readerDevice可用性。connectionState!= CMBConnectionStateConnecting && readerDevice.connectionState != CMBConnectionStateConnected { readerDevice.connect(completion: { error in if error != nil { // handle connection error } }) } }
- (void) viewDidLoad{/ /重新连接,当应用程序恢复[[NSNotificationCenter defaultCenter] addObserver:自我选择器:@ selector (appBecameActive)名称:UIApplicationDidBecomeActiveNotification对象:nil);}/ /处理程序的简历- (void) appBecameActive{如果(readerDevice ! = nil & & readerDevice。= = CMBReaderAvailibilityAvailable & & readerDevice可用性。connectionState!= CMBConnectionStateConnecting && readerDevice.connectionState != CMBConnectionStateConnected) { [readerDevice connectWithCompletion:^(NSError *error) { if (error) { // handle connection error } }]; } }
下表列出了各种DMCC cmbSDK支持的命令在使用条形码扫描的内置摄像头。
获取/设置 |
命令 |
参数(年代) |
描述 |
默认值 | 设备只重置? | MX终端 |
mx - 100 |
---|---|---|---|---|---|---|---|
得到 |
BATTERY.CHARGE |
(0 - 100) |
显示当前电池电量百分比。 |
N /一个 | x |
||
哔哔的声音 |
重复 (0 - 3) 水平 (0 - 2) |
嘟嘟声(音)。 |
N /一个 | x |
|||
获取/设置 |
BEEP.GOOD |
数量的哔哔声 (0 - 3) beep语气 (0 - 2) |
集的哔哔声,哔哔声/音调:低、中、高。 内置摄像头,只有一个支持beep没有音调控制。 0 1的哔哔声,1 1的哔哔声。 |
1打开哔哔声 |
x |
||
获取/设置 | CAMERA.ZOOM | 0 - 2 | SET命令的值是: 0 -正常(无缩放) 1 - 1级放大, 2 - 2级放大。 在扫描过程中使用缩放级别。扫描结束时缩放级别重置为0。 |
N /一个 | |||
获取/设置 | CAMERA.ZOOM-PERCENT | 1级 (100 - max) 2级 (100 - max) |
返回或者设置相机变焦的百分比: 1级:默认200% 2级:默认400%
注意:确保启动相机至少一次的SDK为马克斯变焦能力有一个正确的价值(max)。 |
N /一个 | |||
获取/设置 |
CODABAR.CODESIZE |
任何 最小值 马克斯 |
接受任何长度Codabar |关闭。 (1-max)集最小接受Codabar的长度 |
N /一个 | x | ||
获取/设置 | CODABAR.QZ-SIZE | 0 - 100 | 安静区单严格的大小。 | 50 | X | ||
获取/设置 | CODABAR.VERIFICATION | (|关闭) | 结果验证Codabar条形码开/关。 | 在 | |||
获取/设置 |
C11.CHKCHAR |
(|关闭) |
把代码11检查开/关。 |
从 | |||
获取/设置 |
C11.CHKCHAR-OPTION |
(0 - 1) |
0:禁用需要单一的校验和。 |
1 | x | ||
获取/设置 |
C11.CODESIZE |
任何 最小值 马克斯 |
(|关闭)接受任何长度代码11。 [1-max]设定最小长度接受代码11。 |
N /一个 | x | ||
获取/设置 | C11.VERIFICATION | (|关闭) | 把验证代码11条形码开/关。 | 在 | |||
获取/设置 | C128.VERIFICATION | (|关闭) | 把验证代码11条形码开/关。 | 在 | |||
获取/设置 |
C25.CODESIZE |
任何 最小值 马克斯 |
25代码大小。cmbSDK,所有代码25变体使用相同的最小长度;因此它会接受这件。CODESIZE或I205.CODESIZE。 (|关闭)接受任何长度代码25。 (1-max)集25分钟接受代码的长度。 |
N /一个 | x | ||
获取/设置 | C25.QZ-SIZE | 0 - 100 | 安静区单严格的大小。注意,这件。QZ-SIZE I2O5。QZ-SIZE设置摄像头API是相同的。 | 50 | X | ||
获取/设置 | C25.VERIFICATION | |关闭 | 把验证代码25和交叉2 5条形码的开/关。 | 在 | |||
获取/设置 |
C39.ASCII |
(|关闭) |
把代码39扩展ASCII开/关。 |
从 | x |
||
获取/设置 |
C39.CODESIZE |
任何 最小值 马克斯 |
(|关闭)接受任何长度代码39。 [2 | 4-max]集最小接受了39码的长度。(2是使用摄像头API的最低,4是用于MX移动终端) 设置codesize 2 - 3是有风险的,因为它可能导致误读。 |
N /一个 | x |
||
获取/设置 |
C39.CHKCHAR |
(|关闭) |
39校验字符代码。 |
从 | x |
||
获取/设置 | C39.VERIFICATION | (|关闭) | 把验证代码39条形码开/关。 | 在 | |||
获取/设置 |
C93.ASCII |
(|关闭) |
把代码93扩展ASCII开/关 |
从 | |||
获取/设置 |
C93.CODESIZE |
任何 最小值 马克斯 |
(|关闭)接受任何长度代码93。 [1-max]设定最小长度接受代码93。 |
N /一个 | x |
||
获取/设置 | C93.VERIFICATION | (|关闭) | 把验证代码93条形码开/关。 | 从 | |||
CONFIG.DEFAULT |
重置的大多数相机API设置默认值。设备标识和通讯设置没有改变。重置所有设置,使用DEVICE.DEFAULT。 |
N /一个 | x |
||||
CONFIG.SAVE | 保存当前配置非易失性内存(仅MX-1xxx)。注意,当一个MX权力或进入睡眠模式,最后保存配置时恢复设备醒来。 | N /一个 | |||||
CONFIG.RESTORE | 恢复已保存的配置从非易失性内存(仅MX-1xxx)。 | N /一个 | |||||
获取/设置 |
DATA.RESULT-TYPE |
0 1 2 4 8 |
指定结果返回多个值(金额):没有 文本字符串的结果(默认) XML结果 XML数据 扫描图像(见图片。*命令) |
1 | x |
||
获取/设置 |
DATABAR.EXPANDED |
(|关闭) |
把DataBar扩展标记开/关。 |
从 | x |
||
获取/设置 |
DATABAR.LIMITED |
(|关闭) |
开启/关闭DataBar有限的象征。 |
在 | x |
||
获取/设置 |
DATABAR.GROUP DATABAR.RSS14 |
(|关闭) |
之前把DataBar集团(cmbSDK 2.4.2称为RSS14)符号学开/关。 |
从 | x |
||
获取/设置 |
DATABAR.RSS14STACK |
(|关闭) |
把DataBar RSS14堆叠象征的开/关。弃用从cmbSDK 2.4.2,使用DATABAR。集团。 |
从 | |||
获取/设置 | DATABAR.VERIFICATION | (|关闭) | 结果验证Databar条形码开/关。 | 在 | |||
获取/设置 |
DECODER.1D——SYMBOLORIENTATION |
0 1 2 3 |
使用全向扫描方向。 使用水平和垂直扫描方向。 使用垂直扫描方向。 使用水平扫描方向。 |
1 | x |
||
获取/设置 | DECODER.CENTERING-WINDOW | (0 - 100) (0 - 100) (0 - 100) (0 - 100) |
定心窗口的位置和大小的百分比传感器大小。 定心窗口的中心水平比例 中心垂直中心窗口的百分比 横向尺寸比例的定心窗口 垂直尺寸的百分比定心窗口 |
x | x | ||
获取/设置 | DECODER.DISPLAY-TARGET | (|关闭) | 图形显示定心窗口。 | 从 | x | x | |
获取/设置 |
DECODER.EFFORT |
(0 - 5) |
集图像分析/解码的努力水平。
注意:不要使用4 - 5为在线扫描。 |
2 | |||
获取/设置 |
译码器。MAX-SCAN——超时 |
(0 - 120) |
设置超时时间直播预览。当达到超时时,解码是停了下来,直播预览仍将屏幕上的。 |
60 | |||
得到 | DECODER.MAX-THREADS | 返回的最大数量的CPU线程支持的设备。 | N /一个 | ||||
获取/设置 | DECODER.REREAD-TIME | (0 - 10000) | 代码重读延迟毫秒。 | 1000年 | x | x | |
获取/设置 | DECODER.ROI-PERCENT | (0 - 100) (0 - 100) (0 - 100) (0 - 100) |
的位置和大小的相机视图的比例大小: 中心水平比例的ROI 规模水平作为ROI的百分比 中心垂直percetage的ROI 垂直尺寸比例的ROI |
N /一个 | x | ||
获取/设置 | DECODER.TARGET-DECODING | (|关闭) | 使目标解码,读代码与目标解码重叠窗口。 | 从 | x | x | |
获取/设置 | DECODER.THREADS-USED | (0-MAX) | 指定的最大数量的CPU线程扫描仪在扫描过程中可以使用。 | N /一个 | |||
获取/设置 | DECODER.USE-CENTERING | (|关闭) | 在中心窗口只读取代码。 | 从 | x | x | |
DEVICE.DEFAULT |
重置相机API设置默认值。 |
x |
|||||
得到 |
DEVICE.FIRMWARE-VER |
获取设备版本的固件。 |
N /一个 | x |
|||
得到 |
DEVICE.ID |
字符串 |
返回设备ID交办Cognex扫描设备。 内置摄像头,SDK返回53。 mx - 100条形码扫描器,SDK返回56。 |
N /一个 | x |
||
获取/设置 |
DEVICE.NAME |
返回分配给设备的名称。 |
MX-the DEVICE.SERIAL-NUMBER的最后6位数字。 | x |
|||
得到 |
设备。串行-数 |
返回设备的序列号。 内置摄像头,SDK分配一个伪随机数。 |
N /一个 | x |
|||
得到 |
DEVICE.TYPE |
返回设备名称交办Cognex扫描设备。 内置摄像头,SDK返回“MX-Mobile”。 如果mx - 100可用,SDK返回“mx - 100”。 |
N /一个 | x |
|||
获取/设置 |
FOCUS.FOCUSTIME |
(清廉) |
设置相机的自动对焦时间(频率相机应该试图重新调整)。 mx - 100默认是1。 |
3 | x |
x | |
获取/设置 |
I2O5.CHKCHAR |
(|关闭) |
把交叉的第2 5校验数位开/关。 |
从 | x |
||
获取/设置 |
I2O5.CODESIZE |
任何 最小值 马克斯 |
cmbSDK,所有代码25变体使用相同的最小长度;因此它会接受这件。CODESIZE或I205.CODESIZE。 (|关闭)接受任何长度交叉2的5。 [1-max]设定最小长度的接受交叉2的5。 |
N /一个 | x | ||
获取/设置 | I2O5.QZ-SIZE | 0 - 100 | 安静区单严格的大小。注意,这件。QZ-SIZE I2O5。QZ-SIZE设置摄像头API是相同的。 | 50 | X | ||
获取/设置 | I2O5.VERIFICATION | (|关闭) | 结果验证的交叉2 5和代码25条形码开/关。 | 在 | |||
获取/设置 |
IMAGE.FORMAT |
0 1 2 |
扫描仪返回图像位图格式的结果。 扫描仪在JPEG格式返回图像结果。 扫描仪在PNG格式返回图像结果。 |
1 | x |
||
获取/设置 |
IMAGE.QUALITY |
(90年10、15、20、……) |
指定JPEG图像质量。 |
50 | x |
||
获取/设置 |
IMAGE.SIZE |
0 1 2 3 |
全尺寸图像扫描仪的回报。 扫描仪返回1⁄4图像大小。 扫描仪返回1/16大小的图像。 扫描仪返回1/64大小的图像。 |
1 | x |
||
获取/设置 |
LIGHT.AIMER |
(0 - 1) |
禁用/启用瞄准手扫描仪时开始。 默认的基于cameraMode: 0:NoAimer FrontCamera 1:PassiveAimer ActiveAimer |
在 | x |
||
集 | LIGHT.AIMER-CONFIG | (32 - 100) (0-15) (32 - 100) |
集mx - 100的配置 瞄准手强度, 瞄准手调制, 光照强度 |
N /一个 | x | ||
得到 | LIGHT.AIMER-CONFIG | (0 - 1) | 得到的所有的mx - 100配置参数。 0:从缓存中读取设置 1:总是从设备读取。 |
N /一个 | x | ||
获取/设置 | LIGHT.AIMER-INTENSITY | (32 - 100) | 设置/获取瞄准手领导的强度作为一个百分比。 | N /一个 | |||
获取/设置 | LIGHT.AIMER-MODULATION | (0-15) | 设置/获取瞄准手LED灯(闪烁速度),以毫秒为单位。 | N /一个 | |||
获取/设置 |
LIGHT.AIMER-TIMEOUT |
(0 - 600) |
超时秒瞄准手。 这个值总是被译码器。MAX-SCAN——超时。 |
60 | x |
||
获取/设置 |
光。内部,使 |
(|关闭) |
启用/禁用照明。 |
从 | x |
||
获取/设置 |
MSI.CHKCHAR |
(|关闭) |
MSI Plessey校验位开/关。 默认值是关闭的。 |
N /一个 | x |
||
获取/设置 |
MSI.CHKCHAR-OPTION |
0 |
使用国防部10校验和 |
N /一个 | x | ||
获取/设置 |
MSI.CODESIZE |
模式 最小值 马克斯 |
(|关闭)接受任何长度MSI普莱西。 (1-max)集最小/最大接受MSI普莱西的长度。 [min - 80]集最小/最大接受MSI普莱西的长度。 |
N /一个 | x | ||
获取/设置 | MSI.QZ-SIZE | 0 - 100 | 安静区单严格的大小。 | 50 | X | ||
获取/设置 | MSI.VERIFICATION | (|关闭) | 结果验证MSI条形码开/关。 | 在 | |||
获取/设置 | QR.MICRO | (|关闭) | 将QR微象征的开/关 | 从 | X | ||
获取/设置 |
SYMBOL.AZTECCODE |
(|关闭) |
阿兹特克代码标记开/关。 |
从 | x |
||
获取/设置 |
SYMBOL.CODABAR |
(|关闭) |
把Codabar象征的开/关。 |
从 | x |
||
获取/设置 |
SYMBOL.C11 |
(|关闭) |
把代码11象征的开/关。 |
从 | |||
获取/设置 |
SYMBOL.C128 |
(|关闭) |
代码128标记开/关。 |
从 | x |
||
获取/设置 |
SYMBOL.C25 |
(|关闭) |
把代码25符号学开/关(标准)。 |
从 | x |
||
获取/设置 |
SYMBOL.C39 |
(|关闭) |
把代码39象征的开/关。 |
从 | x |
||
获取/设置 | SYMBOL.C39-CONVERT-TO-C32 | (|关闭) | 启用/禁用Code32 Code39转换。 | 从 | x | x | |
获取/设置 |
SYMBOL.C93 |
(|关闭) |
代码93标记开/关。 |
从 | x |
||
获取/设置 |
SYMBOL.COOP |
(|关闭) |
把鸡笼符号学(代码25变体)开/关。 |
从 | |||
获取/设置 |
SYMBOL.DATAMATRIX |
(|关闭) |
将数据矩阵符号使用开/关。 |
从 | x |
||
获取/设置 |
SYMBOL.DATABAR |
(|关闭) |
把DataBar象征学开/关。检查也DATABAR。组,DATABAR。有限,DATABAR。扩展到检查哪些亚型读Databar是否打开。 |
从 | x |
||
获取/设置 |
SYMBOL.DOTCODE |
(|关闭) |
把DotCode象征的开/关。 |
从 | x |
||
获取/设置 |
SYMBOL.IATA |
(|关闭) |
将国际航空运输协会符号学(代码25变体)开/关。 |
从 | |||
获取/设置 |
SYMBOL.INVERTED |
(|关闭) |
把倒符号学(代码25变体)开/关。 |
从 | |||
获取/设置 |
SYMBOL.ITF14 |
(|关闭) |
把ITF-14符号学(代码25变体)开/关。 |
从 | |||
获取/设置 |
SYMBOL.UPC-EAN |
(|关闭) |
把UPC-A、UPC-E EAN-8, EAN-13象征学开/关。 |
从 | x |
||
获取/设置 |
SYMBOL.MATRIX |
(|关闭) |
将矩阵符号(代码25变体)开/关。 |
从 | |||
获取/设置 |
SYMBOL.MAXICODE |
(|关闭) |
把MaxiCode象征的开/关。 |
从 | |||
获取/设置 |
SYMBOL.MSI |
(|关闭) |
MSI普莱西象征的开/关。 |
从 | x |
||
获取/设置 |
SYMBOL.PDF417 |
(|关闭) |
PDF417象征的开/关。 |
从 | x |
||
获取/设置 |
SYMBOL.PLANET |
(|关闭) |
将行星符号学开/关。 |
从 | x |
||
获取/设置 |
SYMBOL.POSTNET |
(|关闭) |
把POSTNET象征的开/关。 |
从 | x |
||
获取/设置 | SYMBOL.TELEPEN | (|关闭) | 把TELEPEN象征的开/关。 | 从 | x | ||
获取/设置 | SYMBOL.4STATE-AUS | (|关闭) | 澳大利亚的邮件标记开/关。 | 从 | x | ||
获取/设置 |
SYMBOL.4STATE-IMB |
(|关闭) |
智能邮件条码符号使用开/关。 |
从 | x |
||
获取/设置 |
SYMBOL.4STATE-RMC |
(|关闭) |
皇家邮政代码标记开/关。 |
从 | x |
||
获取/设置 |
SYMBOL.QR |
(|关闭) |
将QR和MicroQR象征学开/关。 |
从 | x |
||
获取/设置 | TELEPEN.FORCE-NUMERIC | (|关闭) | 把仅有的数字阅读Telepen象征的开/关。 | 从 | |||
获取/设置 | TELEPEN.VERIFICATION | (|关闭) | 结果验证Telepen条形码开/关。 | 从 | |||
获取/设置 |
TRIGGER.TYPE |
0 1 2 3 4 5 |
不支持 不支持 手册(默认) 不支持 不支持 连续 |
N /一个 | x |
||
获取/设置 |
UPC-EAN.EAN13 |
(|关闭) |
把EAN-13象征的开/关。 |
在 | |||
获取/设置 |
UPC-EAN.EAN8 |
(|关闭) |
把EAN-8象征的开/关。 |
在 | |||
获取/设置 |
UPC-EAN.UPC-A |
(|关闭) |
把UPC-A象征的开/关。 |
在 | |||
获取/设置 |
UPC-EAN.UPC-E |
(|关闭) |
把UPC-E象征的开/关。 |
在 | |||
获取/设置 |
UPC-EAN.UPCE1 |
(|关闭) |
把UPC-E1象征的开/关。 |
从 | x |
||
获取/设置 |
UPC - EAN.SUPPLEMENT |
0 1 - 4 |
关闭UPC补充代码。打开UPC补充代码。 |
N /一个 | x |
||
获取/设置 | UPC-EAN.VERIFICATION | (|关闭) | 结果验证UPC条形码开/关。 | 从 | |||
获取/设置 | VIBRATION.GOOD | (|关闭) | 集/代码读取时是否震动(默认) | N /一个 | x |