国产温箱热策AH-662控制代码(TCP/IP通信模式)

 以下Python代码经实测验证OK,只要编写客户端(温箱端)的socket通信代码即可,服务器端(PC端)不需要。

import socket

class TempOver():
    '''
    该程序仅用于控制国产温箱热策AH-662
    '''
    def __init__(self,ipAddr):
        ip_port = (ipAddr, 8000)
        self.client = socket.socket()
        self.client.connect(ip_port)

    def decTo4hex(self,decNum):
        '''将十进制正负整数转换为4位十六进制数,用于设定温箱温度值'''
        if decNum < 0:
            strHexNum = hex(decNum%65536) #负数
        else:
            strHexNum = hex(decNum) #正数
        '''
        因为需要转换成4位十六进制数,加上字符串前面两个符号'0x'之后,需要补足到6位,所以,不足6位需要在前面补'0'。
        负数转换成十六进制之后都为6位(算上'0x'),所以,负数不需要在前面补'f'。
        '''
        strLen = len(strHexNum)
        strHexNewNum = '0' * (6 - strLen) + strHexNum[2:] # 去掉原字符串的前面两个符号'0x',并补'0'
        return strHexNewNum

    def numHexToDec(self,str_HEX):
        '''将从温箱读出的4位十六进制读数转换成十进制数'''
        if str_HEX[0] == 'f':
            decNum = (int(str_HEX,16)-65536)/100 # 负数
        else:
            decNum = int(str_HEX,16)/100 # 正数
        return decNum

    def tempSet(self,tempSet_DEC):
        '''设定温箱温度,温度范围-40°~150°,低于-40°无效'''
        tempSet_HEX = self.decTo4hex(tempSet_DEC * 100) # 乘100是该型号温箱的指令要求
        data_input = "00 00 00 00 00 06 01 06 00 02 " + tempSet_HEX  # 设定温箱温度的固定指令格式
        self.client.send(bytes.fromhex(data_input))
        self.client.recv(1024)

    def tempGet(self):
        # 发送读当前温度值的指令
        data_input = "00 00 00 00 00 06 01 03 00 00 00 01"
        self.client.send(bytes.fromhex(data_input))
        data_output = self.client.recv(1024)
        # 将温箱读取到的多字节十六进制取出代表温度读书的最后两个字节
        str_Temp_HEX = bytes.hex(data_output)[-4:]
        # 将十六进制正负数转换成十进制数
        tempRead = self.numHexToDec(str_Temp_HEX)
        print("温箱当前温度为:", tempRead, "摄氏度")
        return tempRead

    def startRun(self):
        data_input = "00 00 00 00 00 06 01 05 00 00 ff 00" # 启动
        self.client.send(bytes.fromhex(data_input))
        # 启动之后清空指令缓存空间,为温箱下一次接受指令做好准备
        self.client.recv(1024)

    def stopRun(self):
        data_input = "00 00 00 00 00 06 01 05 00 01 ff 00"  # 停止
        self.client.send(bytes.fromhex(data_input))

    def close(self):
        self.client.close()

if __name__ == '__main__':
    # 建立和温箱的连接
    tempIP_Addr = "192.168.52.11"
    tempX = TempOver(tempIP_Addr)
    # 启动温箱运行
    tempX.startRun()
    while True:
        if input("是否结束运行?(y/n):") == 'y':
            break
        else:
            # 设定温箱温度 必须大于等于-40°,小于-40°则设置失效
            tempSet = int(input("请输入温箱温度℃:"))
            if tempSet < -40:
                tempSet = int(input("请重新输入温箱温度℃(必须大于-40):"))
            tempX.tempSet(tempSet)
        while True:
            if input('是否查询当前温度?(y/n):') == 'y':
                # 查询温箱温度
                tempX.tempGet()
            else:
                break
    # 停止温箱运行
    tempX.stopRun()
    # 关闭温箱连接
    tempX.close()

串口调试软件SSCOM也可进行控制,选择端口号为“TCPClient”。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值