康耐视移动条码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应用程序。当应用程序名称和捆绑包ID固定时,可以提前创建MFi请求,这样可以加快以后发布到app Store的过程。
一旦您的MFI产品计划请求得到处理,您将收到有关进一步步骤的电子邮件通知,届时您可以直接向苹果提交应用程序。
在提交到应用商店之前更新应用的备注:
将您的移动设备(手机或平板电脑)通过USB或闪电接口连接到您的PC,以开始调试。如果MX移动终端通过USB或闪电端口连接到您的移动设备,而您的应用程序正在运行,您需要通过Wi-Fi调试您的应用程序。
先决条件:
如果您使用XCode运行应用程序,请确保您的设备已通过lightning电缆插入并启用通过网络连接在移动设备上:
现在你可以关闭设备窗口并开始调试您的应用程序,而不使用闪电电缆或USB。
先决条件。
启动应用程序后,您可以安全地拔下插头,通过Wi-Fi继续调试会话。
在没有硬件触发的情况下,移动设备必须使用替代方法来启动条形码扫描。cmbSDK支持三种触发条形码扫描的方法:
内置摄像头在移动设备显示屏上提供实时流预览,可部分或全屏、纵向或横向显示,用于条形码瞄准。重新定位移动设备,直到条形码出现在内置摄像头的视野中,应用程序对其进行解码。
cmbSDK支持被动瞄准器:连接到移动设备或其外壳的设备,使用设备的LED闪光灯作为光源来投射瞄准或瞄准模式。移动设备可以投射类似于特制扫描仪的瞄准模式,因此不需要实时预览。
此外,CmbSDK支持具有其自己的内置的LED用于照明和瞄准活性瞄准器:对MX-100条形码读取器。对MX-100是用于附连到移动设备与移动设备的情况下的iOS智能电话的移动设备的附件。内置LED的MX-100项目的一个绿点,以帮助在阅读条形码。
cmbSDK支持纵向、横向和自动旋转以显示条形码预览和扫描方向。移动设备可以扫描大多数条形码,而不管应用程序和移动设备的方向如何。
为了更好的读取性能,在纵向读取QR、Data Matrix和Maxicode,在横向读取像PDF417这样的长代码。
cmbSDK针对移动环境进行了优化,但图像分析和条码解码仍然是CPU密集型活动。由于这些进程与移动操作系统(OS)、服务和其他应用程序共享移动设备的CPU,下面的进程将优化条形码扫描应用程序,并将其限制为只使用他们需要的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显示有关应用程序如何使用用户移动设备摄像头的消息。
如果您在MX移动终端上使用cmbSDK,还需要添加支持的外部附件协议或UISupportDexternalAccessoryProtocols来com.cognex.dmcc在你的项目的Info.plist.(在这种情况下,你必须创建一个MFi请求之前发布你的应用程序在苹果应用商店。你可以在让你的MX移动终端启用应用程序进入应用程序商店部分。)
cmbSDK被设计为为支持的扫描设备提供一个高级的抽象接口。这不仅包括MX系列移动终端,还包括打算使用移动设备摄像头作为成像设备的应用程序。与这些设备通信和管理的复杂性被封装在SDK本身中:让应用程序只连接到选择的设备,然后使用它。
您的应用程序,支持条码扫描设备之间的主要接口是CMBReaderDevice类。这个类代表设备本身的抽象层,处理所有通信以及任何必要的硬件管理(例如,智能手机扫描)。
执行以下步骤以使用cmbSDK:
为要使用的设备类型初始化Reader Device: MX Reader或camera Reader。
连接阅读器设备。
配置读卡器(如有必要)。
开始扫描。
初始化、连接和配置通常只需要在应用程序中执行一次,以下情况除外:
初始化CMBReaderDevice使用MX-1000、MX-1100或MX-1502这样的MX移动终端很容易:简单地使用MX设备方法创建阅读器设备(它不需要参数),并设置适当的委托(通常是self):
让readerDevice:CMBReaderDevice=CMBReaderDevice.ReaderOffmx()readerDevice.delegate=self
CMBReaderDevice *readerDevice = [CMBReaderDevice readerOfMXDevice];readerDevice.delegate =自我;
当装置接通或断开,或者如果防雷电缆被连接或断开的MX移动终端的可用性可以改变。您可以使用以下处理这些变化CMBReaderDeviceDelegate方法。
func availabilityDidChange(ofReader reader: CMBReaderDevice)
- (void) availabilityDidChangeOfReader: (CMBReaderDevice *)读者
如果你想连接到网络上的congnex设备(例如手持或固定挂载),你必须使用另一个名为NetworkDiscovery。此框架可在cmbSDK捆绑包中找到。
使用移动设备的内置摄像头扫描条形码可能比使用MX移动终端更复杂。因此,cmbSDK支持多种配置以提供最大的灵活性,包括支持可选的外部瞄准镜和照明,以及定制直播预览外观的能力。MX-100是iPhone的外部设备,我们称之为active aimer。
若要使用MX-100或移动设备的内置摄像头扫描条形码,请初始化CMBReaderDevice对象使用readerOfDeviceCameraWithCameraMode静态方法。初始化后,相机阅读器有几个选项。需要配置的参数如下:
* cdmcamermode * CDMPreviewOption * UIView
这个CameraMode参数的类型为Cdmameramode(定义见CDMDataManSystem.h),它接受以下值之一:
上述模式提供用于移动设备作为代码读取器以下默认设置:
根据所选模式,设置以下附加选项和行为:
这个previewOptions类型的参数(CDMPreviewOption中定义的,CDMDataManSystem.h)用于更改读取器的默认值或覆盖从选定对象派生的默认值CameraMode。在传递参数时,可以通过指定或取消指定多个选项。可用选项如下:
kCDMPreviewOptionHighResolution:使用分辨率更高的设备摄像头帮助扫描小条形码,但解码时间较慢。该选项在支持该选项的设备上设置分辨率为1920x1080,在不支持该选项的设备上设置默认分辨率。默认分辨率为1280x720。
例子:
创建一个没有aimer和全屏直播预览的阅读器:
让readerDevice:CMBReaderDevice = CMBReaderDevice.readerOfDeviceCamera(附:CDMCameraMode.noAimer,previewOptions:CDMPreviewOption.init(rawValue:0),previewView:无)readerDevice.delegate =自
CMBReaderDevice*readerDevice=[CMBReaderDevice readerOfDeviceCameraWithCameraMode:KCDMCameraModeNoImer预览选项:kCDMPreviewOptionDefaults预览视图: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 =自我;
初始化CMBReaderDevice并设置一个委托来处理来自阅读器的响应。
然后连接使用connectWithCompletion:
//如果self.readerDevice.availability == cmbreaderavailabilityavailable,确保设备已打开并准备就绪;connect(completion: {(error: error ?) in if error != nil{//处理连接错误}})}
//如果readerDevice. readerDevice. readerDevice. readerDevice. readerDevice. readerDevice. readerDevice. readerDevice. readerDevice。可用性== cmbreaderavailabilityavailable){//创建readerDevice对象和设备之间的连接[readerDevice connectWithCompletion:^(NSError *error) {if (error){//处理连接错误}}];}
当连接读卡器的连接状态在中,调用委托,您可以在读卡器设备中检查连接状态connectionState参数。它应该是CMBConnectionStateConnected,这意味着你已经成功地向连接CMBReaderDevice,并且可以开始使用康耐视移动条码SDK。
为了在连接到设备后更改某些设置,cmbSDK提供了一组与设备无关的高级API,用于设置和检索设备的当前配置。
下面几节将详细介绍使用MX读取器和相机读取器进行扫描的区别。
MX系列移动终端提供复杂的设备配置和管理,包括设备上保存的配置。MX设备采用Cognex预配置的大多数符号和功能,可随时使用。
如果您想要自定义配置,请通过DataMan安装工具或Cognex Quick安装程序重新配置。这两种工具都可以轻松地将保存的配置分发到多个设备,以实现简单的配置管理。
移动应用程序能够配置MX设备,使您可以选择:
cmbSDK使用一组默认选项来读取带有移动设备内置摄像头的条形码。然而,有两个重要的区别需要记住:
MX-100是一款仅适用于iphone的设备外壳附件,为内置摄像头提供了额外的功能,如瞄准功能和更好的照明控制。作为MX设备和内置扫描仪的混合,MX-100有瞄准器强度、照明强度和瞄准器调制设置存储在设备上,而其他设置,如符号设置,存储在cmbSDK中。看到mx - 100用户指南为更多的信息。
以下是使用MX-100设备时需要记住的一些事情:
的下列方法可以启用单个符号CMBReaderDevice目的:
-(void) setSymbology:(CMBSymbology)symbol enabled:(bool)enabled completion:(void (^)(NSError *error))completionBlock;
该方法中用于符号参数的所有符号均可在CMBReaderDevice.h.
例子
self.readerDevice.setSymbology(CMBSymbologyQR,enabled:true,completion:{({error:error?->Void in if error!=nil{//未能启用该符号,可能的原因是:读卡器断开连接、电池或电缆拔出或当前readerDevice不支持该符号})
[readerDevice setSymbology:CMBSymbologyQR enabled:YES completion:^(N错误*错误){如果(错误){//无法启用该符号,可能的原因是:读卡器断开连接、电池电量不足或电缆未拔出,或当前readerDevice不支持该符号}];
同样的方法也可以用来关闭符号:
self.readerDevice。setSymbology(CMBSymbologyUpcEan, enabled: false, completion: {(_ error: error ?) -> Void in if error != nil{//启用该符号失败,可能原因是:读取器断开,电池或电缆未插电,或当前readerDevice不支持符号}})
[readerDevice setSymbology:CMBSymbologyUpcEan enabled:NO completion:^(NSError *error){if (error){//启用该符号失败,可能原因是:读取器断开,电池或电缆未插电,或当前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”。返回两个值:第一级和第二级缩放。
例子
readerDevice.dataManSystem() ?。sendCommand(“设置相机。ZOOM-PERCENT 250 500”)
[readerDevice。dataManSystem sendCommand: @”设置相机。ZOOM-PERCENT 250 500”);
下面是另一个命令,用于设置要使用的缩放级别或返回实际设置:“GET/SET CAMERA.zoom 0-2”。
SET命令可能的取值有:
您可以在扫描之前或甚至在扫描期间调用此命令,缩放将上升到配置的级别。
当扫描完成时,这些值被重置为normal(0)。
例子
readerDevice.dataManSystem()?.sendCommand(“设置CAMERA.ZOOM 2”)
[readerDevice。dataManSystem sendCommand: @”设置相机。放大2”);
使用移动设备的内置摄像头时,cmbSDK允许您在预览容器内或全屏查看摄像头预览。此预览还包含可以自定义的覆盖。cmbSDK摄像头覆盖层由用于缩放、闪烁、关闭扫描仪(全屏)的按钮、指示扫描超时的进度条以及摄像头预览角落上的线条组成。有两种可用的覆盖:传统覆盖和CMB覆盖。
使用cmbSDK 2.0版本中使用的旧相机覆盖层。xand the ManateeWorks SDK, use this property from MWOverlay before initializing theCMBReaderDevice:
MWOverlay.setOverlayMode (Int32 (OM_LEGACY.rawValue))
[MWOverlay setOverlayMode OM_LEGACY):;
如果使用CMB覆盖,您可以在资源/布局目录中找到布局文件:必威随行版官网
CMBScannerPartialView.xib当扫描程序在容器内启动时使用(部分视图)
CMBScannerView.xib当扫描器全屏启动时
复制您需要的布局文件,或两个布局,然后修改它们,如您所愿。改变视图的大小、位置或颜色,删除视图,并添加自己的视图,如叠加图像。控件访问cmbSDK使用的视图(缩放、flash、关闭按钮、用于在角上绘制线条的视图和进度条)标签属性,确保标签属性保持不变,以便cmbSDK能够识别视图并继续正确地工作。
CMB和遗留覆盖允许你改变图像使用的缩放和闪光按钮。要做到这一点,首先复制资产文件夹MWBScannerImages.xcassets从参考资料目录转移必威随行版官网到您的项目中。在XCode中,你可以查看包含在这个资产文件夹中的图像,并将它们替换为你自己的,同时保持图像名称不变。
无论是招行和遗留覆盖允许您更改检测条形码时显示矩形的颜色和宽度。下面是关于如何做到这一点的例子:
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(“设置解码器。1.D-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.status == DMCC_STATUS_NO_ERROR){//命令执行成功}其他{//命令失败,手柄这里的错误}}]。
将实时流预览的扫描超时更改为10秒:
self.readerDevice.dataManSystem() ?。sendCommand(“设置解码器。MAX-SCAN-TIMEOUT 10", withCallback: {(response:CDMResponse?) in if response?。status == DMCC_STATUS_NO_ERROR{//命令执行成功}else{//命令执行失败,此处处理错误}})
[readerDevice。dataManSystem sendCommand: @”设置解码器。MAX-SCAN-TIMEOUT 10" withCallback:^(CDMResponse *response){if (response. MAX-SCAN-TIMEOUT 10");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, results 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.count>0){CMBReadResult*readResult=readResults.readResults.firstObject;if(readResult.image){self.ivPreview.image=readResult.image;}if(readResult.readResult.readString){self.lblCode.text=readResult.readString;}}}
在上面的例子中,ivPreview是一个UIImageView用来显示扫描的条形码的图像,并且lblCode是一个UILabel,用于显示来自条形码的结果。也可以使用from的BOOLreadResult.goodRead检查扫描是否成功。
当条形码被成功读取,一CMBReadResult对象是由didReceiveReadResultFromReader:结果:方法。如果有多个条形码成功读取在一个图像/帧,多重CMBReadResult返回对象。这就是CMBReadResults类具有的数组CMBReadResult对象包含所有结果。
这个CMBReadResult类有描述条形码读取的结果属性:
当扫描结束而没有成功读取时,aCMBReadResult返回goodRead属性设置为false。这通常在扫描被取消或超时时发生。
启用图像和imageGraphics属性被填充CMBReadResult对象,则必须设置相应的imageResultEnabled和/或SVGResultEnabled特性CMBReaderDevice对象.
要查看关于图像和SVG图形如何并行使用和显示的示例,请参阅SDK包中提供的示例应用程序。
为了从扫描的条形码访问原始字节,你可以使用XML属性。该字节的“full_string”标签下存储为Base64编码字符串。这里有一个例子,你如何使用iOS的XML解析器从XML属性提取原始字节。
例子:
使用xmlparse
//XMLParserDelegate var currentElement=”“var base64String=”“func解析器(uParser:XMLParser,DidStartElementName:String,namespaceURI:String?,qualifiedName qName:String?,attributes attributeDict:[String:String]=[:]){currentElement=elementName}func解析器(parser:XMLParser,foundCharacters String:String){if currentElement==“full_string”{base64String=string}
#pragma NSXMLParserDelegate NSString*currentElement;NSString*base64String;-(void)parser:(NSXMLParser*)parser didStartElement:(NSString*)elementName namespaceURI:(NSString*)namespaceURI qualifiedName:(NSString*)qName属性:(NSDictionary*)attributeDict{currentmelement=elementName;}-(void)parser:(NSXMLParser*)parser foundCharacters:(NSString*)string*)string{if([currentElement IsequalString:@“full_string”]{base64String=string;}
设置完成后XMLParserDelegate要从XML结果中提取base64字符串,您需要创建xmlparse对象并使用此委托解析result.xml。这可以在中接收扫描结果时完成CMBReaderDeviceDelegate,或在访问CMBReadResult对象。下面是如何使用你之前创建的委托来获取原始字节:
让xmlParser:xmlParser=xmlParser.init(data:result.xml)xmlParser.delegate=self如果xmlParser.parse(){//通过此变量访问原始字节let bytes:data?=data.init(base64Encoded:base64String)}
NSXMLParser *xmlParser = [NSXMLParser. xml]。alloc initWithData result.XML):;xmlParser.delegate =自我;if ([xmlParser parse]){//通过这个变量访问原始字节NSData *bytes = [NSData. html]alloc initWithBase64EncodedString: base64String选项:0);}
默认情况下,图像和SVG结果是禁用的,这意味着在扫描时,CMBReadResults将在相应的属性中不包含任何数据。
要启用图像结果,请使用以下方法从CMBReaderDevice类设置imageResultEnabled属性:
self.readerDevice.imageResultEnabled = true
[readerDevice setImageResultEnabled:是的);
要启用SVG结果,使用以下方法从CMBReaderDevice类中设置imageResultEnabled属性:
self.readerDevice.svgResultEnabled=true
[readerDevice setSVGResultEnabled:YES];
可能存在由于电池电量不足或手动断开电缆而导致设备断开的情况。这些情况可由读卡器的连接状态回调的CMBReaderDeviceDelegate.
从非活动状态返回到应用程序后,读取器设备保持初始化状态,但未连接。不需要重新初始化SDK,但需要重新连接。
某些iOS版本在恢复应用程序时会发送“可用性”通知,说明外部附件可用。您可以在CMBReaderDeviceDelegate方法:(void)availabilityDidChangeOfReader:(CMBReaderDevice *)reader所以w当读卡器可用时,您可以连接。
例如:
func availabilityDidChange(ofReader reader: CMBReaderDevice) {if (reader. readerdevice);可用性== cmbreaderavailabilityavailable){读取设备。连接(completion: { error in if error != nil { // handle connection error } }) } }
- (void)availabilityDidChangeOfReader:(CMBReaderDevice *)reader {if (readerDevice。可用性== cmbreaderavailabilityavailable) {[readerDevice connectWithCompletion:^(NSError *error) {if (error){//处理连接错误}}];} }
有些iOS版本不报告简历的可用性变化,所以你需要手动处理。添加一个观察者UIApplicationIDBECOMEATIVENOIFIcation和连接。
例子:
override func viewDidLoad() {super.viewDidLoad() //当应用恢复时重新连接NotificationCenter.default.addObserver(self, selector: #selector(self. appbecameactive), name:NSNotification.Name。UIApplicationDidBecomeActive,对象:nil)} // handle app resume func appBecameActive() {if readerDevice != nil && readerDevice。可用性== cmbreaderavailabilityavailable && 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:UIApplicationIDBecMeactiveNotification对象:nil];}//处理应用程序恢复-(void)appBecameActive{if(readerDevice!=nil&&readerDevice.availability==CMBReaderAvailabilityAvailable&&readerDevice.connectionState!=CMBConnectionStateConnection&&readerDevice.connectionState!=CMBConnectionStateConnected){[readerDevice connectWithCompletion:^(NSError*错误){如果(错误){//句柄连接错误}};}
下表列出了使用内置摄像头进行条形码扫描时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打开蜂鸣器。 |
11 1打开蜂鸣器 |
x |
||
获取/设置 | 相机。变焦 | 0-2 | SET命令的取值如下: 0-正常(无缩放) 1-在级别1进行缩放, 在第2级缩放。 缩放级别扫描时使用。扫描结束时放大电平复位到0。 |
N/A | |||
获取/设置 | 相机变焦率 | 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 |
(|关闭) |
打开/关闭代码11检查。 |
从 | |||
获取/设置 |
C11.CHKCHAR-OPTION |
(0 - 1) |
0:禁用需要单校验和。 |
1. | x | ||
获取/设置 |
C11.1码大小 |
任何 最小值 马克斯 |
[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。CODESIZE或I205.CODESIZE。 [ON|OFF]接受任何长度的代码25。 [1 - 最大]设置接受代码25的最小长度。 |
N/A | x | ||
获取/设置 | 这件。QZ-SIZE | 0-100 | 静区单严格尺寸。请注意,C25.QZ-SIZE和I2O5.QZ-SIZE是摄影机API的相同设置。 | 50 | X | ||
获取/设置 | 这件。验证 | 开|关 | 打开/关闭码25和交错码2的验证。 | 在 | |||
获取/设置 |
C39。美国信息交换标准代码 |
[开|关] |
打开/关闭码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.1码大小 |
任何 最小值 马克斯 |
[ON | OFF]接受任何长度代码93。 [1-max]设置代码93的最小长度。 |
N/A | x |
||
获取/设置 | C93。验证 | [开|关] | 轮流验证码开/关93个条形码。 | 从 | |||
CONFIG.DEFAULT |
复位大部分的相机API设置为默认值。设备识别和通信设置不changed.To将所有设置,使用DEVICE.DEFAULT。 |
N/A | x |
||||
配置。保存 | 将当前配置保存到非易失性内存(仅限MX-1xx)。请注意,当MX断电或进入睡眠模式时,设备唤醒时会恢复上次保存的配置。 | N/A | |||||
配置。恢复 | 从非易失性内存中还原保存的配置(仅MX-1xxx)。 | N/A | |||||
获取/设置 |
数据类型 |
0 1. 2. 4. 8. |
指定结果将返回(多值的总和):无 文本字符串结果(默认) XML结果 XML统计数据 扫描图像(见图像。*命令) |
1. | x |
||
获取/设置 |
数据库扩展 |
[开|关] |
打开/关闭数据库扩展符号。 |
从 | x |
||
获取/设置 |
DATABAR。有限的 |
[开|关] |
打开/关闭DataBar Limited符号。 |
在 | x |
||
获取/设置 |
DATABAR。集团 DATABAR。RSS14 |
[开|关] |
打开/关闭DataBar GROUP(在cmbSDK 2.4.2之前称为RSS14)符号。 |
从 | x |
||
获取/设置 |
DATABAR.RSS14STACK |
[开|关] |
打开/关闭数据库RSS14堆叠符号。cmbSDK 2.4.2不推荐使用该符号,请改用DataBar.GROUP。 |
从 | |||
获取/设置 | 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 | |||
得到 | DECODER.MAX线程 | 返回设备支持的最大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 | |
获取/设置 | 译码器。线色 | (0-MAX) | 指定扫描程序在扫描过程中可以使用的最大CPU线程数。 | N/A | |||
获取/设置 | 译码器。USE-CENTERING | [开|关] | 只读取中心窗口内的代码。 | 从 | x | x | |
设备。默认的 |
将摄像机API设置为默认值。 |
x |
|||||
得到 |
DEVICE.FIRMWARE-VER |
获取设备固件版本。 |
N/A | x |
|||
得到 |
设备ID |
字符串 |
返回Cognex分配给扫描设备的设备ID。 对于内置摄像头,SDK返回53。 对于MX-100条形码扫描仪,SDK返回56。 |
N/A | x |
||
获取/设置 |
设备。的名字 |
返回分配给设备的名称。 |
mx - DEVICE.SERIAL-NUMBER的后6位。 | x |
|||
得到 |
DEVICE.SERIAL- NUMBER |
返回设备的序列号。 对于内置摄像头,SDK会分配一个伪随机数。 |
N/A | x |
|||
得到 |
设备类型 |
返回Cognex分配给扫描设备的设备名称。 对于内置摄像头,SDK返回“MX-Mobile”。 如果MX-100可用,SDK将返回“MX-100”。 |
N/A | x |
|||
获取/设置 |
的焦点。FOCUSTIME |
[0-10] |
设置相机的自动对焦周期(相机应该尝试重新对焦的频率)。 对于MX-100,默认值为1。 |
3. | x |
x | |
获取/设置 |
I2O5。CHKCHAR |
[开|关] |
打开/关闭交错2的5个校验位。 |
从 | x |
||
获取/设置 |
I2O5。CODESIZE |
任何 最小值 马克斯 |
对于cmbSDK,所有的Code 25变体使用相同的最小长度;因此,它将接受C25。CODESIZE或I205.CODESIZE。 [ON | OFF]接受任意长度的交织(5取2)。 [1-max]设置可接受的交错2的最小长度5。 |
N/A | x | ||
获取/设置 | I2O5.QZ尺寸 | 0-100 | 静区单严格尺寸。请注意,C25.QZ-SIZE和I2O5.QZ-SIZE是摄影机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 |
||
获取/设置 |
LIGHT.AIMER |
(0 - 1) |
扫描仪启动时禁用/启用瞄准仪。 基于cameraMode的默认设置: 0: NoAimer和FrontCamera 1:被动定时器和主动定时器 |
在 | x |
||
设置 | LIGHT.AIMER-CONFIG | (32 - 100) [0-15] (32 - 100) |
设置MX-100的配置 瞄准手强度, aimer调制, 光照强度 |
N/A | x | ||
得到 | LIGHT.AIMER-CONFIG | (0 - 1) | 一次获取所有MX-100配置参数。 0:表示从cache中读取设置 1:始终从设备读取数据。 |
N/A | x | ||
获取/设置 | LIGHT.AIMER-INTENSITY | (32 - 100) | 设定/得到目标LED的强度百分比。 | N/A | |||
获取/设置 | LIGHT.AIMER调制 | [0-15] | 设置/获取以毫秒为单位的瞄准器LED的调制(眨眼频率)。 | N/A | |||
获取/设置 |
灯光瞄准超时 |
(0 - 600) |
超时(秒)的瞄准器。 这个值总是被DECODER覆盖。MAX-SCAN——超时。 |
60 | x |
||
获取/设置 |
光。内部,使 |
[开|关] |
启用/禁用照明。 |
从 | x |
||
获取/设置 |
MSI.CHKCHAR |
(|关闭) |
打开/关闭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。验证 | (|关闭) | 打开/关闭MSI条形码的验证。 | 在 | |||
获取/设置 | QR。微 | (|关闭) | 打开/关闭QR Micro符号 | 从 | X | ||
获取/设置 |
SYMBOL.AZTECCODE |
(|关闭) |
打开/关闭Aztec代码符号。 |
从 | x |
||
获取/设置 |
的象征。CODABAR |
(|关闭) |
打开/关闭库德巴符号。 |
从 | x |
||
获取/设置 |
的象征。C11 |
(|关闭) |
打开/关闭代码11符号。 |
从 | |||
获取/设置 |
SYMBOL.C128 |
(|关闭) |
打开/关闭代码128符号。 |
从 | x |
||
获取/设置 |
的象征。这件 |
(|关闭) |
打开/关闭代码25符号(标准)。 |
从 | x |
||
获取/设置 |
的象征。C39 |
(|关闭) |
打开/关闭代码39符号。 |
从 | x |
||
获取/设置 | 的象征。C39-CONVERT-TO-C32 | (|关闭) | 启用/禁用Code39到Code32的转换。 | 从 | x | x | |
获取/设置 |
SYMBOL.C93 |
(|关闭) |
打开/关闭代码93符号。 |
从 | x |
||
获取/设置 |
的象征。鸡笼 |
(|关闭) |
打开/关闭COOP符号(代码25变体)。 |
从 | |||
获取/设置 |
的象征。DATAMATRIX |
(|关闭) |
打开/关闭数据矩阵符号。 |
从 | x |
||
获取/设置 |
SYMBOL.DATABAR |
(|关闭) |
打开/关闭DataBar符号。检查也DATABAR。组,DATABAR。有限的, DATABAR.EXPANDED to check which subtypes are read if Databar is turned on. |
从 | x |
||
获取/设置 |
SYMBOL.DOTCODE |
(|关闭) |
打开/关闭DotCode符号。 |
从 | x |
||
获取/设置 |
的象征。国际航空运输协会 |
(|关闭) |
打开/关闭IATA符号(代码25变体)。 |
从 | |||
获取/设置 |
符号。倒转 |
(|关闭) |
开启/关闭反符号(代码25的变体)。 |
从 | |||
获取/设置 |
的象征。ITF14 |
(|关闭) |
打开/关闭ITF-14符号(代码25变体)。 |
从 | |||
获取/设置 |
的象征。UPC-EAN |
(|关闭) |
打开/关闭UPC-A、UPC-E、EAN-8和EAN-13符号。 |
从 | x |
||
获取/设置 |
SYMBOL.MATRIX |
(|关闭) |
打开/关闭矩阵符号(代码25的变体)。 |
从 | |||
获取/设置 |
的象征。MAXICODE |
(|关闭) |
打开/关闭MaxiCode符号。 |
从 | |||
获取/设置 |
的象征。MSI |
(|关闭) |
打开/关闭MSI Plessey符号。 |
从 | x |
||
获取/设置 |
的象征。PDF417 |
(|关闭) |
打开/关闭PDF417符号。 |
从 | x |
||
获取/设置 |
符号。行星 |
(|关闭) |
打开/关闭PLANET符号。 |
从 | x |
||
获取/设置 |
的象征。POSTNET |
(|关闭) |
打开/关闭POSTNET符号。 |
从 | x |
||
获取/设置 | 的象征。TELEPEN | (|关闭) | 打开/关闭TELEPEN符号。 | 从 | x | ||
获取/设置 | SYMBOL.4STATE-AUS | (|关闭) | 打开/关闭澳大利亚邮政符号。 | 从 | x | ||
获取/设置 |
SYMBOL.4STATE-IMB |
(|关闭) |
打开/关闭智能邮件条形码符号。 |
从 | x |
||
获取/设置 |
SYMBOL.4STATE-RMC |
(|关闭) |
打开/关闭皇家邮政编码符号。 |
从 | x |
||
获取/设置 |
SYMBOL.QR |
(|关闭) |
打开/关闭QR和MicroQR符号。 |
从 | x |
||
获取/设置 | 传力数字 | (|关闭) | 开启/关闭数字电话笔符号的读取。 | 从 | |||
获取/设置 | TELEPEN。验证 | (|关闭) | 打开/关闭Telepen条形码的验证。 | 从 | |||
获取/设置 |
触发器。类型 |
0 1. 2. 3. 4. 5. |
不支持 不支持 手册(默认) 不支持 不支持 连续 |
N/A | 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。补充 |
0 1 - 4 |
关闭UPC补充代码。打开UPC补充代码。 |
N/A | x |
||
获取/设置 | UPC-EAN。验证 | (|关闭) | 打开/关闭UPC条形码的验证。 | 从 | |||
获取/设置 | 振动。好 | (|关闭) | 设置/获取当读取代码是否振动(默认为ON) | N/A | x |