当前位置:   article > 正文

伟创变频器AC310上位机QT开发记录1_ac310变频器说明书

ac310变频器说明书

创作原因

        公司近期需要开发一款测试系统,其中有一个设备就是变频器AC310,因为CSDN相关资料少,于是记录一下。 之前看到一篇文章,伟创变频器AC310与上位机通信调试记录-CSDN博客,但是这个文章写的并不详细,于是自己额外写一篇。

说明书下载

变频器AC310详细版说明书(V1.1)20190729.pdf官方版下载丨最新版下载丨绿色版下载丨APP下载-123云盘

说明书页可以问官方的去要,也可以去京东客服要。

细节说明

1. 通信相关:

        变频器使用的是modbus通讯格式,有主从机的区别,一般主机是PLC或者是其他串口设备,比如我们公司使用的是串口集线器,如果是PLC的话,就不需要这么麻烦,因为做了一些封装。

        变频器控制的是电机,如果要控制的话,最基本的就是设置频率、启动、减速停机等关键几个。以下是通信格式,在说明书53页:

2. 开发的基本知识

        最开始我打电话问,结果说要搞明白什么modbus协议,后面简单了解了一下,就开始着手了,大概意思就是写入和读取相关寄存器地址的数据,就这么简单。首先是modbus报文,一般是8个字节,如下列排布的8个字节,举例说明:

"01 03 30 01 00 01 DA CA”
1【从机-01】   从机一般都是0x01
2【命令代码-03读 06写】
3【起始地址高】
4【起始地址低】
5【数据高】
6【数据低】
7【校验1】
8【校验2】

        刚刚的举例里面,01是从机。03是读的意思。3001是读取的地址,这个可以在说明书59页查到,也可以搜索3001看到,我顺便贴个图在下面。0001是说明书的指令。最后的是校验位,需要自己写代码计算。

3. RTU校验的在线工具

16进制(CRC16)(MODBUS RTU通讯)校验码在线计算器 (23bei.com)

4. 相关参考代码:

比如命令代码:其实利用在线校验工具,后面的可以自己计算出来的。

  1. // 变频器:******************************************************************************************
  2. // 【从机-01】【命令代码-03读 06写】【起始地址高】【起始地址低】【数据高】【数据低】【校验1】【校验2】
  3. QString order_transduce_read = QString("01 03 01 0D 00 02 54 34"); // 参数读取
  4. QString order_transduce_InitSpeed= QString("01 06 30 00 13 88 8b 9C"); // 设置默认频率 50hz --- 5000 --- 0x1388
  5. QString order_transduce_setSpeed = QString("01 06 30 00"); // 设置频率 ++
  6. QString order_transduce_forward = QString("01 06 30 01 00 01 16 CA"); // 电机正转
  7. QString order_transduce_reversal = QString("01 06 30 01 00 02 56 CB"); // 电机反转
  8. QString order_transduce_slowStop = QString("01 06 30 01 00 05 17 09"); // 减速停机
  9. QString order_transduce_freeStop = QString("01 06 30 01 00 06 57 08"); // 自由停机
  10. QString order_transduce_reset = QString("01 06 30 01 00 07 96 C8"); // 复位停机
  11. QString order_transduce_initSpeedUpTime = QString("01 06 30 0E 03 E8 E7 B7"); // 默认加速时间:10s
  12. QString order_transduce_setSpeedUpTime = QString("01 06 30 0E"); // 设置加速时间:时间*100
  13. QString order_transduce_initSpeedDownTime = QString("01 06 30 0F 03 E8 B6 77"); // 默认加速时间:10s
  14. QString order_transduce_setSpeedDownTime = QString("01 06 30 0F"); // 设置加速时间:时间*100

比如一些可以用的通用函数:

  1. // 公共函数:
  2. QByteArray qstring_to_hex(QString msg); // 类似"FE 02 00 00 00 06 EC 07"转为 byteArray
  3. QString hex_to_str(QByteArray in); // byteArray转为类似"FE 02 00 00 00 06 EC 07"
  4. QString calculateModbusRTUChecksum(QString); // 计算最后2为的RTU校验转为 类似“0A 0F”
  5. QString convertIntToHexString(int value); // 0-65535 的数字,转为2位的十六进制 比如100 -> 00 64
  6. QByteArray qstring_to_hex(QString msg)
  7. {
  8. QString hexString = "FE 02 00 00 00 06 EC 07";
  9. // 转换为十六进制格式的字节数组
  10. QStringList hexValues = msg.split(" ");
  11. QByteArray hexData;
  12. foreach (QString hexValue, hexValues) {
  13. hexData.append(static_cast<char>(hexValue.toInt(nullptr, 16)));
  14. }
  15. return hexData;
  16. }
  17. QString hex_to_str(QByteArray in)
  18. {
  19. QString s;
  20. for(int i=0;i<in.length();i++)
  21. {
  22. s+=QString("%1").arg(in[i]&0xFF,2,16,QLatin1Char('0')).toUpper();
  23. s.append(" ");
  24. }
  25. return s;
  26. }
  27. QString calculateModbusRTUChecksum(QString data)
  28. {
  29. QByteArray byteArray = QByteArray::fromHex(data.toLatin1()); // 将输入的16进制字符串转换为字节数组
  30. quint16 crc = 0xFFFF; // 初始CRC值为0xFFFF
  31. for (int i = 0; i < byteArray.size(); ++i)
  32. {
  33. crc ^= static_cast<quint16>(byteArray.at(i)); // 异或操作
  34. for (int j = 0; j < 8; ++j)
  35. {
  36. if (crc & 0x0001) // 最低位为1
  37. {
  38. crc >>= 1;
  39. crc ^= 0xA001; // 异或操作
  40. }
  41. else
  42. {
  43. crc >>= 1;
  44. }
  45. }
  46. }
  47. QByteArray checksumBytes;
  48. checksumBytes.append(static_cast<char>(crc & 0xFF)); // 低位字节
  49. checksumBytes.append(static_cast<char>((crc >> 8) & 0xFF)); // 高位字节
  50. return QString(checksumBytes.toHex(' ').toUpper()); // 转换为16进制的QString,字节之间用空格分隔,大写字母
  51. }
  52. QString convertIntToHexString(int value)
  53. {
  54. QString hexString = QString("%1").arg(value, 4, 16, QLatin1Char('0')).toUpper();
  55. hexString.insert(2, ' '); // 在第二个字符后插入一个空格
  56. return hexString;
  57. // "00 64" 100
  58. }

5. 其他细节

  1. 先发送设置频率的指令,再发送启动指令。并且频率、加速时间和上升时间需要先乘100,再转为十六进制,比如可以使用我写的公共函数 converIntToHexString即可。
  2. 频率和电机转速的换算关系:N=60f/p, N是转速,f是频率,p是极对数。但其实也不需要这么计算,比如我们已经知道变频器控制的是三相异步电动机,那么极对数就是3,查看电机铭牌,发送额定转速是980r/min,额定频率是50hz,那么直接这么计算即可:

        设置频率 = 50 * 转速 / 980 即可。其实看似很懵是吧,但是根据计算,发现其实极对数算出来大概就是3,所以其实是对的。因为变频器输出的是频率,最终的转速,要根据控制的电机来。

最后,因为这个只是项目中很小的一部分,就不放源码了哈。

补充

 从机地址提示:

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小蓝xlanll/article/detail/506301
推荐阅读
相关标签
  

闽ICP备14008679号