迪文科技论坛

 找回密码
 立即注册
搜索
查看: 320|回复: 5

【提问】当modbus 命令为0x0F(写多个线圈)时,能不能自动执

[复制链接]

8

主题

11

回帖

67

积分

注册会员

Rank: 2

积分
67
发表于 2022-3-24 12:00:56 | 显示全部楼层 |阅读模式
ModbusC_V1.1 的说明书:///    命令执行模式=4: 在modbus命令为0x05,0x06,0x10写命令时,
///                              当D6D7指定的变量发生变化时自动执行
当modbus 命令为0x0F(写多个线圈)时,是不是也能自动执行?



回复

使用道具 举报

0

主题

655

回帖

7528

积分

论坛元老

Rank: 8Rank: 8

积分
7528
发表于 2022-3-24 13:23:54 | 显示全部楼层
0x0F指令不能自动执行
沧海横流,方显英雄本色。
回复

使用道具 举报

0

主题

140

回帖

1181

积分

金牌会员

Rank: 6Rank: 6

积分
1181
发表于 2022-3-24 13:24:51 | 显示全部楼层
不会,只会在0X05,0X06,0X10时会执行,其他指令时不会执行。
回复

使用道具 举报

1

主题

20

回帖

1097

积分

金牌会员

Rank: 6Rank: 6

积分
1097
发表于 2022-3-24 14:39:29 | 显示全部楼层
if(BT[S_H*12+2]==15)                         //01 0f xx xx xx xx len xx xx crch crcl
                        {       u8 i=0;u8 e=0;u16 n=0;u16 Temp=0;u16 Temp1=0;
             Temp=(BT[S_H*12+8]<<8)+BT[S_H*12+9];                               
                                W_u4[0]= BT[S_H*12+1];  //ID                        
                                           W_u4[1]=        BT[S_H*12+2];  //CMD
                               W_u4[2]=        BT[S_H*12+10]; //ADDERH         
                                           W_u4[3]=        BT[S_H*12+11]; //ADDERL
                               W_u4[4]=        0;             //LenH
                                           W_u4[5]=        BT[S_H*12+3];  //LenL
                               if(BT[S_H*12+3]%8==0)
                                                W_u4[6]=(BT[S_H*12+3]/8);
                                                        else         W_u4[6]=(BT[S_H*12+3]/8+1);
                                                 if(W_u4[6]%2==0)
                                                 {  n=(W_u4[6]/2);
                                                         for(i=0;i<n;i++)
                                                   {   Temp1=Read_Dgus(Temp+i);   
                                                    W_u4[2*i+7]= (u8)(Temp1>>8);
                                                           W_u4[2*i+8]= (u8)(Temp1);
                                                             }
                                                      }
                                                 else { n=(W_u4[6]/2+1);
                                                              for(i=0;i<n;i++)
                                                          {  Temp1=Read_Dgus(Temp+i);
                       W_u4[2*i+7]= (u8)(Temp1>>8);
                                                                                    }
                                                                                        for(e=1;e<n;e++)
                                                                 { Temp1=Read_Dgus(Temp+e-1);
                                                                                           W_u4[2*(e-1)+8]=(u8)(Temp1);}       
                                                      }
                                                 CrcH=0XFF;CrcL=0XFF;
                                                 for(i=0;i<(W_u4[6]+7);i++)CRC_16(W_u4[i]);               
                              }
回复

使用道具 举报

8

主题

11

回帖

67

积分

注册会员

Rank: 2

积分
67
 楼主| 发表于 2022-3-24 15:58:37 | 显示全部楼层
0x0F(写多个线圈)不能自动执行,写线圈只能单个执行,效率有点低哦
回复

使用道具 举报

8

主题

11

回帖

67

积分

注册会员

Rank: 2

积分
67
 楼主| 发表于 2022-3-25 09:23:14 | 显示全部楼层
gongmin1982 发表于 2022-3-24 14:39
if(BT[S_H*12+2]==15)                         //01 0f xx xx xx xx len xx xx crch crcl
                        {       u8 i ...

加这段代码能实现0x0F自动执行吗? 你们没有提供源代码,我也改不了啊
回复

使用道具 举报

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

本版积分规则

QQ|Archiver|手机版|小黑屋|迪文科技论坛 ( 京ICP备05033781号-1 )

GMT+8, 2024-11-22 07:48 , Processed in 0.069846 second(s), 21 queries .

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表