康威克移动条形码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或闪电接口连接到您的PC,以开始调试。如果MX移动终端通过USB或闪电端口连接到您的移动设备,而您的应用程序正在运行,您需要通过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 * CoreMedia.framework * CoreVideo.framework * MediaPlayer.framework * Security.framework * AudioToolbox.framework * cmbSDK.framework
去你的项目Info.plist文件,并添加隐私-相机使用说明或NSCameraUsageDescription显示关于您的应用程序如何使用用户移动设备的摄像头的消息。
如果您使用cmbSDK与MX移动终端,您还需要添加支持的外部附属协议或UISupportedExternalAccessoryProtocols到com.cognex.dmcc在你的项目的Info.plist.(在这种情况下,你必须创建一个MFi请求之前发布你的应用程序在苹果应用商店。你可以在让你的MX移动终端启用应用程序进入应用程序商店部分。)
cmbSDK被设计为为支持的扫描设备提供一个高级的抽象接口。这不仅包括MX系列移动终端,还包括打算使用移动设备摄像头作为成像设备的应用程序。与这些设备通信和管理的复杂性被封装在SDK本身中:让应用程序只连接到选择的设备,然后使用它。
您的应用程序和支持的条形码扫描设备之间的主要接口是CMBReaderDevice班级。此类表示设备本身的抽象层,处理所有通信以及任何必要的硬件管理(例如,智能手机扫描)。
cmbSDK的使用步骤如下:
初始化要使用的设备类型的读取器设备:MX Reader或Camera Reader。
连接读取器设备。
配置阅读器(如果需要)。
开始扫描。
初始化、连接和配置通常只需要在应用程序中执行一次,以下情况除外:
初始化CMBReaderDevice与MX-1000,MX-1100等MX移动终端一起使用,简单:只需使用MX设备方法创建读取器设备(它不需要任何参数),并设置适当的委托(通常是自我):
让readerDevice:CMBReaderDevice = CMBReaderDevice. readerofmx (
CMBReaderDevice *readerDevice = [CMBReaderDevice readerOfMXDevice];readerDevice.delegate =自我;
MX移动终端的可用性可以在设备打开或关闭,或避雷针电缆连接或断开时发生变化。您可以使用以下方法处理这些更改CMBReaderDeviceDelegate方法。
func availabilityDidChange(ofReader reader: CMBReaderDevice)
- (void)availabilitydidchangeofreader :( cmbreaderdevice *)阅读器
如果您想连接到网络上的Cognex设备(例如手持或固定安装),您必须使用另一个名为网络发现.这个框架可以在cmbSDK包中找到。
移动设备内置摄像头的条形码扫描可能比MX移动终端更复杂。因此cmbSDK支持多种配置,以提供最大的灵活性,包括可选的外部瞄准器和照明的支持,以及自定义直播预览的外观的能力。MX-100是你的iPhone的外部设备,我们称之为主动瞄准器。
若要使用MX-100或移动设备的内置摄像头扫描条形码,请初始化CMBReaderDevice对象使用readerOfDeviceCameraWithCameraMode静态方法。照相机读取器在初始化时有几个选项。需要以下参数:
* cdmcamermode * 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: kcdmcameramodenaimer previewOptions:kCDMPreviewOptionDefaults previewView:nil];readerDevice.delegate =自我;
创建一个没有瞄准器,没有缩放按钮,并使用模拟触发器的阅读器:
让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){//处理连接错误}}];}
当连接connectionStateDidChangeOfReader,您可以在其中检查阅读器设备的连接状态connectionState参数。它应该是CMBConnectionStateConnected,这意味着您已经成功地连接到CMBReaderDevice,并可以开始使用康耐视移动条码SDK。
为了在连接到设备后更改一些设置,cmbSDK提供了一组高级的、设备独立的api,用于设置和检索设备的当前配置。
下面几节将详细介绍使用MX读取器和相机读取器进行扫描的区别。
MX系列移动终端提供复杂的设备配置和管理,包括在设备上保存配置。康耐视MX设备预先配置了大多数符号和功能,可以随时使用。
如果你想要自定义配置,可以通过DataMan安装工具或Cognex快速安装重新配置。这两个工具都很容易将保存的配置分发到多个设备,以进行简单的配置管理。
移动应用程序可以配置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。setsymbol (CMBSymbologyQR, enabled: true, completion: {(_ error: error ?) -> Void in if error != nil{//启用该符号失败,可能原因是:读取器断开,电池或电缆未插电,或当前readerDevice不支持符号}})
[readerDevice setSymbology:CMBSymbologyQR enabled:YES completion:^(NSError *error){if (error){//启用该符号失败,可能原因是:阅读器断开,电池或电缆未插电,或当前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:^(N错误*错误){如果(错误){//无法启用照明,可能的原因是:读卡器断开连接、电池电量不足或电缆未拔出,或者设备未配备照明灯}}];
请记住,并非CMBSDK支持的所有设备和设备模式都允许照明控制。例如,如果在被动瞄准器模式下使用内置摄像机,则由于LED用于瞄准以来,不可用照明。
如果内置摄像头用作阅读器,您有可能配置变焦级别,并定义这些变焦级别的使用方式。
手机摄像头有3个变焦级别,分别是:
你可以用“SET CAMERA”来定义这些变焦级别。ZOOM-PERCENT [100-MAX] [100-MAX]"命令。它配置两个级别的缩放百分比。100是不变焦的,MAX(上升到1000)将变焦到设备能够做到的最远。第一个参数用于设置第1级缩放,第二个参数用于设置第2级缩放。
当您想要检查当前设置时,您可以使用“GET CAMERA.ZOOM-PERCENT”来执行此操作,该选项返回两个值:级别1和级别2缩放。
例子
readerDevice.dataManSystem() ?。sendCommand(“设置相机。ZOOM-PERCENT 250 500”)
[readerDevice。dataManSystem sendCommand: @”设置相机。ZOOM-PERCENT 250 500”);
这里是另一个命令,设置你想使用的缩放级别或返回实际设置:“GET/SET CAMERA。变焦0 - 2”。
set命令的可能值为:
您可以在扫描之前或甚至在扫描期间调用此命令,缩放将上升到配置的级别。
当扫描完成时,这些值被重置为normal(0)。
例子
readerDevice.dataManSystem() ?。sendCommand(“设置相机。放大2”)
[readerDevice。dataManSystem sendCommand: @”设置相机。放大2”);
当使用移动设备的内置摄像头时,cmbSDK允许您在预览容器中或全屏查看摄像头预览。这个预览还包含一个覆盖层,可以自定义。cmbSDK相机覆盖层由用于缩放、闪光、关闭扫描器(全屏)的按钮、指示扫描超时的进度条和相机预览角上的线条构建而成。有两种可用的覆盖:遗留和CMB覆盖。
要使用CMBSDK v2.0.x和Manateeworks SDK中使用的传统相机覆盖层,请在初始化之前使用Mwoverlay的此属性CMBReaderDevice:
MWOverlay.setOverlayMode (Int32 (OM_LEGACY.rawValue))
[MWOverlay setOverlayMode OM_LEGACY):;
如果使用CMB覆盖,你可以在Resources/layout目录中找到布局文件:必威随行版官网
CMBScannerPartialView.xib当扫描程序在容器内启动时使用(部分视图)
CMBScannerView.xib当扫描仪全屏启动时
复制您需要的布局文件,或两个布局,然后修改它们,如您所愿。改变视图的大小、位置或颜色,删除视图,并添加自己的视图,如叠加图像。控件访问cmbSDK使用的视图(缩放、flash、关闭按钮、用于在角上绘制线条的视图和进度条)标签属性,请确保标签属性保持不变,以便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(“set解码器.1d-symberorientation 0”,withcallback:{(响应:cdmresponse yexorientation one?)如果响应,则在响应中?.status == dmcc_status_no_error {//命令已成功执行} {//命令失败,在此处处理错误}})
[readerDevice。dataManSystem sendCommand:@"SET DECODER.1D-SYMBOLORIENTATION 0" withCallback:^(CDMResponse *response){if (response. 0);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: @”设置解码器。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){//重置配置失败,可能原因是:阅读器断开,电池或电缆未插拔}}];
有了正确配置的读卡器,您就可以扫描条形码了。这只需调用开始扫描()方法从你CMBReaderDevice对象。接下来发生的事情是基于CMBReaderDevice以及它是如何配置的。一般来说:
在下列情况之一时,扫描停止:
当条形码解码成功时,您将收到一个cmbreadresults.在你的数组CMBReaderDevice的使用以下命令委托CMBReaderDeviceDelegate方法:
func didReceiveReadResult(fromReader reader: CMBReaderDevice, results readResults: CMBReadResults!)
- (void)didReceiveReadResultFromReader:(CMBReaderDevice *)reader results:(CMBReadResults *)readResults;
简单地显示读取结果扫描条形码后:
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 *)结果:读者(CMBReadResults *) readResults{如果(readResults.readResults。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。您也可以使用来自的BOOLreadResult.goodRead检查扫描是否成功。
当条形码被成功读取时,acmbreadresult.对象创建并返回didReceiveReadResultFromReader:结果:方法。如果有多个条形码成功读取在一个图像/帧,多重cmbreadresult.对象返回。这就是为什么cmbreadresults.类具有的数组cmbreadresult.包含所有结果的对象。
的cmbreadresult.类具有描述条形码读取结果的属性:
当扫描结束而没有成功读取时,acmbreadresult.返回goodRead属性设置为false。这通常发生在扫描被取消或超时时。
启用图像和imageGraphics要在cmbreadresult.对象,则必须设置相应的imageResultEnabled和/或SVGResultEnabled的属性CMBReaderDevice对象.
要查看关于图像和SVG图形如何并行使用和显示的示例,请参阅SDK包中提供的示例应用程序。
要访问扫描条形码中的原始字节,可以使用XML属性。这些字节以Base64字符串的形式存储在"full_string"标签下。下面是一个示例,说明如何使用iOS XML解析器从XML属性中提取原始字节。
例子:
方法解析XML并提取Base64字符串XMLParser.
// XMLParserDelegate var currentElement = "" var base64String = "" func parser(_ parser: XMLParser, didStartElement elementName: String, namespaceURI: String?, qualifiedName qName:字符串?, attributeDict: [String: String] = [:]) {currentElement = elementName} func parser(_ 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 attributes:(NSDictionary *)attributeDict {currentElement = elementName;} - (void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string {if ([currentElement isEqualToString:@"full_string"]) {base64String = string;} }
设置完成后XMLParserDelegate要从XML结果中提取base64字符串,您需要创建XMLParser.对象并使用此委托解析result.xml。这可以在接收扫描结果在CMBReaderDeviceDelegate,或访问cmbreadresult.对象。下面是如何使用你之前创建的委托来获取原始字节:
让xmlParser: xmlParser = xmlParser。init(data: result.xml) xmlParser.delegate = self if xmlParser.parse(){//通过这个变量访问原始字节let bytes: 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:是的);
可能会出现设备因电池电量不足或手动断开电缆而断开的情况。这些病例可以被connectionStateDidChangeOfReader回调的CMBReaderDeviceDelegate.
从非活动状态返回到应用程序后,读取器设备保持初始化状态,但未连接。不需要重新初始化SDK,但需要重新连接。
一些iOS版本会在恢复应用时发送一个“可用性”通知,说明外部附件可用。你可以在CMBReaderDeviceDelegate方法:(void)availabilitydidchangeofreader :( cmbreaderdevice *)阅读器如此w当阅读器可用时,你可以连接。
例如:
func availabilityDidChange(对于读卡器读卡器:CMBReaderDevice){if(reader.availability==CMBReaderAvailibilityAvailable){readerDevice.connect(完成:{if error中的错误!=nil{//handle connection error}}}
- (void)可用性DidChangeOfReader :( cmbreaderdevice *)reader {if(readerdevice.availability == cmbreaderavailibilityavailable){[readerdevice connectwithcompletion:^(nsError *错误){if(错误){//处理连接错误}}];} }
有些iOS版本不报告简历的可用性变化,所以你需要手动处理。添加一个观察者UIApplicationDidBecomeActiveNotification和连接。
例子:
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:UIApplicationDidBecomeActiveNotification对象:nil];} // handle app resume -(void) appBecameActive {if (readerDevice != nil;可用性== cmbreaderavailabilityavailable && 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条形码验证。 | 在 | |||
获取/设置 |
C11.CHKCHAR |
(|关闭) |
打开/关闭代码11检查。 |
从 | |||
获取/设置 |
C11.CHKCHAR-OPTION |
[0-1] |
0:禁用需要单校验和。 |
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。CODESIZE或I205.CODESIZE。 [ON|OFF]接受任何长度的代码25。 [1-max]设置接受代码25的最小长度。 |
N/A | x | ||
获取/设置 | C25.QZ尺寸 | 0 - 100 | 静区尺寸单一严格。注意,这件。QZ-SIZEand I2O5.QZ-SIZE are the same setting for the camera API. | 50. | X | ||
获取/设置 | C25.验证 | |关闭 | 打开/关闭码25和交错码2的验证。 | 在 | |||
获取/设置 |
C39。美国信息交换标准代码 |
(|关闭) |
打开/关闭代码39扩展ASCII。 |
从 | x |
||
获取/设置 |
C39。CODESIZE |
任何 闵 马克斯 |
[ON | OFF]接受任何长度代码39。 [2|4-max]设置接受代码39的最小长度。(使用camera API最小值为2,MX移动终端最小值为4) 将代码大小设置为2-3是有风险的,因为它可能导致误读。 |
N/A | x |
||
获取/设置 |
C39。CHKCHAR |
(|关闭) |
代码39检查字符。 |
从 | x |
||
获取/设置 | C39。QZ-SIZE | 0 - 100 | 静区尺寸单一严格。 | 50. | |||
获取/设置 | C39。验证 | (|关闭) | 打开/关闭39码条形码验证。 | 在 | |||
获取/设置 |
C93.ASCII |
(|关闭) |
打开/关闭Code 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 | |||||
CONFIG.RESTORE | 从非易失性内存中还原保存的配置(仅MX-1xxx)。 | N/A | |||||
获取/设置 |
数据。结果类型 |
0 1 2 4 8 |
指定返回的结果(多个值的和):无 文本字符串结果(默认) XML结果 XML数据 扫描图像(见图像。*命令) |
1 | x |
||
获取/设置 |
DATABAR。扩大 |
(|关闭) |
打开/关闭DataBar扩展符号。 |
从 | x |
||
获取/设置 |
DATABAR。有限的 |
(|关闭) |
打开/关闭DataBar Limited符号。 |
在 | x |
||
获取/设置 |
databar.group. DATABAR.RSS14 |
(|关闭) |
打开/关闭DataBar GROUP(在cmbSDK 2.4.2之前称为RSS14)符号。 |
从 | x |
||
获取/设置 |
DATABAR.RSS14STACK |
(|关闭) |
打开/关闭DataBar RSS14堆叠符号。从cmbSDK 2.4.2中已弃用,请使用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) |
设置Live-Stream Preview的超时。达到超时时,暂停解码,Live Stream Preview将保持在屏幕上。 |
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 | |
获取/设置 | 译码器 | (0-MAX) | 指定扫描程序在扫描过程中可以使用的CPU线程的最大数量。 | N/A | |||
获取/设置 | 解码器。使用定心 | (|关闭) | 只读取中心窗口内的代码。 | 从 | 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 |
|||
获取/设置 |
焦点,焦点时间 |
(清廉) |
设置相机的自动对焦期(相机应该尝试重新聚焦的频率)。 对于MX-100,默认值为1。 |
3. | x |
x | |
获取/设置 |
I2O5.ChkChar. |
(|关闭) |
打开/关闭交错2的5个校验位。 |
从 | x |
||
获取/设置 |
I2O5。CODESIZE |
任何 闵 马克斯 |
对于cmbSDK,所有的Code 25变体使用相同的最小长度;因此,它将接受C25。CODESIZE或I205.CODESIZE。 [ON|OFF]接受任意长度交错2的5。 [1-max]设置可接受的交织2/5的最小长度。 |
N/A | x | ||
获取/设置 | I2O5。QZ-SIZE | 0 - 100 | 静区尺寸单一严格。注意,这件。QZ-SIZEand I2O5.QZ-SIZE are the same setting for the camera API. | 50. | X | ||
获取/设置 | I2O5。验证 | (|关闭) | 打开/关闭对交错2和编码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 | ||
获取/设置 | Light.Auder-强度 | (32 - 100) | 设定/得到目标LED的强度百分比。 | N/A | |||
获取/设置 | 光。瞄准手-MODULATION | (0-15) | 设置/获取目标LED的调制(闪烁速率),以毫秒为单位。 | N/A | |||
获取/设置 |
光。瞄准手-TIMEOUT |
(0 - 600) |
瞄准器超时数秒。 这个值总是被DECODER覆盖。MAX-SCAN——超时。 |
60. | x |
||
获取/设置 |
Light.Internal-启用 |
(|关闭) |
启用/禁用照明。 |
从 | 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大小 | 0 - 100 | 静区尺寸单一严格。 | 50. | X | ||
获取/设置 | MSI.Verification. | (|关闭) | 打开/关闭MSI条形码验证。 | 在 | |||
获取/设置 | QR。微 | (|关闭) | 开启/关闭二维码微符号 | 从 | X | ||
获取/设置 |
的象征。AZTECCODE |
(|关闭) |
打开/关闭阿兹特克代码符号。 |
从 | x |
||
获取/设置 |
的象征。CODABAR |
(|关闭) |
打开/关闭Codabar符号。 |
从 | x |
||
获取/设置 |
的象征。C11 |
(|关闭) |
打开/关闭代码11符号。 |
从 | |||
获取/设置 |
的象征。C128 |
(|关闭) |
打开/关闭代码128符号。 |
从 | x |
||
获取/设置 |
的象征。这件 |
(|关闭) |
打开/关闭代码25符号(标准)。 |
从 | x |
||
获取/设置 |
的象征。C39 |
(|关闭) |
打开/关闭代码39符号。 |
从 | x |
||
获取/设置 | 的象征。C39-CONVERT-TO-C32 | (|关闭) | 启用/禁用Code39到Code32的转换。 | 从 | x | x | |
获取/设置 |
的象征。C93 |
(|关闭) |
打开/关闭代码93符号。 |
从 | x |
||
获取/设置 |
symbol.coop. |
(|关闭) |
打开/关闭COOP符号(代码25变体)。 |
从 | |||
获取/设置 |
的象征。DATAMATRIX |
(|关闭) |
打开/关闭数据矩阵符号。 |
从 | x |
||
获取/设置 |
的象征。DATABAR |
(|关闭) |
打开/关闭DataBar符号。检查也DATABAR。组,DATABAR。有限的, DATABAR.EXPANDED to check which subtypes are read if Databar is turned on. |
从 | x |
||
获取/设置 |
的象征。DOTCODE |
(|关闭) |
打开/关闭点代码符号。 |
从 | x |
||
获取/设置 |
的象征。国际航空运输协会 |
(|关闭) |
打开/关闭IATA符号(代码25变体)。 |
从 | |||
获取/设置 |
的象征。倒 |
(|关闭) |
打开/关闭反转符号(代码25变体)。 |
从 | |||
获取/设置 |
SYMBOL.ITF14 |
(|关闭) |
打开/关闭ITF-14符号(代码25变体)。 |
从 | |||
获取/设置 |
symbol.upc-ean. |
(|关闭) |
打开/关闭UPC-A,UPC-E,EAN-8和IEN-13符号系统。 |
从 | x |
||
获取/设置 |
的象征。矩阵 |
(|关闭) |
打开/关闭矩阵符号(代码25变种)。 |
从 | |||
获取/设置 |
的象征。MAXICODE |
(|关闭) |
打开/关闭MaxiCode符号。 |
从 | |||
获取/设置 |
symbol.msi. |
(|关闭) |
打开/关闭MSI Plessey符号。 |
从 | x |
||
获取/设置 |
SYMBOL.PDF417 |
(|关闭) |
打开/关闭PDF417符号。 |
从 | x |
||
获取/设置 |
的象征。地球 |
(|关闭) |
打开/关闭行星符号。 |
从 | x |
||
获取/设置 |
的象征。POSTNET |
(|关闭) |
打开/关闭PostNet Symbology。 |
从 | x |
||
获取/设置 | 的象征。TELEPEN | (|关闭) | 打开/关闭TELEPEN符号。 | 从 | x | ||
获取/设置 | 符号.4state-aus. | (|关闭) | 打开/关闭澳大利亚邮政符号。 | 从 | x | ||
获取/设置 |
SYMBOL.4STATE-IMB |
(|关闭) |
开启/关闭智能邮件条码符号。 |
从 | x |
||
获取/设置 |
SYMBOL.4状态-RMC |
(|关闭) |
打开/关闭皇家邮政编码符号。 |
从 | x |
||
获取/设置 |
的象征。QR |
(|关闭) |
打开/关闭QR和MicroQR符号。 |
从 | x |
||
获取/设置 | TELEPEN。FORCE-NUMERIC | (|关闭) | 打开/关闭仅读取数字Telepen Sybbology。 | 从 | |||
获取/设置 | 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 |