首页 python使用serial模块通过串口控制云台(基于PELCO-D协议)

python使用serial模块通过串口控制云台(基于PELCO-D协议)

举报
开通vip

python使用serial模块通过串口控制云台(基于PELCO-D协议)     python使用serial模块,通过串口控制云台(基于PELCO-D协议)                  一、需求描述通过python实现对云台的控制,使用到的相关模块:1、pyserial,串口模块,用于连接串口,并通过串口发送指令2、bytes,内置模块,用于将16进制的指令转化成字节流二、实现代码:版本v11、详细过程见代码备注2、关键一步是发送数据时的处理,使用到了bytes,请查阅“三”3、环境搭建根据云台的说明书进行,这里采用的是串口连接设备importserialfromcommon....

python使用serial模块通过串口控制云台(基于PELCO-D协议)
     python使用serial模块,通过串口控制云台(基于PELCO-D 协议 离婚协议模板下载合伙人协议 下载渠道分销协议免费下载敬业协议下载授课协议下载 )                  一、需求描述通过python实现对云台的控制,使用到的相关模块:1、pyserial,串口模块,用于连接串口,并通过串口发送指令2、bytes,内置模块,用于将16进制的指令转化成字节流二、实现代码:版本v11、详细过程见代码备注2、关键一步是发送数据时的处理,使用到了bytes,请查阅“三”3、环境搭建根据云台的 说明书 房屋状态说明书下载罗氏说明书下载焊机说明书下载罗氏说明书下载GGD说明书下载 进行,这里采用的是串口连接设备importserialfromcommon.configimportserial_comclassSerialHandler(object):def__init__(self,port=serial_com,baudrate=9600,parity="无",bytesize=8,stopbits=1):"""串口初始化,设置串口相关参数:paramport:str类型,例:COM1:parambaudrate:int类型,取值范围:[4800,9600,19200,18400,57600,115200]:paramparit:str类型,N:"无",O:"奇",E:"偶":parambytesize:int类型,取值范围:[7,8]:paramstopbits:int类型,取值范围:[1,2]"""#根据上位机显示,转换成serial库识别的参数ifparity=="无":parity='N'elifparity=="奇":parity='O'elifparity=="偶":parity='E'else:passself.serial_handler=serial.Serial()self.serial_handler.port=portself.serial_handler.baudrate=baudrateself.serial_handler.bytesize=bytesizeself.serial_handler.parity=parityself.serial_handler.stopbits=stopbits#连接若超时1秒,则结束连接self.serial_handler.timeout=15defopen_and_write(self):'''#PELCO-D协议:一、数据 格式 pdf格式笔记格式下载页码格式下载公文格式下载简报格式下载 :8位数据位、1位停止位,无效验位。波特率:2400二、命令格式:字节1字节2字节3字节4字节5字节6字节7同步字节地址码指令码1指令码2数据码1数据码2校验码三、命令解释:1.协议采用十六进制2.同步字节始终为FF3.地址码为云台地址号,地址范围请了解云台说明4.指令码用于 关于同志近三年现实表现材料材料类招标技术评分表图表与交易pdf视力表打印pdf用图表说话 pdf 示不同的行为5.数据码1表示水平速度,2分别表示垂直速度6.校验码=MOD[(字节2~6的值相加)/100H]四、命令例子:#右下角:FF010012202053#左上角:FF01000C20204D#左下角:FF010014202055#右上角:FF01000A20204B#左:FF010004200025#上:FF010008002029#右:FF010002200023#下:FF010010002031#停止指令:FF010000000001:return:无'''self.serial_handler.timeout=0.05#云台转动的时间,单位为秒self.serial_handler.open()#bytes().fromhex("FF01000A20204B")self.serial_handler.write(bytes().fromhex("FF01000A20204B"))res=self.serial_handler.readline()print(res)self.serial_handler.write(bytes().fromhex("FF010000000001"))#停止转动指令,如果没有,则走到世界尽头#b"ff01000c20204d"#chr(0x06).encode("utf-8")#self.serial_handler.in_waiting(0xff010008002029)#self.serial_handler.write(b'FF010000000001')print("串口设置:",self.serial_handler)print("我请求了!!!")res=self.serial_handler.readline()print(res)self.serial_handler.close()if__name__=='__main__':#控制云台SerialHandler(port="COM5",baudrate=2400,parity="无",bytesize=8,stopbits=1).open_and_write()三、bytes()的用法:官方文档https://docs.python.org/zh-cn/3.7/library/stdtypes.html#binary-sequence-types-bytes-bytearray-memoryview 摘要(其实就是复制粘贴):二进制序列类型--- bytes, bytearray, memoryview操作二进制数据的核心内置类型是 bytes 和 bytearray。它们由 memoryview 提供支持,该对象使用 缓冲区协议 来访问其他二进制对象所在内存,不需要创建对象的副本。array 模块支持高效地存储基本数据类型,例如32位整数和IEEE754双精度浮点值。bytes对象bytes对象是由单个字节构成的不可变序列。由于许多主要二进制协议都基于ASCII文本编码,因此bytes对象提供了一些仅在处理ASCII兼容数据时可用,并且在许多特性上与字符串对象紧密相关的方法。class bytes([source[, encoding[, errors]]])首先,表示bytes字面值的语法与字符串字面值的大致相同,只是添加了一个 b 前缀:单引号: b'同样允许嵌入 "双" 引号'。双引号: b"同样允许嵌入 '单' 引号"。三重引号: b'''三重单引号''', b"""三重双引号"""bytes字面值中只允许ASCII字符(无论源代码声明的编码为何)。任何超出127的二进制值必须使用相应的转义序列形式加入bytes字面值。像字符串字面值一样,bytes字面值也可以使用 r 前缀来禁用转义序列处理。请参阅 字符串和字节串字面值 了解有关各种bytes字面值形式的详情,包括所支持的转义序列。虽然bytes字面值和表示法是基于ASCII文本的,但bytes对象的行为实际上更像是不可变的整数序列,序列中的每个值的大小被限制为 0 <= x < 256 (如果违反此限制将引发 ValueError)。这种限制是有意设计用以强调以下事实,虽然许多二进制格式都包含基于ASCII的元素,可以通过某些面向文本的算法进行有用的操作,但情况对于任意二进制数据来说通常却并非如此(盲目地将文本处理算法应用于不兼容ASCII的二进制数据格式往往将导致数据损坏)。除了字面值形式,bytes对象还可以通过其他几种方式来创建:指定长度的以零值填充的bytes对象: bytes(10)通过由整数组成的可迭代对象: bytes(range(20))通过缓冲区协议复制现有的二进制数据: bytes(obj)另请参阅 bytes 内置类型。由于两个十六进制数码精确对应一个字节,因此十六进制数是描述二进制数据的常用格式。相应地,bytes类型具有从此种格式读取数据的附加类方法:classmethod fromhex(string)此 bytes 类方法返回一个解码给定字符串的bytes对象。字符串必须由表示每个字节的两个十六进制数码构成,其中的ASCII空白符会被忽略。>>>bytes.fromhex('2Ef0F1f2')b'.\xf0\xf1\xf2'在3.7版更改: bytes.fromhex() 现在会忽略所有ASCII空白符而不只是空格符。存在一个反向转换函数,可以将bytes对象转换为对应的十六进制表示。hex()返回一个字符串对象,该对象包含实例中每个字节的两个十六进制数字。>>>b'\xf0\xf1\xf2'.hex()'f0f1f2'3.5新版功能.由于bytes对象是由整数构成的序列(类似于元组),因此对于一个bytes对象 b,b[0] 将为一个整数,而 b[0:1] 将为一个长度为1的bytes对象。(这与文本字符串不同,索引和切片所产生的将都是一个长度为1的字符串)。bytes对象的表示使用字面值格式(b'...'),因为它通常都要比像 bytes([46, 46, 46]) 这样的格式更好用。你总是可以使用 list(b) 将bytes对象转换为一个由整数构成的列表。注解针对Python2.x用户的说明:在Python2.x系列中,允许8位字符串(2.x所提供的最接近内置二进制数据类型的对象)与Unicode字符串进行各种隐式转换。这是为了实现向下兼容的变通做法,以适应Python最初只支持8位文本而Unicode文本是后来才被加入这一事实。在Python3.x中,这些隐式转换已被取消——8位二进制数据与Unicode文本间的转换必须显式地进行,bytes与字符串对象的比较结果将总是不相等。关注博主即可阅读 全文 企业安全文化建设方案企业安全文化建设导则安全文明施工及保证措施创建安全文明校园实施方案创建安全文明工地监理工作情况  -全文完-
本文档为【python使用serial模块通过串口控制云台(基于PELCO-D协议)】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
该文档来自用户分享,如有侵权行为请发邮件ishare@vip.sina.com联系网站客服,我们会及时删除。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
下载需要: 免费 已有0 人下载
最新资料
资料动态
专题动态
个人认证用户
资教之佳
暂无简介~
格式:doc
大小:41KB
软件:Word
页数:13
分类:互联网
上传时间:2023-06-22
浏览量:25