电子负载仪的远端控制

前言

最近研究了电子负载仪的远端控制(区别于前面板控制),主要是用于程序控制,避免繁琐复杂的人工控制,举了南京嘉拓和艾维泰科的例子。

有纰漏请指出,转载请说明。

学习交流请发邮件 1280253714@qq.com

南京嘉拓

Microsoft Word - JT611x系勊çflµå (jartul.com)

RS232接口,TX对TX,RX对RX

输入开启或关闭(无回复)

INP 0

49 4E 50 20 30 0A

 输入查询

INP?

49 4E 50 3F 0A

回复

30 0D 0A

31 0D 0A

 返回0/1参数

该函数解析ASCII码数组,并找到0D 0A(即回车和换行符)之前的字符。如果该字符是30(即数字0的ASCII码),则返回0;如果是31(即数字1的ASCII码),则返回1;否则返回-1表示错误。 

s8 HexAsciiToFlag(u8 *hex_ascii_codes)
{
	if (hex_ascii_codes[1] == 0x0D && hex_ascii_codes[2] == 0x0A) {  
		// 检查0D 0A前面的字符是否是30或31  
		if (hex_ascii_codes[0] == '0') {  
			return 0;  
		} else if (hex_ascii_codes[0] == '1') {  
			return 1;  
		} else {  
			// 如果不是30或31,返回-1表示错误  
			return -1;  
		}  
	}   
      
    // 如果没有找到0D 0A,返回-1表示错误  
    return -1;  
}

读取电压

20 20 31 39 2E 31 39 0D 0A

  19.19

读取带电压信息的ASCII并返回浮点电压

在C语言中,要将ASCII码序列转换成浮点数据,可以通过以下步骤实现:

  1. 将每个ASCII码转换成对应的字符。
  2. 拼接这些字符形成一个字符串。
  3. 使用标准库函数atof()sscanf()将字符串转换成浮点数。
float HexAsciiToFloat(u8 *hex_ascii_codes)
{
	float voltage = 0;
      
    // 将十六进制ASCII码转换成字符,并构建字符串(不包括回车和换行符)  
    char voltage_str[11] = 0; // +1 为了字符串结束符 '\0'  
    int i, j = 0;  
	u8 len = 0;

    for (i = 0; i < 10; ++i) {  
        if (hex_ascii_codes[i] != 0x0D && hex_ascii_codes[i] != 0x0A) {  
            voltage_str[j++] = (char)hex_ascii_codes[i];  
        }  
    }  
    voltage_str[j] = '\0'; // 添加字符串结束符  
      
    // 去除字符串前后的空格  
    while (voltage_str[0] == ' ') {  
        memmove(voltage_str, voltage_str + 1, strlen(voltage_str));  
    }  
    len = strlen(voltage_str);  
    while (len > 0 && voltage_str[len - 1] == ' ') {  
        voltage_str[len - 1] = '\0';  
        len--;  
    }  
      
    // 使用atof函数将字符串转换为浮点数  
    voltage = atof(voltage_str); 
	return voltage;
}

艾维泰科

TTL接口,RX对TX,TX对RX

IV8700系列直流电子负载说明书-东莞市艾维泰科仪器仪表有限公司 (ivytech.top)

控制命令举例

01 10 0A 01 00 02 04 3f 99 99 99 3A C2 设置电流1.2

01 03 0B 00 00 02 C6 2F 获取当前电压

01 05 05 00 FF 00 8c f6 远端控制,禁止前面板控制

01 05 05 00 00 00 cd 06 允许前面板控制

 MODBUS-CRC16

#include <stdio.h>  
#include <stdint.h>  
  
void CalculateCRC(uint8_t *pByte, int nNumberOfBytes, uint16_t *pCheckSum) {  
    int nBit;  
    *pCheckSum = 0xFFFF; // 初始化CRC为0xFFFF  
  
    for (int nByte = 0; nByte < nNumberOfBytes; nByte++) {  
        *pCheckSum ^= pByte[nByte]; // 与当前字节异或  
  
        for (nBit = 0; nBit < 8; nBit++) {  
            if ((*pCheckSum & 0x0001) == 1) { // 检查最低位  
                *pCheckSum = (*pCheckSum >> 1) ^ 0xA001; // 右移一位并与0xA001异或  
            } else {  
                *pCheckSum >>= 1; // 右移一位  
            }  
        }  
    }  
}

int main() {  
    uint8_t data[] = {0x01, 0x03, 0x0B, 0x00, 0x00, 0x02};  
    uint16_t checksum;  
    int length = sizeof(data);  
  
    CalculateCRC(data, length, &checksum);  
  
    printf("CRC-16: %04X\n", checksum); // 输出CRC校验码,格式化为4位十六进制数  
  
    return 0;  
}

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值