日期:2021年9月17日,本座天龄:13397天
1. 下位机只能接受16进制固定格式数据
2. 采用串口TTL 自定义16进制格式指令
3. 程序中使用数组完成设定整数值的替换
感谢程序中借鉴的前人的代码,希望对其他人也有帮助。
直接上代码:
#Python 3.8.5 下完成测试
import serial
import time
#自定义函数——功率设定
def mw_p_set(mw_value):
mw_set=[0xA5,0x5A,0x01,0x01,0x00,0x00,0x55,0xAA] #初始设置值为0W
#数据结构:头1 头2 地址 命令1 数高 数低 尾1 尾2
if((mw_value>=0)and(mw_value<=1000)):
y_h=mw_value>>8#输入功率整数值转换为16进制,整形数>>8将得到高位十六进制数字节(16进制数<<8将得到高位整形数字节)
y_l=mw_value&0xff#十六进制低位字节
mw_set[4]=y_h#功率值高字节替换
mw_set[5]=y_l#功率值低字节替换
ser.write(mw_set)#输出功率设定值
time.sleep(0.1)
#a=[0x01,0xe0]#高低字节16进制转换成整数示例如下:
#x_h=a[0]
#x_l=a[1]
#x=x_h<<8|x_l
#print(x)#示例结束
print('功率设定值为(Watt):',mw_value)
return 1
else:
print('输入值需要为0~1000范围整数')
return 0
ser = serial.Serial("com11", 115200) # 选择串口,并设置波特率
if ser.is_open:
print("port open success")
else:
print("port open failed")
def main():
while True:
# hex(16进制)转换为bytes(2进制),应注意Python3.7与Python2.7此处转换的不同
#send_data = bytes.fromhex('ff 01 00 55 00 00 56') # 发送数据转换为b'\xff\x01\x00U\x00\x00V'
#ser.write(send_data) # 发送命令
#time.sleep(0.1) # 延时,否则len_return_data将返回0,此处易忽视!!!
len_return_data = ser.inWaiting() # 获取缓冲数据(接收数据)长度
if len_return_data !=0:
return_data = ser.read(len_return_data) # 读取缓冲数据
# bytes(2进制)转换为hex(16进制),应注意Python3.7与Python2.7此处转换的不同,并转为字符串后截取所需数据字段,再转为10进制
mw_p_set(600) #测试自定义函数
# 清空接收缓冲区
ser.flushInput()
# 必要的软件延时
time.sleep(0.1)
if __name__=='__main__':
try:
main()
except KeyboardInterrupt:
if ser != None:
ser.close()