【徕卡全站仪Geocom开发】开发日志#01

前言

不知道能写多久的开发日志,先将就着写着看看,也算是对自己当前的总结和未来的鞭策吧。

  1. 本人从21年10月份开始接触前端开发,22年3月份开始接触app开发,对一些原生的安卓语言可能不太了解甚至可能会有错误,各位看官如果看的尽兴还请多多指导
  2. 项目的主要开发环境是uni-app,主要测试用机型为红米Note7(前辈走前留下来的,自己的手机是华为,折腾了半天也连不上HbuilderX的调试,小米大胜利 ),除非uni插件无法实现的功能(例如开关蓝牙等操作)否则大部分使用uni自身封装的内容,尽量少使用native.js
  3. 主要通信模式是通过蓝牙,发送命令使用ASCII协议来调用设备的部分函数

00 前置准备

    工利善其事必先利其器,本人读书时学的是土木工程,曾经实习的时候接触和使用过全站仪,知道部分基础的使用方法,所以学起来还算比较快,这个网上相关的文档链接也不少,这里随便贴一个地址:网址链接

    然后是页面的设计了,因为所在的小团队没有专门的设计师,只能由我一个苦逼的工科男来设计页面,参考一些比较好看的app来复制一下别人的样式,不过这个问题也不大,uni的插件市场的几个插件做的还算可以的。


01 蓝牙功能的使用

    本来是打算直接使用uni的蓝牙功能的,结果uni封装的只支持BLE蓝牙,徕卡全站仪的蓝牙也搜不到(搜出来有很多名称为空的设备,也不知道是不是机型的问题)

    而且uni自身貌似不支持控制蓝牙的开关,因此我就直接将前辈开发的另一个H5+App中蓝牙模块的内容移植到我自己的项目,也成功能搜寻到大部分设备了。

    值得庆幸的是,蓝牙功能模块本身没有什么大问题,唯一的问题是H5+App中前辈在封装的对象中定义了部分windows和document类,主要减少重复开关蓝牙页面的时候创建重复的BlueAdapter实例和操作部分dom元素使用的:将新创建的实例放在windwos下,构造的时候优先返回windows下的实例对象。我把这个功能封装在app初始化的时候,放在vuex里面了。


02 徕卡全站仪开发手册

    这个CSDN上也有相关的资源,我这边使用的相关手册和工具是另一个前辈通过徕卡官方申请的,在这里我就不贴相关内容和链接了,这个还算比较好找。
    然后坑爹的地方就来了,在开发手册里面有这么一行例子:

    该命令是一个查询时间的命令,发送该命令后会返回设备中时间的相关参数。我复制过来后贴在蓝牙的发送数据里面,连接后自动发送该命令,先尝试读取回收的数据。

//链接成功后的回调
deviceConnectedCallback: (address) => {
	this.allDevices.find(item => item.address == address).status = 'connected';
	setTimeout(() => {
		blueToothTool.sendData(`%R1Q,5008:1^m`);
	}, 5000)
},
//读取数据的回调
readDataCallback: (dataByteArr) => {
	console.log(dataByteArr);
}

    然后直接就拿不到数据,控制台也没有报错。然后只能跑去分析前辈的源码。

	/**
	 * 模拟java多线程读取数据
	 */

	function read(msgCount) {
		//clearInterval(setIntervalId);
		let dataArr = [];
		let hasdata = false;
		let datacount = 0;
		let block = false;
		let reading = false;
		//setIntervalId = setInterval(doReadData, 100);

		var mcount = 0;
		let start = new Date().getTime();
		let last = start;
		while ((new Date().getTime()) - start < 3000) {
			let now = new Date().getTime();
			if (now - last > 200) {
				last = now;
				let bres = doReadData();
				if (bres) {
					mcount++;
					if (mcount == msgCount) {
						break;
					}
				}
			}
		}

		function doReadData() {
			//console.log('模拟线程:'+t);
			//setTimeCount++;
			if (hasdata) return false;
			if (block) return false;

			while (invoke(btInStream, "available") != 0) {
				hasdata = true;
				let data = invoke(btInStream, "read");
				dataArr.push(data);
			}

			if (hasdata && invoke(btInStream, "available") == 0) {
				block = true;
				hasdata = false;
				//var strResponse = String.fromCharCode.apply(String, dataArr);
				//strResponse = strResponse.replace('\r','').replace('\n',';');
				//console.log('输出结果_E:' + strResponse);
				options.readDataCallback && options.readDataCallback(dataArr);
				dataArr = [];
				block = false;
				return true;
			}
			return false;
		}
	}

	/**
	 * 发送数据
	 * @param {String} dataStr
	 * @return {Boolean}
	 */
	function sendData(dataStr) {
		try {			
			let bytes = invoke(dataStr, 'getBytes','Ascii');
			btOutStream.write(bytes);
			console.log('发送数据:' + dataStr);
			read(2);
		} catch(e) {
			alert('发送失败!'+JSON.stringify(e));
			return false;
		}
		return true;
	}

    看了半天也没看出个所以然,读取数据中doReadData方法里的invoke(btInStream, “available”)始终为0,但是sendData的控制台也能成功输出数据。于是自己写了个测试程序,用两台手机做测试发现两边都能发送和接受,说明这个模块本身是没有问题的。
    后来发现一款APP,测量员。它能够通过蓝牙成功链接和操作我们单位采购的设备,这也说明采购的设备支持geocom开发,而且蓝牙确实是可以传输数据的。其实在这里不难想到直接用蓝牙数据抓包就可以解决问题了,但是我在这里一直纠结是不是我自己写的方法有问题,或者是因为机型的适配性问题,在这里浪费了大量的时间。
    在尝试很多方法之后还是选择使用抓包,在手机设置中,开发人员选项里设置蓝牙数据抓取,小米的手机还不能直接通过adb shell后的命令找到指定的log文件,不过还好还是有方法拿到指定的文件的:网址链接
    抓到数据的那一刻我就傻眼了,原来我之前做的工作90%的是对的,只是少了一个东西
    这个是别人的APP:
    这个是我的:


    然后我才理解到,原来蓝牙输入到设备的数据可能中类似于cmd中的输入内容,需要敲一下回车才能执行命令,原来我之前几天的工作全部木大
在这里插入图片描述    拿到回执的数据了!

  • 11
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 14
    评论
莱卡全站仪接口文档 1.5 1GEOCOM 5 1.1INTRODUCTION 5 1.2TPS1200 SYSTEM SOFTWARE 5 1.3PRINCIPLES OF GEOCOM OPERATION 6 2GENERAL CONCEPTS OF USING GEOCOM 7 2.1INTRODUCTION 7 2.2GENERAL CONCEPT OF OPERATION 7 2.3ASCII PROTOCOL 7 2.4FUNCTION CALL PROTOCOL - C/C++ 8 2.5FUNCTION CALL PROTOCOL - VBA 9 3FUNDAMENTALS OF PROGRAMMING GEOCOM 10 3.1INTRODUCTION 10 3.2ASCII PROTOCOL PROGRAMMING 10 3.3C/C++ - PROGRAMMING 12 3.4VBA - PROGRAMMING 14 3.5UNITS OF VALUES 16 3.6TPS1200 INSTRUMENT MODES OF OPERATION 16 3.7COMMON COMMUNICATION ERRORS 16 4REMARKS ON THE DESCRIPTION 19 4.1STRUCTURE OF DESCRIPTIONS 19 5COMMUNICATION SETTINGS 21 5.1USAGE 21 5.2CONSTANTS AND TYPES 21 5.3GENERAL GEOCOM FUNCTIONS 22 5.4CLIENT SPECIFIC GEOCOM FUNCTIONS 24 6ALT USER - AUS 38 6.1USAGE 38 6.2CONSTANTS AND TYPES 38 6.3FUNCTIONS 39 7AUTOMATION - AUT 43 7.1USAGE 43 7.2CANCELLING / ABORTING CURRENT FUNCTIONS 43 7.3CONSTANTS AND TYPES 43 7.4FUNCTIONS 45 8BASIC APPLICATIONS – BAP 69 8.1USAGE 69 8.2CONSTANTS AND TYPES 69 8.3FUNCTIONS 71 9BASIC MAN MACHINE INTERFACE – BMM 89 9.1USAGE 89 9.2CONSTANTS AND TYPES 89 9.3FUNCTIONS 90 10COMMUNICATIONS – COM 94 10.1USAGE 94 10.2CONSTANTS AND TYPES 94 10.3FUNCTIONS 95 11CENTRAL SERVICES – CSV 101 11.1INTRODUCTION 101 11.2USAGE 101 11.3CONSTANTS AND TYPES 101 11.4FUNCTIONS 103 12ELECTRONIC DISTANCE MEASUREMENT – EDM 113 12.1INTRODUCTION 113 12.2USAGE 113 12.3CONSTANTS AND TYPES 113 12.4FUNCTIONS 114 13FILE TRANSFER - FTR 117 13.1USAGE 117 13.2CONSTANTS AND TYPES 117 13.3FUNCTIONS 118 14IMAGE PROCESSING – IMG 127 14.1INTRODUCTION 127 14.2USAGE 127 14.3CONSTANTS AND TYPES 127 14.4FUNCTIONS 128 15MOTORISATION – MOT 131 15.1INTRODUCTION 131 15.2USAGE 131 15.3CONSTANTS AND TYPES 131 15.4FUNCTIONS 132 16SUPERVISOR – SUP 137 16.1USAGE 137 16.2CONSTANTS AND TYPES 137 16.3FUNCTIONS 138 17THEODOLITE MEASUREMENT AND CALCULATION – TMC 140 17.1INTRODUCTION 140 17.2USAGE 140 17.3CONSTANTS AND TYPES 141 17.4MEASUREMENT FUNCTIONS 144 17.5MEASUREMENT CONTROL FUNCTIONS 157 17.6DATA SETUP FUNCTIO
### 回答1: 全站仪GEOMCOM Manual中文版是一本关于全站仪产品的使用手册,为用户提供了全面的使用指南和技术支持。这本手册以中文写成,方便中国用户理解和使用。 手册内容包括全站仪的基本介绍、产品规格、操作方法和注意事项等方面的内容。首先介绍了全站仪的工作原理和应用范围,让用户对该产品有一个整体的了解。然后详细介绍了每个功能按钮和菜单选项的作用,以及如何进行测量、校准和数据处理等操作步骤。同时,手册还提供了一些常见问题的解答和故障排除的方法,帮助用户解决在使用过程中可能遇到的问题。 此外,手册还介绍了一些高级功能和技巧,让有经验的用户能够更好地利用全站仪的功能特点,提高工作效率和测量精度。手册中还包含了一些案例和示例,帮助用户更好地理解实际应用的步骤和方法。 总之,全站仪GEOMCOM Manual中文版是公司为了满足中国用户需求而编写的一本全面的使用手册,帮助用户更好地理解和使用全站仪产品,提高工作效率和测量精度。无论是新手还是有一定经验的用户,都可以通过这本手册快速学习并掌握全站仪的使用方法。 ### 回答2: 全站仪geocom_manual中文版是一本关于全站仪使用指南的中文版手册。全站仪是一种现代化的测量仪器,用于测量地面的各种参数和绘制地形图。全站仪具有高精度、高效率和多功能的特点,广泛应用于建筑工程、土地测绘、城市规划等领域。 geocom_manual中文版手册详细介绍了全站仪的各个功能、操作步骤和技巧。它包含了对全站仪硬件和软件的详细说明,包括仪器的基本结构、操作界面的功能、测量方法和数据处理等方面的内容。手册中还包含了大量的示意图和实际应用案例,以帮助用户更好地理解和掌握全站仪的使用方法。 通过阅读geocom_manual中文版手册,使用者可以了解到如何正确搭建全站仪的工作站、选择适当的测量仪器和配件、进行准确的测量、处理和分析测量数据等。手册还提供了一些常见问题的解答和故障排除的方法,以帮助使用者在实际操作中遇到问题时能够及时解决。 总之,全站仪geocom_manual中文版是一本对全站仪进行详尽介绍和指导的手册,它能够帮助使用者更好地了解和掌握全站仪的使用方法,提高测量工作的效率和精度。无论是初学者还是有一定经验的专业人士,都可以通过阅读这本手册来提升自己的测量技术。 ### 回答3: 全站仪geocom_manual是德国著名光学仪器生产商(Leica)所推出的全站仪产品的中文用户手册。 全站仪是一种高精度的测量仪器,常用于土地测量、建筑工程、道路施工等领域。它能够通过测量水平角度、垂直角度和斜距来确定目标点的坐标位置。 geocom_manual是这款全站仪的操作说明书,它提供了详细的使用方法、参数设置和故障排除等内容,方便用户进行正确的使用和操作。 这本手册的中文版适用于中国市场的用户,它的内容是经过专业翻译和本地化处理的,以确保用户能够准确理解和使用全站仪。手册一般包括产品简介、功能介绍、设备启动和关机、测量操作流程、数据处理和存储等内容,同时也会介绍一些常见问题和解决方法。 geocom_manual的中文版对于使用者来说非常重要,它不仅方便用户快速上手,还能帮助用户了解产品的特点、功能和性能,并掌握正确的使用方法和操作技巧。通过阅读这本手册,用户可以更好地利用全站仪进行各种测量任务,提高工作效率和精度。 总的来说,全站仪geocom_manual中文版是一本对于全站仪用户非常有价值的操作手册,它为用户提供了全面而详细的使用指导,帮助他们更好地使用该产品进行测量工作。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 14
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值