如何使用modbus crc16校验位写出系统中断

[复制链接]
 楼主| 浪子寻仙 发表于 2023-3-30 09:04 | 显示全部楼层 |阅读模式
如题,需要用到这个校验位,不会写USART485的中断,初始化已经完成。

评论

xch
孩子,多大了?  发表于 2023-3-30 16:57
fxyc87 发表于 2023-3-30 09:06 | 显示全部楼层
你的语文水平不行啊,标题我看不懂。
 楼主| 浪子寻仙 发表于 2023-3-30 09:11 | 显示全部楼层
fxyc87 发表于 2023-3-30 09:06
你的语文水平不行啊,标题我看不懂。

就是先写校验位,再写一个中断,输入需要校验位,输出看标志位数值形成固定参数
 楼主| 浪子寻仙 发表于 2023-3-30 09:46 | 显示全部楼层
有人吗??
coody 发表于 2023-3-30 10:38 | 显示全部楼层
楼主表达有问题,看不懂。
CRC16是一种校验方法,就是一种纯软件的计算方法,结果是2个字节数据。
 楼主| 浪子寻仙 发表于 2023-3-30 13:51 | 显示全部楼层
coody 发表于 2023-3-30 10:38
楼主表达有问题,看不懂。
CRC16是一种校验方法,就是一种纯软件的计算方法,结果是2个字节数据。 ...

系统中断需要第三位十六进制字符位03的时候,停止
icecut 发表于 2023-3-30 16:55 | 显示全部楼层
全都看不懂
王栋春 发表于 2023-3-30 22:06 | 显示全部楼层
表示看不懂楼主的意思,希望再归纳一下。
fxyc87 发表于 2023-3-31 08:44 | 显示全部楼层
浪子寻仙 发表于 2023-3-30 13:51
系统中断需要第三位十六进制字符位03的时候,停止

大概明白了,第1字节站号,第2字节功能码,第3,4字节是寄存器地址,当寄存器地址=3时触发某个功能,是吧?
我自己写的modbus就有这个功能,比如上位机触发打开某功能,关闭某功能,或者触发某个IO输出,
这是我的代码,当在modbus数据接收完成时,调用

ModbusHookCheck(addr,*(RecPtr+4));

  1. struct modubs_hook_list hook_list[]={        //MODBUS位写入HOOK清单
  2.         {ModbusHookWriteY,((uint16_t *)&App.Data.Y[0]-&App.u16[0])*16,RegYlen*16},
  3.         {ModbusHookLockX,((uint16_t *)&App.Data.X[0]-&App.u16[0])*16,RegXlen*16},
  4.         //=9锁定标志 位0=锁定输入点 位1锁定工位1 位2锁定工位2 位3辅助逻辑锁定
  5.         {ModbusHookManual,((uint16_t *)&App.Data.M[9]-&App.u16[0])*16,16},
  6. };



  7. void ModbusHookCheck(uint16_t addr,int value){
  8.         for(int i=0;i<3;i++){
  9.                 if(addr>=hook_list[i].start_addr && addr<(hook_list[i].start_addr+hook_list[i].addr_len)){
  10.                         //相对地址
  11.                         hook_list[i].func(addr-hook_list[i].start_addr,value);
  12.                 }
  13.         }
  14. }

  1. void ModbusHookWriteY(int addr,int value){
  2.         SEGGER_RTT_printf(0,"GPIO Manual Y%d=%d\r\n",addr,value>0);
  3.         WriteY(addr,value);
  4. }
  5. .................
ayb_ice 发表于 2023-3-31 08:45 | 显示全部楼层
这都哪跟哪
cmyldd 发表于 2023-3-31 09:09 | 显示全部楼层
听不懂说什么, 不好理解
coody 发表于 2023-3-31 10:32 | 显示全部楼层
浪子寻仙 发表于 2023-3-30 13:51
系统中断需要第三位十六进制字符位03的时候,停止

同样看不懂这句。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

6

主题

30

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部