查看: 177|回复: 20

[求助问答] 求助:图形化模式485通信

[复制链接]
我想得到的结果
主机发送(全部是 16 进制):01 03 00 17 00 15 34 01


设备回复(全部是 16 进制):01 03 2A 10 0A 10 08 10 08 10 05 10 02 10 02 10
09 10 0A 10 00 10 13 10 01 10 02 0F FC 10 0F 10 06 10 0B 10 03 00 00 42 4A
42 3F 00 00 EA 8D


通过串口助手测试成功,如图一


WedNovember-202011182675..png
在图形化软件下编程,如图二
WedNovember-202011186661..png

输出结果不正确,如图三
WedNovember-202011184499..png

恳请专家、高手、大师、巨匠、圣者给与指导!!!

jF2YGR2H  学徒
 楼主|

发表于 2020-11-18 17:25:46

用数组才能成功吗?图形化有数组模块吗?
WedNovember-202011183894..png
回复

使用道具 举报

teu  高级技师

发表于 2020-11-18 20:16:52

你图形化的意思是用16 进制发送01 03 00 17 00 15 34 01
回复

使用道具 举报

teu  高级技师

发表于 2020-11-18 20:33:28

teu 发表于 2020-11-18 20:16
你图形化的意思是用16 进制发送01 03 00 17 00 15 34 01

应该改为:
WedNovember-202011186040..png
回复

使用道具 举报

jF2YGR2H  学徒
 楼主|

发表于 2020-11-19 08:10:02


老师,测试结果是不正确的,用串口接收到的数据,不正确 ThuNovember-202011196226..png
回复

使用道具 举报

Forgotten  版主

发表于 2020-11-19 11:52:21

这个积木一次只能发送一个字节的
回复

使用道具 举报

Forgotten  版主

发表于 2020-11-19 12:05:05



用原始输出+不换行,然后一字节一字节的输出,使用0x前缀就会自动识别为16进制
ThuNovember-202011196246..png
回复

使用道具 举报

Forgotten  版主

发表于 2020-11-19 14:32:44

你这是接了个什么485模块?
回复

使用道具 举报

teu  高级技师

发表于 2020-11-19 20:58:35

Forgotten 发表于 2020-11-19 12:05
用原始输出+不换行,然后一字节一字节的输出,使用0x前缀就会自动识别为16进制

...

哦,看来是我搞错了。果然mind+版主就是厉害
回复

使用道具 举报

jF2YGR2H  学徒
 楼主|

发表于 7 天前

FriNovember-202011203188..png

我在尝试做一个机器人头部,用了大量的DF模块(10轴+音频+MOS+LED+eeprom....)

主控用的拿铁熊猫+arduino

485通信主要包括(BMS+伺服电机)

FriNovember-202011201675..png
回复

使用道具 举报

jF2YGR2H  学徒
 楼主|

发表于 7 天前

本帖最后由 jF2YGR2H 于 2020-11-20 07:56 编辑
Forgotten 发表于 2020-11-19 14:32
你这是接了个什么485模块?

发送成功了,接收串口的指令出了问题,不能一次性完全显示出来,需要加很多询问
FriNovember-202011205803..png

然而,实际数据要这么多位....[2020-11-20 07:53:24.649]# RECV HEX>
01 03 00 14 00 0A 85 C9 01 03 14 00 F9 00 1D 00 1D 09 63 09 66 09 5F 08 33 09 5A 09 5C 00 00 CE 2C


然而我需要获取的数据,要达到12种,200多个串口发送+200多个串口打印,才能完成这些操作
我贴一个用于获取电压的循环

const u16 CRCtbl[256] = {
0x0000, 0xC0C1, 0xC181, 0x0140, 0xC301, 0x03C0, 0x0280, 0xC241,
0xC601, 0x06C0, 0x0780, 0xC741, 0x0500, 0xC5C1, 0xC481, 0x0440,
0xCC01, 0x0CC0, 0x0D80, 0xCD41, 0x0F00, 0xCFC1, 0xCE81, 0x0E40,
0x0A00, 0xCAC1, 0xCB81, 0x0B40, 0xC901, 0x09C0, 0x0880, 0xC841,
0xD801, 0x18C0, 0x1980, 0xD941, 0x1B00, 0xDBC1, 0xDA81, 0x1A40,
0x1E00, 0xDEC1, 0xDF81, 0x1F40, 0xDD01, 0x1DC0, 0x1C80, 0xDC41,
0x1400, 0xD4C1, 0xD581, 0x1540, 0xD701, 0x17C0, 0x1680, 0xD641,
0xD201, 0x12C0, 0x1380, 0xD341, 0x1100, 0xD1C1, 0xD081, 0x1040,
0xF001, 0x30C0, 0x3180, 0xF141, 0x3300, 0xF3C1, 0xF281, 0x3240,
0x3600, 0xF6C1, 0xF781, 0x3740, 0xF501, 0x35C0, 0x3480, 0xF441,
0x3C00, 0xFCC1, 0xFD81, 0x3D40, 0xFF01, 0x3FC0, 0x3E80, 0xFE41,
0xFA01, 0x3AC0, 0x3B80, 0xFB41, 0x3900, 0xF9C1, 0xF881, 0x3840,
0x2800, 0xE8C1, 0xE981, 0x2940, 0xEB01, 0x2BC0, 0x2A80, 0xEA41,
0xEE01, 0x2EC0, 0x2F80, 0xEF41, 0x2D00, 0xEDC1, 0xEC81, 0x2C40,
0xE401, 0x24C0, 0x2580, 0xE541, 0x2700, 0xE7C1, 0xE681, 0x2640,
0x2200, 0xE2C1, 0xE381, 0x2340, 0xE101, 0x21C0, 0x2080, 0xE041,
0xA001, 0x60C0, 0x6180, 0xA141, 0x6300, 0xA3C1, 0xA281, 0x6240,
0x6600, 0xA6C1, 0xA781, 0x6740, 0xA501, 0x65C0, 0x6480, 0xA441,
0x6C00, 0xACC1, 0xAD81, 0x6D40, 0xAF01, 0x6FC0, 0x6E80, 0xAE41,
0xAA01, 0x6AC0, 0x6B80, 0xAB41, 0x6900, 0xA9C1, 0xA881, 0x6840,
0x7800, 0xB8C1, 0xB981, 0x7940, 0xBB01, 0x7BC0, 0x7A80, 0xBA41,
0xBE01, 0x7EC0, 0x7F80, 0xBF41, 0x7D00, 0xBDC1, 0xBC81, 0x7C40,
0xB401, 0x74C0, 0x7580, 0xB541, 0x7700, 0xB7C1, 0xB681, 0x7640,
0x7200, 0xB2C1, 0xB381, 0x7340, 0xB101, 0x71C0, 0x7080, 0xB041,
0x5000, 0x90C1, 0x9181, 0x5140, 0x9301, 0x53C0, 0x5280, 0x9241,
0x9601, 0x56C0, 0x5780, 0x9741, 0x5500, 0x95C1, 0x9481, 0x5440,
0x9C01, 0x5CC0, 0x5D80, 0x9D41, 0x5F00, 0x9FC1, 0x9E81, 0x5E40,
0x5A00, 0x9AC1, 0x9B81, 0x5B40, 0x9901, 0x59C0, 0x5880, 0x9841,
0x8801, 0x48C0, 0x4980, 0x8941, 0x4B00, 0x8BC1, 0x8A81, 0x4A40,
0x4E00, 0x8EC1, 0x8F81, 0x4F40, 0x8D01, 0x4DC0, 0x4C80, 0x8C41,
0x4400, 0x84C1, 0x8581, 0x4540, 0x8701, 0x47C0, 0x4680, 0x8641,
0x8201, 0x42C0, 0x4380, 0x8341, 0x4100, 0x81C1, 0x8081, 0x4040
};
static u16 MODBUS_CalCRC(const u8 buff[], const u8 len)
{
   u8 i;
   u16 crcval = 0xffff;
   u16 temp = 0;
   for(i=0;i<len;i++)
   {
     temp = (crcval>>8)^CRCtbl[(crcval&0xFF)^buff];
     crcval = temp;
   }
   return crcval;
}
int get_SysVol(){
  unsigned char sendBuff[8]={0x01,0x03,0x00,0x0C,0x00,0x02,0x04,0x08};
  unsigned char receiveBuff[7]={0};
  unsigned char checkBuff[2]={0};
  for(int i=0;i<8;i++){
    Serial1.write(sendBuff);
    //delayMicroseconds(2);
  }
  while(Serial1.available()<0){
    delayMicroseconds(2);
  }
  int count=0;
  while(Serial1.available()>0){
    receiveBuff[count]=Serial1.read();
    if(count==6){
      checkBuff[0]=Serial1.read();
      checkBuff[1]=Serial1.read();
      break;
    }
    count++;
  }
  int checkCRC = MODBUS_CalCRC(receiveBuff,7);
  int receivedCheck = int(checkBuff[0])+(int(checkBuff[1]))*256;
  if(checkCRC==receivedCheck){
    return (int(receiveBuff[3])*256+int(receiveBuff[4]))+(int(receiveBuff[5])*256+int(receiveBuff[6]))*256;
  }
  else{
    return -1;
  }
}
//unsigned char buffCheck[23] = { 0x01 ,0x03 ,0x14, 0x00 ,0x7D ,0x07 ,0xD0 ,0x07 ,0xD0 ,0x0C ,0xDA ,0x0C ,0xE0 ,0x0C ,0xDF ,0x0C ,0xDF ,0x0C ,0xDC ,0x0C ,0xDE ,0x0C ,0xDD};
unsigned char buffCheck[6] = {0x01,0x03,0x00,0x0C,0x00,0x02};
void setup() {
  // put your setup code here, to run once:
  Serial.begin(9600);
  Serial1.begin(9600);
  int get1=MODBUS_CalCRC(buffCheck,6);
  Serial.println(get1,HEX);
}

void loop() {
  // put your main code here, to run repeatedly:
  int sysVolt = get_SysVol();  //获取系统电压
  Serial.print("sysVolt: ");
  Serial.println(sysVolt);
  delay(5000);
}






回复

使用道具 举报

Forgotten  版主

发表于 6 天前

回帖奖励 +1 创造力

jF2YGR2H 发表于 2020-11-20 07:51
发送成功了,接收串口的指令出了问题,不能一次性完全显示出来,需要加很多询问

这种情况上代码生成器试试,图形化+代码混编看看会不会好点

SatNovember-202011217714..png
SatNovember-202011214227..png
回复

使用道具 举报

jF2YGR2H  学徒
 楼主|

发表于 5 天前

Forgotten 发表于 2020-11-21 22:51
这种情况上代码生成器试试,图形化+代码混编看看会不会好点

老大思路清晰,技术专业,我尝试后向您汇报,十分感谢您的指导
回复

使用道具 举报

jF2YGR2H  学徒
 楼主|

发表于 4 天前

Forgotten 发表于 2020-11-19 14:32
你这是接了个什么485模块?

如果您有时间,在指导一二,我遇到的问题是,头文件加进去了,编译失败,但是在ARDUINO IDE中,是顺利的,实在弄不明白为什么了

MonNovember-202011231647..png

C:\Program Files (x86)\Mind+\Arduino\arduino-builder -preprocess -logger=machine -hardware C:\Program Files (x86)\Mind+\Arduino\hardware -tools C:\Program Files (x86)\Mind+\Arduino\tools-builder -tools C:\Program Files (x86)\Mind+\Arduino\hardware\tools\avr -built-in-libraries C:\Program Files (x86)\Mind+\Arduino\libraries -fqbn=arduino:avr:leonardo -vid-pid=0X2341_0X0043 -ide-version=10804 -build-path C:\Users\观察者\AppData\Local\DFScratch\build -warnings=none -build-cache C:\Users\观察者\AppData\Local\DFScratch\cache -prefs=build.warn_data_percentage=75 -prefs=runtime.tools.avr-gcc.path=C:\Program Files (x86)\Mind+\Arduino\hardware\tools\avr -prefs=runtime.tools.arduinoOTA.path=C:\Program Files (x86)\Mind+\Arduino\hardware\tools\avr -prefs=runtime.tools.avrdude.path=C:\Program Files (x86)\Mind+\Arduino\hardware\tools\avr -verbose C:\Users\观察者\AppData\Local\DFScratch\dfrobot\dfrobot.ino
C:\Users\观察者\AppData\Local\DFScratch\dfrobot\dfrobot.ino:1:10: fatal error: read_YYBMS: No such file or directory
compilation terminated.
exit status 1


MonNovember-202011237941..png
回复

使用道具 举报

Forgotten  版主

发表于 4 天前

jF2YGR2H 发表于 2020-11-23 07:44
如果您有时间,在指导一二,我遇到的问题是,头文件加进去了,编译失败,但是在ARDUINO IDE中,是顺利的 ...

外部的扩展模块要通过用户库导入,不能直接引用
https://mindplus.dfrobot.com.cn/ext-arduino
回复

使用道具 举报

jF2YGR2H  学徒
 楼主|

发表于 4 天前

Forgotten 发表于 2020-11-23 16:17
外部的扩展模块要通过用户库导入,不能直接引用
https://mindplus.dfrobot.com.cn/ext-arduino ...

经过测试,一脸蒙圈,积木模式不行,不报错,但是也不显示 MonNovember-202011238378..png

编译模式可以用,一切正常

MonNovember-202011231024..png

水平有限,哈哈,不报错,根本不知道哪错了
回复

使用道具 举报

jF2YGR2H  学徒
 楼主|

发表于 4 天前

MonNovember-202011237902..png MonNovember-202011232983..png
回复

使用道具 举报

jF2YGR2H  学徒
 楼主|

发表于 3 天前

Forgotten 发表于 2020-11-19 12:05
用原始输出+不换行,然后一字节一字节的输出,使用0x前缀就会自动识别为16进制

...

感谢指导,搞定了,我把我改的文件发上来,谁有用可以参考一下 TueNovember-202011249990..png

DFRobot-SHT20.zip (602.1 KB, 下载次数: 0)
回复

使用道具 举报

天外鸿鹄  见习技师

发表于 前天 10:04


这外壳,是工厂电镀的?
回复

使用道具 举报

jF2YGR2H  学徒
 楼主|

发表于 前天 12:36

天外鸿鹄 发表于 2020-11-25 10:04
这外壳,是工厂电镀的?

使用了7050航空铝合金为主材,红颜色的采用氧化工艺,光亮的是镜面抛光,下一步也是要氧化的
回复

使用道具 举报

天外鸿鹄  见习技师

发表于 前天 13:25

jF2YGR2H 发表于 2020-11-25 12:36
使用了7050航空铝合金为主材,红颜色的采用氧化工艺,光亮的是镜面抛光,下一步也是要氧化的 ...

氧化工艺,镜面抛光,都可以自己做?还是需要到厂里加工?
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

为本项目制作心愿单
购买心愿单
心愿单 编辑
[[wsData.name]]

硬件清单

  • [[d.name]]
btnicon
我也要做!
点击进入购买页面
关于楼主

楼主的其它帖子

上海智位机器人股份有限公司 沪ICP备09038501号-4

© 2013-2020 Comsenz Inc. Powered by Discuz! X3.4 Licensed

mail