agrobot_base/Exemplos/WitStandardModbus_WT901C485.../Python/Python-SDK-WT901C485/chs/JY901S.py

162 lines
7.6 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# coding:UTF-8
"""
测试文件
Test file
"""
import time
import datetime
import platform
import struct
import lib.device_model as deviceModel
from lib.data_processor.roles.jy901s_dataProcessor import JY901SDataProcessor
from lib.protocol_resolver.roles.wit_protocol_resolver import WitProtocolResolver
welcome = """
欢迎使用维特智能示例程序 Welcome to the Wit-Motoin sample program
"""
_writeF = None #写文件 Write file
_IsWriteF = False #写文件标识 Write file identification
def readConfig(device):
"""
读取配置信息示例 Example of reading configuration information
:param device: 设备模型 Device model
:return:
"""
tVals = device.readReg(0x02,3) #读取数据内容、回传速率、通讯速率 Read data content, return rate, communication rate
if (len(tVals)>0):
print("返回结果:" + str(tVals))
else:
print("无返回")
tVals = device.readReg(0x23,2) #读取安装方向、算法 Read the installation direction and algorithm
if (len(tVals)>0):
print("返回结果:" + str(tVals))
else:
print("无返回")
def setConfig(device):
"""
设置配置信息示例 Example setting configuration information
:param device: 设备模型 Device model
:return:
"""
device.unlock() # 解锁 unlock
time.sleep(0.1) # 休眠100毫秒 Sleep 100ms
device.writeReg(0x03, 6) # 设置回传速率为10HZ Set the transmission back rate to 10HZ
time.sleep(0.1) # 休眠100毫秒 Sleep 100ms
device.writeReg(0x23, 0) # 设置安装方向:水平、垂直 Set the installation direction: horizontal and vertical
time.sleep(0.1) # 休眠100毫秒 Sleep 100ms
device.writeReg(0x24, 0) # 设置安装方向:九轴、六轴 Set the installation direction: nine axis, six axis
time.sleep(0.1) # 休眠100毫秒 Sleep 100ms
device.save() # 保存 Save
def AccelerationCalibration(device):
"""
加计校准 Acceleration calibration
:param device: 设备模型 Device model
:return:
"""
device.AccelerationCalibration() # Acceleration calibration
print("加计校准结束")
def FiledCalibration(device):
"""
磁场校准 Magnetic field calibration
:param device: 设备模型 Device model
:return:
"""
device.BeginFiledCalibration() # 开始磁场校准 Starting field calibration
if input("请分别绕XYZ轴慢速转动一圈三轴转圈完成后结束校准Y/N)").lower()=="y":
device.EndFiledCalibration() # 结束磁场校准 End field calibration
print("结束磁场校准")
def onUpdate(deviceModel):
"""
数据更新事件 Data update event
:param deviceModel: 设备模型 Device model
:return:
"""
print("芯片时间:" + str(deviceModel.getDeviceData("Chiptime"))
, " 温度:" + str(deviceModel.getDeviceData("temperature"))
, " 加速度:" + str(deviceModel.getDeviceData("accX")) +","+ str(deviceModel.getDeviceData("accY")) +","+ str(deviceModel.getDeviceData("accZ"))
, " 角速度:" + str(deviceModel.getDeviceData("gyroX")) +","+ str(deviceModel.getDeviceData("gyroY")) +","+ str(deviceModel.getDeviceData("gyroZ"))
, " 角度:" + str(deviceModel.getDeviceData("angleX")) +","+ str(deviceModel.getDeviceData("angleY")) +","+ str(deviceModel.getDeviceData("angleZ"))
, " 磁场:" + str(deviceModel.getDeviceData("magX")) +","+ str(deviceModel.getDeviceData("magY"))+","+ str(deviceModel.getDeviceData("magZ"))
, " 经度:" + str(deviceModel.getDeviceData("lon")) + " 纬度:" + str(deviceModel.getDeviceData("lat"))
, " 航向角:" + str(deviceModel.getDeviceData("Yaw")) + " 地速:" + str(deviceModel.getDeviceData("Speed"))
, " 四元素:" + str(deviceModel.getDeviceData("q1")) + "," + str(deviceModel.getDeviceData("q2")) + "," + str(deviceModel.getDeviceData("q3"))+ "," + str(deviceModel.getDeviceData("q4"))
)
if (_IsWriteF): #记录数据 Record data
Tempstr = " " + str(deviceModel.getDeviceData("Chiptime"))
Tempstr += "\t"+str(deviceModel.getDeviceData("accX")) + "\t"+str(deviceModel.getDeviceData("accY"))+"\t"+ str(deviceModel.getDeviceData("accZ"))
Tempstr += "\t" + str(deviceModel.getDeviceData("gyroX")) +"\t"+ str(deviceModel.getDeviceData("gyroY")) +"\t"+ str(deviceModel.getDeviceData("gyroZ"))
Tempstr += "\t" + str(deviceModel.getDeviceData("angleX")) +"\t" + str(deviceModel.getDeviceData("angleY")) +"\t"+ str(deviceModel.getDeviceData("angleZ"))
Tempstr += "\t" + str(deviceModel.getDeviceData("temperature"))
Tempstr += "\t" + str(deviceModel.getDeviceData("magX")) +"\t" + str(deviceModel.getDeviceData("magY")) +"\t"+ str(deviceModel.getDeviceData("magZ"))
Tempstr += "\t" + str(deviceModel.getDeviceData("lon")) + "\t" + str(deviceModel.getDeviceData("lat"))
Tempstr += "\t" + str(deviceModel.getDeviceData("Yaw")) + "\t" + str(deviceModel.getDeviceData("Speed"))
Tempstr += "\t" + str(deviceModel.getDeviceData("q1")) + "\t" + str(deviceModel.getDeviceData("q2"))
Tempstr += "\t" + str(deviceModel.getDeviceData("q3")) + "\t" + str(deviceModel.getDeviceData("q4"))
Tempstr += "\r\n"
_writeF.write(Tempstr)
def startRecord():
"""
开始记录数据 Start recording data
:return:
"""
global _writeF
global _IsWriteF
_writeF = open(str(datetime.datetime.now().strftime('%Y%m%d%H%M%S')) + ".txt", "w") #新建一个文件
_IsWriteF = True #标记写入标识
Tempstr = "Chiptime"
Tempstr += "\tax(g)\tay(g)\taz(g)"
Tempstr += "\twx(deg/s)\twy(deg/s)\twz(deg/s)"
Tempstr += "\tAngleX(deg)\tAngleY(deg)\tAngleZ(deg)"
Tempstr += "\tT(°)"
Tempstr += "\tmagx\tmagy\tmagz"
Tempstr += "\tlon\tlat"
Tempstr += "\tYaw\tSpeed"
Tempstr += "\tq1\tq2\tq3\tq4"
Tempstr += "\r\n"
_writeF.write(Tempstr)
print("开始记录数据")
def endRecord():
"""
结束记录数据 End record data
:return:
"""
global _writeF
global _IsWriteF
_IsWriteF = False # 标记不可写入标识 Tag cannot write the identity
_writeF.close() #关闭文件 Close file
print("结束记录数据")
if __name__ == '__main__':
print(welcome)
"""
初始化一个设备模型 Initialize a device model
"""
device = deviceModel.DeviceModel(
"我的JY901",
WitProtocolResolver(),
JY901SDataProcessor(),
"51_0"
)
if (platform.system().lower() == 'linux'):
device.serialConfig.portName = "/dev/ttyUSB0" #设置串口 Set serial port
else:
device.serialConfig.portName = "COM39" #设置串口 Set serial port
device.serialConfig.baud = 9600 #设置波特率 Set baud rate
device.openDevice() #打开串口 Open serial port
readConfig(device) #读取配置信息 Read configuration information
device.dataProcessor.onVarChanged.append(onUpdate) #数据更新事件 Data update event
startRecord() # 开始记录数据 Start recording data
input()
device.closeDevice()
endRecord() #结束记录数据 End record data