康耐视移动条码SDKcmbSDK是一个用于开发移动条码扫描应用程序的工具。CmbSDK基于Cognex的DataMan技术和Manatee Works条形码扫描SDK,允许您在移动设备上创建条形码扫描应用程序。用于条码扫描的移动设备支持智能手机、平板电脑和MX系列工业条码阅读器。CmbSDK通过一个抽象设备CMBReaderDevice连接层。一旦应用程序与阅读器建立连接,一个单一的统一API就可以作为配置设备的接口,而无需编写太多的条件代码。
CmbSDK提供两个基本的CMBReaderDevice连接层:
cmbSDK支持康耐视MX系列移动终端使用cmbSDK的特性:
在https://cmbdn.cognex.com/mfi/apply为你想发布到app Store的每个iOS应用程序。当应用名称和bundle ID是固定的时候,你可以提前创建MFi请求,这样你可以加快之后发布到app Store的过程。
一旦你的MFI产品计划请求被处理,你会收到关于下一步步骤的电子邮件通知,届时你可以直接向苹果提交应用程序。
在提交到app Store之前,更新应用的注释:
通过USB或lightning端口将移动设备(手机或平板电脑)连接到PC,开始调试。如果MX移动终端在应用程序运行时通过USB或lightning端口连接到移动设备,则需要通过Wi-Fi调试应用程序。
先决条件:
如果你用XCode运行你的应用程序,确保你的设备通过避雷线插入并启用通过网络连接在移动设备上:
现在您可以关闭设备窗口并开始调试您的应用程序,而不使用避雷线或USB。
先决条件。
在启动应用程序后,您可以安全地拔下插头并通过Wi-Fi继续调试会话。
在没有硬件触发的情况下,移动设备必须使用其他方法启动条形码扫描。cmbSDK支持三种触发条码扫描的方法:
内置摄像头在移动设备的显示屏上提供实时预览,可以是部分屏幕或全屏,在纵向或横向,用于条码瞄准。重新定位移动设备,直到条形码出现在内置摄像头的视野中,应用程序对其进行解码。
cmbSDK支持无源瞄准器:连接到移动设备或其外壳上的设备,使用设备的LED闪光作为光源来投射瞄准或瞄准模式。移动设备可以投射瞄准器模式类似于专门建造的扫描仪,因此不需要实时预览。
此外,CmbSDK支持一个主动瞄准器,它有自己的内置led照明和瞄准:MX-100条形码阅读器。MX-100是一款用于iOS智能手机的移动设备配件,通过移动设备外壳连接到移动设备上。MX-100的内置LED投影一个绿点,以帮助阅读条形码。
cmbSDK支持纵向、横向和自动旋转,以表示条形码预览和扫描方向。无论应用程序和移动设备的朝向如何,移动设备都可以扫描大多数条形码。
为了获得更好的读取性能,在纵向中读取QR、Data Matrix和Maxicode,在横向中读取PDF417这样的长代码。
cmbSDK针对移动环境进行了优化,但图像分析和条形码解码仍然是CPU密集型活动。由于这些进程与移动操作系统(OS)、服务和其他应用程序共享移动设备的CPU,因此以下进程优化您的条形码扫描应用程序,并将其限制为只使用它们所需的cmbSDK特性。
优化您的应用程序:
设置你的应用程序使用iOS cmbSDK:
打开XCode,开始一个新项目。
* SystemConfiguration.framework * AVFoundation.framework * CoreGraphics.framework * coreremedia .framework * CoreVideo.framework * MediaPlayer.framework * Security.framework * AudioToolbox.framework * cmbSDK.framework
去你的项目Info.plist文件并添加隐私-相机使用说明或NSCameraUsageDescription显示一条关于应用程序如何使用用户移动设备上的摄像头的消息。
如果您正在使用带有MX移动终端的cmbSDK,您还需要添加支持的外部附件协议或UISupportedExternalAccessoryProtocols来com.cognex.dmcc在你的项目Info.plist.(在这种情况下,你必须在将应用发布到Apple app Store之前创建MFi Request。你可以阅读更多的细节让你的MX移动终端应用程序进入应用商店部分。)
cmbSDK被设计为为受支持的扫描设备提供高级抽象接口。这不仅包括MX系列移动终端,还包括打算使用移动设备相机作为成像设备的应用程序。与这些设备通信和管理的复杂性被封装在SDK本身中:让应用程序只连接到选择的设备,然后使用它。
应用程序和受支持的条形码扫描设备之间的主要接口是CMBReaderDevice类。该类代表设备本身的抽象层,处理所有通信以及任何必要的硬件管理(例如,智能手机扫描)。
使用cmbSDK的步骤如下:
为您想使用的设备类型初始化一个阅读器设备:MX阅读器或相机阅读器。
连接阅读器设备。
配置阅读器(如果需要)。
开始扫描。
初始化、连接和配置通常只需要在应用程序中执行一次,以下情况除外:
初始化CMBReaderDevice使用MX移动终端,如MX-1000, MX-1100,或MX-1502很容易:只需使用MX设备方法创建阅读器设备(它不需要参数),并设置适当的委托(通常是self):
让readerDevice:CMBReaderDevice = CMBReaderDevice. readerofmx (
CMBReaderDevice *readerDevice = [CMBReaderDevice readerOfMXDevice];readerDevice.delegate = self;
MX移动终端的可用性可以在设备打开或关闭时发生变化,或者在闪电电缆连接或断开时发生变化。您可以使用以下方法处理这些更改CMBReaderDeviceDelegate方法。
func availabilityDidChange(ofReader reader: CMBReaderDevice)
—(void)availabilityDidChangeOfReader:(CMBReaderDevice *)reader
如果你想连接到网络上的Cognex设备(例如手持或固定安装),你必须使用另一个名为NetworkDiscovery.该框架可以在cmbSDK包中找到。
使用移动设备的内置摄像头进行条形码扫描可能比使用MX移动终端更复杂。因此,cmbSDK支持多种配置以提供最大的灵活性,包括支持可选的外部瞄准镜和照明,以及自定义直播预览的外观的能力。MX-100是iPhone的外接设备,我们称之为主动瞄准器。
当使用MX-100或移动设备自带摄像头扫描条码时,需要初始化CMBReaderDevice对象使用readerOfDeviceCameraWithCameraMode静态方法。摄像机阅读器在初始化时有几个选项。需要设置以下参数:
* CDMCameraMode * CDMPreviewOption * UIView
的CameraMode参数的类型CDMCameraMode(定义在CDMDataManSystem.h),它接受以下值之一:
以上模式为作为代码阅读器的移动设备提供了以下默认设置:
根据选择的模式,设置以下附加选项和行为:
的previewOptions参数(的类型CDMPreviewOption,定义于CDMDataManSystem.h)用于更改阅读器的默认值或覆盖从选定的派生的默认值CameraMode.多个选项可以在传递参数时通过OR-ing来指定。可用的选项如下:
kCDMPreviewOptionHighResolution:使用分辨率较高的设备摄像头,以帮助扫描较小的条形码,但解码时间较慢。在支持该选项的设备上,该选项将分辨率设置为1920x1080,在不支持该选项的设备上设置为默认分辨率。默认分辨率为1280x720。
例子:
创建一个没有瞄准器和全屏直播预览的阅读器:
让readerDevice:CMBReaderDevice = CMBReaderDevice。readerOfDeviceCamera (: CDMCameraMode。noAimer previewOptions: CDMPreviewOption。readerDevice.delegate = self . init(rawValue: 0), previewView:nil
CMBReaderDevice *readerDevice = [CMBReaderDevice readerOfDeviceCameraWithCameraMode: kcdmcameramoamoaimer previewOptions:kCDMPreviewOptionDefaults previewView:nil];readerDevice.delegate = self;
创建一个没有瞄准器,没有缩放按钮,并使用模拟触发器的阅读器:
让readerDevice:CMBReaderDevice = CMBReaderDevice。readerOfDeviceCamera (: CDMCameraMode。noAimer previewOptions: [CDMPreviewOption。noZoomBtn CDMPreviewOption。hwTrigger], previewView:nil) readerDevice.delegate = self
CMBReaderDevice *readerDevice = [CMBReaderDevice readerOfDeviceCameraWithCameraMode:kCDMCameraModeNoAimer previewOptions:(kCDMPreviewOptionNoZoomBtn | kCDMPreviewOptionHwTrigger) previewView:nil];readerDevice.delegate = self;
初始化CMBReaderDevice并设置一个委托来处理来自阅读器的响应。
然后使用connectWithCompletion:
//如果self.readerDevice.availability == CMBReaderAvailibilityAvailable{//在readerDevice对象和self.readerDevice之间创建连接,则确保设备已打开并准备就绪。connect(completion: {(error: error ?) in if error != nil{//处理连接错误}})}
//确保设备已打开并准备好if (readerDevice. if)availability == CMBReaderAvailibilityAvailable){//在readerDevice对象和设备之间创建连接[readerDevice connectWithCompletion:^(NSError *error) {if (error){//处理连接错误}}];}
当连接connectionStateDidChangeOfReader在委托中调用,在那里您可以检查您的阅读器设备的连接状态connectionState参数。应该是这样的CMBConnectionStateConnected,这意味着您已成功地连接到CMBReaderDevice,并可以开始使用康耐视移动条码SDK。
为了在连接到设备后更改一些设置,cmbSDK提供了一组高级的、设备独立的api,用于设置和检索设备的当前配置。
使用MX阅读器和相机阅读器进行扫描的区别将在以下部分详细说明。
MX系列移动终端提供复杂的设备配置和管理,包括保存在设备上的配置。MX设备配备了Cognex预配置的大多数符号和功能,可以随时使用。
如果需要自定义配置,可以通过DataMan安装工具或Cognex快速安装重新配置。这两个工具都可以轻松地将保存的配置分发到多个设备,以便进行简单的配置管理。
移动应用程序可以配置MX设备,为您提供以下选项:
cmbSDK使用一组默认选项,通过移动设备的内置摄像头来读取条形码。然而,有两个重要的区别需要记住:
MX-100是iphone专用的设备外壳附件,为内置摄像头提供额外功能,如瞄准功能和更好的照明控制。MX-100是MX设备和内置扫描仪的混合,它具有存储在设备上的瞄准器强度、照明强度和瞄准器调制的设置,而其他设置(如符号设置)则存储在cmbSDK中。看到MX-100用户指南更多信息。
以下是使用MX-100设备时需要记住的几点:
控件的以下方法可以启用各个符号CMBReaderDevice对象:
-(void) setsymbolology:(cmbsymbolology) symbolology enabled:(bool)enabled completion:(void (^)(NSError *error))completionBlock;
此方法中用于符号学参数的所有符号学都可以在CMBReaderDevice.h.
例子
self.readerDevice。setsymbolology (CMBSymbologyQR, enabled: true, completion: {(_ error: error ?) -> Void in if error != nil{//启用该符号失败,可能原因是:阅读器断开,电池耗尽或电缆未插,或当前阅读器设备不支持符号}})
[readerDevice setsymbolology:CMBSymbologyQR enabled:YES completion:^(NSError *error){if (error){//启用该符号失败,可能原因是:reader断开,电池耗尽或电缆未插,或当前readerDevice不支持符号}}];
同样的方法也可以用来关闭符号:
self.readerDevice。setsymbolology (CMBSymbologyUpcEan, enabled: false, completion: {(_ error: error ?) -> Void in if error != nil{//启用该符号失败,可能原因是:阅读器断开,电池耗尽或电缆未插,或当前阅读器设备不支持符号}})
[readerDevice setsymbolology:CMBSymbologyUpcEan enabled:NO completion:^(NSError *error){if (error){//启用该符号失败,可能原因是:reader断开,电池耗尽或电缆未插,或当前readerDevice不支持符号}}];
如果您的阅读器设备配备了照明(例如led),您可以在扫描开始时使用下列方法控制它们是开还是关CMBReaderDevice对象:
self.readerDevice.setLightsON(true) {(error: error ?) in if error != nil{//启动照明失败,可能原因是:阅读器断开,电池耗尽或电缆未插,或设备没有照明灯}}
[readerDevice setLightsON:YES completion:^(NSError *error) {if (error){//启动照明失败,可能原因是:阅读器断开,电池耗尽或电缆未插,或设备没有照明灯}}];
请记住,并非cmbSDK支持的所有设备和设备模式都允许照明控制。例如,如果使用内置相机在被动瞄准模式,照明是不可用的,因为LED被用于瞄准。
如果使用内置摄像头作为阅读器,则可以配置缩放级别并定义使用这些缩放级别的方式。
手机相机有3个变焦级别,分别是:
你可以用“SET CAMERA”来定义这些缩放级别。ZOOM-PERCENT [100-MAX] [100-MAX]命令。它配置两个级别按百分比放大的距离。100是不变焦的,MAX(最高可达1000)将在设备的能力范围内放大。第一个参数用于设置级别1的缩放,第二个用于级别2的缩放。
当你想检查当前设置,你可以用“GET CAMERA”来完成。它返回两个值:第1级和第2级缩放。
例子
readerDevice.dataManSystem() ?。sendCommand(“设置相机。缩放250 500”)
[readerDevice。dataManSystem sendCommand:@"SET CAMERA. "缩放250 500"];
这是另一个命令,设置你想要使用的缩放级别或返回实际设置:“GET/SET CAMERA。变焦0 - 2”。
SET命令可能的值有:
您可以在扫描之前甚至扫描期间调用此命令,缩放将上升到所配置的级别。
扫描完成后,这些值重置为正常(0)。
例子
readerDevice.dataManSystem() ?。sendCommand(“设置相机。放大2”)
[readerDevice。dataManSystem sendCommand:@"SET CAMERA. "放大2”);
当使用移动设备的内置摄像头时,cmbSDK允许您在预览容器中或全屏查看摄像头预览。这个预览也包含一个覆盖,可以自定义。cmbSDK摄像头覆盖由用于缩放、闪光、关闭扫描仪(全屏)的按钮、指示扫描超时的进度条和摄像头预览角上的线条组成。有两个可用的覆盖:遗留和CMB覆盖。
使用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):;
如果使用CMB覆盖,你可以在Resources/layout目录中找到布局文件:必威随行版官网
CMBScannerPartialView.xib当扫描程序在容器内启动时使用(部分视图)
CMBScannerView.xib当扫描仪全屏启动时
复制你需要的布局文件,或者两个布局,然后根据你的需要修改它们。改变视图的大小、位置或颜色,删除视图,并添加您自己的视图,如叠加图像。cmbSDK使用的视图(缩放、闪光、关闭按钮、用于在角上画线的视图和进度条)由sdk使用标签属性,确保标签属性保持不变,以便cmbSDK能够识别视图并继续正确地工作。
CMB和遗留覆盖允许你改变图像上使用的缩放和闪光按钮。为此,首先复制资产文件夹MWBScannerImages.xcassets从“资源”目录到您必威随行版官网的项目。在XCode中,你可以查看包含在这个资产文件夹中的图像,并将它们替换为你自己的图像,同时保持图像名称不变。
CMB和LEGACY覆盖层都允许您更改检测到条形码时显示的矩形的颜色和宽度。下面是一个如何做到这一点的例子:
MWOverlay.setLocationLineUIColor (UIColor.yellow) MWOverlay.setLocationLineWidth (5)
[MWOverlay setLocationLineUIColor UIColor.yellowColor):;[MWOverlay setLocationLineWidth: 5];
每个Cognex扫描设备都实现DataMan控制命令(DMCC),这是一种配置和控制设备的方法。使用这种基于文本的语言,几乎可以控制设备的每一个功能。API提供了向设备发送DMCC命令的方法。存在用于设置和查询配置属性的命令。
附录A包括完整的DMCC参考使用相机阅读器。其他支持的设备(例如MX-1000)的DMCC命令包含在该特定设备的文档中。
附录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:@"SET DECODER.1D-SYMBOLORIENTATION 0" withCallback:^(CDMResponse *response){if (response。status == DMCC_STATUS_NO_ERROR){//命令执行成功}else{//命令失败,在此处理错误}}];
修改直播预览扫描超时时间为10秒:
self.readerDevice.dataManSystem() ?。sendCommand(“设置解码器。MAX-SCAN-TIMEOUT 10", withCallback: {(response:CDMResponse?) in if response?。status == DMCC_STATUS_NO_ERROR{//命令执行成功}else{//命令失败,在这里处理错误}})
[readerDevice。dataManSystem sendCommand:@"SET DECODER. "MAX-SCAN-TIMEOUT 10" withCallback:^(CDMResponse *response){if (response。status == DMCC_STATUS_NO_ERROR){//命令执行成功}else{//命令失败,在此处理错误}}];
获取连接设备的类型:
self.readerDevice.dataManSystem() ?。sendCommand(“设备。类型", withCallback: { (response:CDMResponse?) in if response?.status == DMCC_STATUS_NO_ERROR { // Command was executed successfully let deviceType:String = response?.payload } else { // Command failed, handle errors here } })
[readerDevice。dataManSystem sendCommand:@"获取设备。类型" withCallback:^(CDMResponse *response){ if (response.status == DMCC_STATUS_NO_ERROR) { // Command was executed successfully NSString *deviceType = response.payload; } else { // Command failed, handle errors here } }];
cmbSDK包含一个将设备重置为默认设置的方法。在MX移动终端的情况下,这是默认保存的配置,而在内置摄像头的情况下,这些是附录B中标识的默认值,其中将不启用任何符号。该方法如下:
self.readerDevice.resetConfig {(error: error ?) in if error != nil{//重置配置失败,可能原因是:读取器断开,电池耗尽或线缆未插}}
[readerDevice resetConfigWithCompletion:^(NSError *error) {if (error){//重置配置失败,可能原因是:读取器断开,电池耗尽或线缆未插}}];
有了正确配置的阅读器,您就可以扫描条形码了。方法即可完成这一任务startScanning ()方法中的CMBReaderDevice对象。接下来会发生什么取决于的类型CMBReaderDevice以及它是如何配置的。一般来说:
在下列情况之一时停止扫描:
当条形码成功解码时,您将收到一个CMBReadResults数组中的CMBReaderDevice的使用以下方式进行委托CMBReaderDeviceDelegate方法:
func didReceiveReadResult(fromReader reader: CMBReaderDevice,结果readResults: CMBReadResults!)
- (void)didReceiveReadResultFromReader:(CMBReaderDevice *)reader results:(CMBReadResults *)readResults;
只需显示ReadResult扫描条形码后:
func didReceiveReadResult(fromReader reader: CMBReaderDevice, results readResults: CMBReadResults!) {if readResults.readResults.count > 0 {let readResult:CMBReadResult = readResults.readResults?首先是!如果readResult. CMBReadResult图像!= nil { self.ivPreview.image = readResult.image } if readResult.readString != nil { self.lblCode.text = readResult.readString } } }
- (void)didReceiveReadResultFromReader:(CMBReaderDevice *)reader results:(CMBReadResults *)readResults {if (readResults.readResults. readresult . if)count > 0) {CMBReadResult *readResult = readResults.readResults.firstObject;if (readResult.image) {self.ivPreview.image = readResult.image;} if (readResult.readString) {self.lblCode.text = readResult.readString;}}}
在上面的例子中,ivPreview是一个UIImageView,用于显示被扫描的条形码的图像,和lblCode是一个UILabel,用于显示来自条形码的结果。也可以使用BOOL fromreadResult.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 = "" func parser(_ parser: XMLParser, didStartElement elementName: String, namespaceURI: String?qName: String?, attributes attributeDict: [String: String] = [:]) {currentElement = elementName} func parser(_ parser: XMLParser, foundCharacters String: String) {if currentElement == "full_string" {base64String = String}}
#pragma NSXMLParserDelegateNSString * base64String;- (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName attributes:(NSDictionary *)attributeDict {currentElement = elementName;} - (void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string {if ([currentElement isEqualToString:@"full_string"]) {base64String = string;}}
当你设置XMLParserDelegate要从XML结果中提取base64字符串,您需要创建一个xmlparse对象,并使用此委托解析result.xml。可以在接收扫描结果时完成CMBReaderDeviceDelegate,或访问CMBReadResult对象。下面是如何使用之前创建的委托获取原始字节的方法:
let xmlParser: xmlParser = xmlParser。init(data: result.xml) xmlParser.delegate = self if xmlParser.parse(){//通过这个变量let bytes: data ?=数据。init(base64Encoded: base64String)}
NSXMLParser *xmlParser = [NSXMLParser.]alloc initWithData result.XML):;xmlParser.delegate = self;if ([xmlParser parse]){//通过这个变量NSData *bytes = [NSData.]访问原始字节。alloc initWithBase64EncodedString:base64String options:0];}
默认情况下,图像和SVG结果是禁用的,这意味着在扫描时,CMBReadResults不会在相应的属性中包含任何数据。
要启用图像结果,使用以下方法从CMBReaderDevice类中设置imageResultEnabled属性:
self.readerDevice.imageResultEnabled = true
[readerDevice setImageResultEnabled:是的);
要启用SVG结果,请使用以下方法从CMBReaderDevice类中设置imageResultEnabled属性:
self.readerDevice.svgResultEnabled = true
[readerDevice setSVGResultEnabled:是的);
在某些情况下,设备可能会因为电池电量不足或手动断开电缆而断开。这些情况可以通过connectionStateDidChangeOfReader的回调CMBReaderDeviceDelegate.
从不活动状态返回到应用程序后,阅读器设备保持初始化但未连接。不需要重新初始化SDK,但需要重新连接。
一些iOS版本会在恢复应用程序时发送“可用性”通知,说明外部附件可用。你可以在CMBReaderDeviceDelegate方法:(void)availabilityDidChangeOfReader:(CMBReaderDevice *)reader so w当阅读器可用时,您可以进行连接。
例如:
func availabilityDidChange(ofReader reader: CMBReaderDevice) {if (reader。availability == cmbreaderavailbilityavailable) {readerDevice.可用性。连接(completion: { error in if error != nil { // handle connection error } }) } }
—(void)availabilityDidChangeOfReader:(CMBReaderDevice *)reader {if (readerDevice. if)availability == CMBReaderAvailibilityAvailable) {[readerDevice connectWithCompletion:^(NSError *error) {if (error){//处理连接错误}}];}}
一些iOS版本不会在简历中报告可用性变化,所以你需要手动处理。添加一个观察者UIApplicationDidBecomeActiveNotification和连接。
例子:
覆盖func viewDidLoad() {super.viewDidLoad() //当应用程序恢复时重新连接NotificationCenter.default.addObserver(self, selector: #selector(self. appbecameactive), name:NSNotification.Name。UIApplicationDidBecomeActive, object: nil)} //处理app恢复func appBecameActive() {if readerDevice != nil && readerDevice. UIApplicationDidBecomeActive。availability == cmbreaderavailbilityavailable && readerDevice。connectionState!= CMBConnectionStateConnecting && readerDevice.connectionState != CMBConnectionStateConnected { readerDevice.connect(completion: { error in if error != nil { // handle connection error } }) } }
- (void)viewDidLoad{//当应用程序恢复时重新连接[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(appBecameActive) name:UIApplicationDidBecomeActiveNotification object:nil];} //处理app resume -(void) appBecameActive {if (readerDevice != nil && readerDevice.}availability == cmbreaderavailbilityavailable && readerDevice。connectionState!= CMBConnectionStateConnecting && readerDevice.connectionState != CMBConnectionStateConnected) { [readerDevice connectWithCompletion:^(NSError *error) { if (error) { // handle connection error } }]; } }
下表列出了使用内置摄像头进行条码扫描时cmbSDK支持的各种DMCC命令。
获取/设置 |
命令 |
参数(年代) |
描述 |
默认值 | 只重置设备? | MX终端 |
mx - 100 |
---|---|---|---|---|---|---|---|
得到 |
电池。负责 |
(0 - 100) |
以百分比显示当前电池水平。 |
N/A | x |
||
哔哔的声音 |
重复 (0 - 3) 水平 (0 - 2) |
播放可听的哔(音)。 |
N/A | x |
|||
获取/设置 |
哔哔的声音。好 |
哔哔声的数量 (0 - 3) beep语气 (0 - 2) |
设置蜂鸣声的数量和蜂鸣声的音调/音调:低,中,高。 对于内置摄像头,只支持不带音高控制的单声哔哔。 0 1关掉蜂鸣声,11 1打开蜂鸣声。 |
1 1打开“嘟” |
x |
||
获取/设置 | 相机。变焦 | 0 - 2 | SET命令的值是: 0 -正常(无缩放) 1 -放大到1级, 2 -放大到2级。 在扫描期间使用缩放级别。扫描结束时缩放级别重置为0。 |
N/A | |||
获取/设置 | 相机。变焦-PERCENT | 1级 (100 - max) 2级 (100 - max) |
获取或设置相机变焦的百分比: 级别1:默认200% 级别2:默认400%
注意:请确保至少从SDK启动相机一次,以获得适当的最大变焦(max)值。 |
N/A | |||
获取/设置 |
CODABAR。CODESIZE |
任何 最小值 马克斯 |
[ON | OFF]接受任何长度的Codabar。 [1-max]设置可接受的Codabar最小长度 |
N/A | x | ||
获取/设置 | CODABAR。QZ-SIZE | 0 - 100 | 安静区单严格尺寸。 | 50 | X | ||
获取/设置 | CODABAR。验证 | (|关闭) | 打开/关闭Codabar条形码的验证。 | 在 | |||
获取/设置 |
C11。CHKCHAR |
[on | off] |
打开/关闭代码11检查。 |
从 | |||
获取/设置 |
C11。CHKCHAR-OPTION |
(0 - 1) |
0: disable需要单个校验和。 |
1 | x | ||
获取/设置 |
C11。CODESIZE |
任何 最小值 马克斯 |
[ON|OFF]接受任何长度的编码11。 [1-max]设置可接受代码11的最小长度。 |
N/A | x | ||
获取/设置 | C11。QZ-SIZE | 0 - 100 | 安静区单严格尺寸。 | 50 | |||
获取/设置 | C11。验证 | (|关闭) | 打开/关闭代码11条形码的验证。 | 在 | |||
获取/设置 | C128。QZ-SIZE | 0 - 100 | 安静区单严格尺寸。 | 50 | |||
获取/设置 | C128。验证 | (|关闭) | 打开/关闭代码11条形码的验证。 | 在 | |||
获取/设置 |
这件。CODESIZE |
任何 最小值 马克斯 |
代码25代码大小。对于cmbSDK,所有的Code 25变体都使用相同的最小长度;因此它将接受C25。或I205.CODESIZE。 [ON|OFF]接受任何长度的编码25。 [4-max](如果是Cognex设备,则为[1-max])设置可接受代码25的最小长度。 |
N/A | x | ||
获取/设置 | 这件。QZ-SIZE | 0 - 100 | 安静区单严格尺寸。注意C25。QZ-SIZEand I2O5.QZ-SIZE are the same setting for the camera API. | 50 | X | ||
获取/设置 | 这件。验证 | 关| | 打开/关闭代码25和5个条形码中的2个的交叉验证。 | 在 | |||
获取/设置 |
C39。美国信息交换标准代码 |
(|关闭) |
打开/关闭Code 39扩展ASCII码。 |
从 | x |
||
获取/设置 |
C39。CODESIZE |
任何 最小值 马克斯 |
[ON|OFF]接受任何长度的编码39。 [2|4-max]设置可接受代码39的最小长度。(2是使用相机API的最小值,4用于MX移动终端) 将代码大小设置为2-3是有风险的,因为它可能导致误读。 |
N/A | x |
||
获取/设置 |
C39。CHKCHAR |
(|关闭) |
代码39检查字符。 |
从 | x |
||
获取/设置 | C39。QZ-SIZE | 0 - 100 | 安静区单严格尺寸。 | 50 | |||
获取/设置 | C39。验证 | (|关闭) | 打开/关闭代码39条形码的验证。 | 在 | |||
获取/设置 |
C93。美国信息交换标准代码 |
(|关闭) |
打开/关闭代码93扩展ASCII |
从 | |||
获取/设置 |
C93。CODESIZE |
任何 最小值 马克斯 |
[ON|OFF]接受任何长度的代码93。 [1-max]设置接受的代码93的最小长度。 |
N/A | x |
||
获取/设置 | C93。验证 | (|关闭) | 打开/关闭代码93条形码的验证。 | 从 | |||
配置。默认的 |
将大多数相机API设置重置为默认值。设备标识和通信设置没有改变。要重置所有设置,请使用DEVICE.DEFAULT。 |
N/A | x |
||||
配置。保存 | 将当前配置保存到非易失性内存(仅MX-1xxx)。注意,当MX设备下电或进入睡眠模式时,最后保存的配置将在设备唤醒时恢复。 | N/A | |||||
配置。恢复 | 从非易失性内存中恢复保存的配置(仅MX-1xxx)。 | N/A | |||||
获取/设置 |
数据。结果类型 |
0 1 2 4 8 |
指定要返回的结果(多个值的和):无 文本字符串结果(默认) XML结果 XML数据 扫描图像(见image .)*命令) |
1 | x |
||
获取/设置 |
DATABAR。扩大 |
(|关闭) |
打开/关闭数据扩充符号。 |
从 | x |
||
获取/设置 |
DATABAR。有限的 |
(|关闭) |
打开/关闭DataBar Limited符号。 |
在 | x |
||
获取/设置 |
DATABAR。集团 DATABAR。RSS14 |
(|关闭) |
打开/关闭DataBar GROUP(在cmbSDK 2.4.2之前称为RSS14)符号。 |
从 | x |
||
获取/设置 |
DATABAR。RSS14STACK |
(|关闭) |
打开/关闭DataBar RSS14堆叠符号。cmbSDK 2.4.2已弃用,使用DATABAR。集团。 |
从 | |||
获取/设置 | DATABAR。验证 | (|关闭) | 打开/关闭对Databar条形码的验证。 | 在 | |||
获取/设置 |
DECODER.1D——SYMBOLORIENTATION |
0 1 2 3. |
采用全向扫描定向。 使用水平和垂直扫描方向。 使用垂直扫描方向。 使用水平扫描方向。 |
1 | x |
||
获取/设置 | 译码器。CENTERING-WINDOW | (0 - 100) (0 - 100) (0 - 100) (0 - 100) |
定心窗口的位置和大小占传感器大小的百分比。 水平居中为定心窗口的百分比 垂直居中为定心窗口的百分比 水平大小为定心窗口的百分比 垂直尺寸为定心窗口的百分比 |
x | x | ||
获取/设置 | 译码器。DISPLAY-TARGET | (|关闭) | 显示定心窗口图形。 | 从 | x | x | |
获取/设置 |
译码器。努力 |
(0 - 5) |
设置图像分析/解码的工作级别。
注意:不要使用4-5进行在线扫描。 |
2 | |||
获取/设置 |
译码器。MAX-SCAN——超时 |
(0 - 120) |
设置直播预览的超时时间。当超时到达时,解码暂停,直播预览将继续显示在屏幕上。 |
60 | |||
得到 | 译码器。MAX-THREADS | 返回设备支持的最大CPU线程数。 | N/A | ||||
获取/设置 | 译码器。REREAD-TIME | (0 - 10000) | 代码重读延迟,以毫秒为单位。 | 1000 | x | x | |
获取/设置 | 译码器。ROI-PERCENT | (0 - 100) (0 - 100) (0 - 100) (0 - 100) |
感兴趣区域的位置和大小占相机视图大小的百分比: 水平居中为ROI的百分比 水平大小为ROI的百分比 以ROI的百分比垂直居中 垂直大小为ROI的百分比 |
N/A | x | ||
获取/设置 | 译码器。TARGET-DECODING | (|关闭) | 启用目标解码,以读取与目标解码窗口重叠的代码。 | 从 | x | x | |
获取/设置 | 译码器。线色 | (1-MAX) | 指定扫描程序在扫描过程中可以使用的最大CPU线程数。 | 设备支持的最大CPU线程数 | |||
获取/设置 | 译码器。USE-CENTERING | (|关闭) | 只读取居中窗口内的代码。 | 从 | x | x | |
设备。默认的 |
重置相机API设置为默认值。 |
x |
|||||
得到 |
设备。FIRMWARE-VER |
获取设备固件版本。 |
N/A | x |
|||
得到 |
设备。ID |
字符串 |
返回由Cognex分配给扫描设备的设备ID。 对于内置摄像头,SDK返回53。 对于MX-100条形码扫描器,SDK返回56。 |
N/A | x |
||
获取/设置 |
设备。的名字 |
返回分配给设备的名称。 |
mx - DEVICE.SERIAL-NUMBER的后6位。 | x |
|||
得到 |
设备。串行-数 |
返回设备的序列号。 对于内置摄像头,SDK分配一个伪随机数。 |
N/A | x |
|||
得到 |
设备。类型 |
返回由Cognex分配给扫描设备的设备名称。 对于内置摄像头,SDK返回“MX-Mobile”。 如果MX-100可用,SDK返回“MX-100”。 |
N/A | x |
|||
获取/设置 |
的焦点。FOCUSTIME |
(清廉) |
设置相机的自动对焦周期(相机应该尝试重新对焦的频率)。 对于MX-100,默认值是1。 |
3. | x |
x | |
获取/设置 |
I2O5。CHKCHAR |
(|关闭) |
交替打开/关闭5个检查数字中的2个。 |
从 | x |
||
获取/设置 |
I2O5。CODESIZE |
任何 最小值 马克斯 |
对于cmbSDK,所有的Code 25变体都使用相同的最小长度;因此它将接受C25。或I205.CODESIZE。 [ON|OFF]接受任意长度的2 / 5。 [1-max]设置可接受的交错2 / 5的最小长度。 |
N/A | x | ||
获取/设置 | I2O5。QZ-SIZE | 0 - 100 | 安静区单严格尺寸。注意C25。QZ-SIZEand I2O5.QZ-SIZE are the same setting for the camera API. | 50 | X | ||
获取/设置 | I2O5。验证 | (|关闭) | 打开/关闭交错2(5)和代码25条形码的验证。 | 在 | |||
获取/设置 |
的形象。格式 |
0 1 2 |
扫描器返回位图格式的图像结果。 扫描仪返回JPEG格式的图像结果。 扫描仪返回PNG格式的图像结果。 |
1 | x |
||
获取/设置 |
的形象。质量 |
[10, 15, 20,…90] |
指定JPEG图像质量。 |
50 | x |
||
获取/设置 |
的形象。大小 |
0 1 2 3. |
扫描仪返回完整大小的图像。 扫描仪返回1 / 4大小的图像。 扫描仪返回1/16大小的图像。 扫描仪返回1/64大小的图像。 |
1 | x |
||
获取/设置 |
光。瞄准手 |
(0 - 1) |
当扫描仪启动时禁用/启用瞄准器。 默认基于cameraMode: 0: NoAimer和FrontCamera 1: PassiveAimer和ActiveAimer |
在 | x |
||
集 | 光。瞄准手-CONFIG | (32 - 100) (0-15) (32 - 100) |
设置MX-100的配置 瞄准手强度, 瞄准手调制, 光照强度 |
N/A | x | ||
得到 | 光。瞄准手-CONFIG | (0 - 1) | 一次获取MX-100的所有配置参数。 0:从cache中读取设置 1:始终从设备读取。 |
N/A | x | ||
获取/设置 | 光。瞄准手-INTENSITY | (32 - 100) | 设置/获取瞄准器LED的强度百分比。 | N/A | |||
获取/设置 | 光。瞄准手-MODULATION | (0-15) | 设置/获取瞄准器LED的调制(眨眼频率),以毫秒为单位。 | N/A | |||
获取/设置 |
光。瞄准手-TIMEOUT |
(0 - 600) |
瞄准器的超时时间,以秒为单位。 这个值总是被DECODER覆盖。MAX-SCAN——超时。 |
60 | x |
||
获取/设置 |
光。内部,使 |
(|关闭) |
启用/禁用照明。 |
从 | x |
||
获取/设置 |
MSI。CHKCHAR |
[on | off] |
打开/关闭MSI Plessey检查数字。 默认值为OFF。 |
N/A | x |
||
获取/设置 |
MSI。CHKCHAR-OPTION |
0 |
使用mod 10校验和 |
N/A | x | ||
获取/设置 |
MSI。CODESIZE |
模式 最小值 马克斯 |
[ON|OFF]接受任何长度的MSI Plessey。 [1-max]设置MSI Plessey的最小/最大长度。 [min-80]设置MSI Plessey的最小/最大长度。 |
N/A | x | ||
获取/设置 | MSI。QZ-SIZE | 0 - 100 | 安静区单严格尺寸。 | 50 | X | ||
获取/设置 | MSI。验证 | [on | off] | 打开/关闭MSI条形码的验证。 | 在 | |||
获取/设置 | QR。微 | [on | off] | 打开/关闭二维码符号 | 从 | X | ||
获取/设置 |
的象征。AZTECCODE |
[on | off] |
打开/关闭阿兹特克代码符号。 |
从 | x |
||
获取/设置 |
的象征。CODABAR |
[on | off] |
打开/关闭Codabar符号。 |
从 | x |
||
获取/设置 |
的象征。C11 |
[on | off] |
打开/关闭代码11符号。 |
从 | |||
获取/设置 |
的象征。C128 |
[on | off] |
打开/关闭代码128符号。 |
从 | x |
||
获取/设置 |
的象征。这件 |
[on | off] |
打开/关闭Code 25符号(标准)。 |
从 | x |
||
获取/设置 |
的象征。C39 |
[on | off] |
打开/关闭代码39符号。 |
从 | x |
||
获取/设置 | 的象征。C39-CONVERT-TO-C32 | [on | off] | 启用/禁用Code39到Code32的转换。 | 从 | x | x | |
获取/设置 |
的象征。C93 |
[on | off] |
打开/关闭代码93符号。 |
从 | x |
||
获取/设置 |
的象征。鸡笼 |
[on | off] |
打开/关闭COOP符号(代码25变体)。 |
从 | |||
获取/设置 |
的象征。DATAMATRIX |
[on | off] |
打开/关闭数据矩阵符号。 |
从 | x |
||
获取/设置 |
的象征。DATABAR |
[on | off] |
打开/关闭DataBar符号。也检查数据库。组,DATABAR。有限的, DATABAR.EXPANDED to check which subtypes are read if Databar is turned on. |
从 | x |
||
获取/设置 |
的象征。DOTCODE |
[on | off] |
打开/关闭DotCode符号。 |
从 | x |
||
获取/设置 |
的象征。国际航空运输协会 |
[on | off] |
打开/关闭IATA符号(代码25变体)。 |
从 | |||
获取/设置 |
的象征。倒 |
[on | off] |
打开/关闭反向符号(代码25变体)。 |
从 | |||
获取/设置 |
的象征。ITF14 |
[on | off] |
打开/关闭ITF-14符号(代码25变体)。 |
从 | |||
获取/设置 |
的象征。UPC-EAN |
[on | off] |
打开/关闭UPC-A, UPC-E, EAN-8和EAN-13的符号。 |
从 | x |
||
获取/设置 |
的象征。矩阵 |
[on | off] |
打开/关闭矩阵符号(代码25变体)。 |
从 | |||
获取/设置 |
的象征。MAXICODE |
[on | off] |
打开/关闭MaxiCode符号。 |
从 | |||
获取/设置 |
的象征。MSI |
[on | off] |
打开/关闭MSI Plessey符号。 |
从 | x |
||
获取/设置 |
的象征。PDF417 |
[on | off] |
打开/关闭PDF417符号。 |
从 | x |
||
获取/设置 |
的象征。地球 |
[on | off] |
打开/关闭PLANET符号。 |
从 | x |
||
获取/设置 |
的象征。POSTNET |
[on | off] |
打开/关闭POSTNET符号。 |
从 | x |
||
获取/设置 | 的象征。TELEPEN | [on | off] | 打开/关闭TELEPEN符号。 | 从 | x | ||
获取/设置 | SYMBOL.4STATE-AUS | [on | off] | 打开/关闭澳大利亚邮政标志。 | 从 | x | ||
获取/设置 |
SYMBOL.4STATE-IMB |
[on | off] |
打开/关闭智能邮件条形码符号。 |
从 | x |
||
获取/设置 |
SYMBOL.4STATE-RMC |
[on | off] |
打开/关闭皇家邮政编码符号。 |
从 | x |
||
获取/设置 |
的象征。QR |
[on | off] |
打开/关闭QR和MicroQR符号。 |
从 | x |
||
获取/设置 | TELEPEN。FORCE-NUMERIC | [on | off] | 只打开/关闭数字Telepen符号的读取。 | 从 | |||
获取/设置 | TELEPEN。验证 | [on | off] | 打开/关闭Telepen条形码的验证。 | 从 | |||
获取/设置 |
触发器。类型 |
0 1 2 3. 4 5 |
不支持 不支持 手册(默认) 不支持 不支持 连续 |
N/A | x |
||
获取/设置 |
UPC-EAN。EAN13 |
[on | off] |
打开/关闭EAN-13符号。 |
在 | |||
获取/设置 |
UPC-EAN。EAN8 |
[on | off] |
打开/关闭EAN-8符号。 |
在 | |||
获取/设置 |
UPC-EAN。UPC-A |
[on | off] |
打开/关闭UPC-A符号。 |
在 | |||
获取/设置 |
UPC-EAN。UPC-E |
[on | off] |
打开/关闭UPC-E符号。 |
在 | |||
获取/设置 |
UPC-EAN。UPCE1 |
[on | off] |
打开/关闭UPC-E1符号。 |
从 | x |
||
获取/设置 |
UPC - EAN。补充 |
0 - 4 |
cmbSDK的移动相机API只支持打开/关闭UPC/EAN补充代码支持,而DMCC命令允许打开/关闭UPC/EAN补充代码支持 cmbSDK的移动相机API将对选项1-4一视同仁;简单地启用它们。 |
N/A | x |
||
获取/设置 | UPC-EAN。验证 | [on | off] | 打开/关闭UPC条形码的验证。 | 从 | |||
获取/设置 | 振动。好 | [on | off] | 设置/获取当读取代码时是否震动(默认是ON) | N/A | x |