伺服驱动器485控制(13):串口屏实现伺服驱动器的485控制

本案例采用 三易串口屏带485功能,一包香烟的钱即可低成本控制单轴或多轴的485通讯位置控制

这里以单轴控制为例,涉及到的知识要点:

①、伺服驱动器的参数读写

②、读出编码器位置的数据变换,以及与实际机械位置对应

③、输入一个数据进行拆分为圈数和圈内脉冲数,并传入伺服驱动器里

串口屏设置两个画面,可实现功能,电机在安装在机械上后,可以先点动到任意位置,然后点归零就可以设置机械坐标。然后可以手动去寻位置(就好比对刀),点击 SET 那么就设置了位置1,并且可以在参数输入里,进行输入(好比设置刀补),然后可以设置位置2(就好比退刀点)设置好速度,可以IO启动位置,也可以在触摸屏上位置启动,运行过程中可以位置暂停,再次位置启动会继续之前的位置走完,断电上电无需归零,直接定位。也可以按原来的位置直接定位,位置精准。就这么简单的一个单轴控制的串口屏,仅仅使用485控制,可实现这些功能。

 

首先来看看各种读指令,在定时器里。

---------------------------------------------------------------------------------------------------------------------------

byte a[4];
int b;
int e;
int f;
int g;
int h;
int i;
int j;
modbusRead(0x01,0x03,0x1007,1,20);
num19.val=bytesToShort(modbus.rxBuf,1,1);
modbusRead(0x01,0x03,0x1000,1,20);
num20.val=bytesToShort(modbus.rxBuf,1,1);
modbusRead(0x01,0x03,0x1018,2,20);
a[1]=modbus.rxBuf[3];
a[2]=modbus.rxBuf[4];
a[3]=modbus.rxBuf[1];
a[4]=modbus.rxBuf[2];
numf21.valf=bytesToInt(a,1,1)/1000.000;
modbusRead(0x01,0x03,0x0015,1,20);
num22.val= bytesToShort(modbus.rxBuf,1,1);
modbusRead(0x01,0x03,0x0202,1,20);
e= bytesToShort(modbus.rxBuf,1,1);
modbusRead(0x01,0x03,0x0203,1,20);
f= bytesToShort(modbus.rxBuf,1,1);
modbusRead(0x01,0x03,0x000b,1,20);
g= bytesToShort(modbus.rxBuf,1,1);
numf23.valf=((g*e)+f)/1000.000;
modbusRead(0x01,0x03,0x0205,1,20);
h= bytesToShort(modbus.rxBuf,1,1);
modbusRead(0x01,0x03,0x0206,1,20);
i= bytesToShort(modbus.rxBuf,1,1);
numf24.valf=((g*h)+i)/1000.000;
modbusRead(0x01,0x03,0x0204,1,20);
num25.val=bytesToShort(modbus.rxBuf,1,1);
modbusRead(0x01,0x03,0x0207,1,20);
num26.val=bytesToShort(modbus.rxBuf,1,1);
var34.val=g;

---------------------------------------------------------------------------------------------------------------------------------

指令解析:

1、读扭矩,01站号  03读指令  0x1007 监控转矩地址  1 读一个字  20  时间20ms

modbusRead(0x01,0x03,0x1007,1,20);
num19.val=bytesToShort(modbus.rxBuf,1,1);  

2、读位置  01站号  03读指令 0x1018 编码器位置地址 2 读两个字  20 时间20ms

modbusRead(0x01,0x03,0x1018,2,20);     0x1018连续读2个字
a[1]=modbus.rxBuf[3];
a[2]=modbus.rxBuf[4];
a[3]=modbus.rxBuf[1];
a[4]=modbus.rxBuf[2];                                 使用数组进行字节序变换,3412→1234序           
numf21.valf=bytesToInt(a,1,1)/1000.000;    定义了一个脉冲当量0.001,所以除以1000.000

3、读圈数/圈内脉冲数/一圈脉冲数/并计算 显示位置1数据和位置2数据

modbusRead(0x01,0x03,0x0202,1,20);
e= bytesToShort(modbus.rxBuf,1,1);          读出来第一段位置圈数
modbusRead(0x01,0x03,0x0203,1,20);     
f= bytesToShort(modbus.rxBuf,1,1);           读出来第一段圈内脉冲数
modbusRead(0x01,0x03,0x000b,1,20);
g= bytesToShort(modbus.rxBuf,1,1);          读出来一圈脉冲数
numf23.valf=((g*e)+f)/1000.000;                 显示位置1数据

modbusRead(0x01,0x03,0x0205,1,20);
h= bytesToShort(modbus.rxBuf,1,1);
modbusRead(0x01,0x03,0x0206,1,20);
i= bytesToShort(modbus.rxBuf,1,1);
numf24.valf=((g*h)+i)/1000.000;                同理该段显示位置2数据

4、显示位置1和位置2 设置的速度

modbusRead(0x01,0x03,0x0204,1,20);
num25.val=bytesToShort(modbus.rxBuf,1,1);
modbusRead(0x01,0x03,0x0207,1,20);
num26.val=bytesToShort(modbus.rxBuf,1,1);

5、定义全局变量一圈脉冲数为了方便在第二页触摸屏调用

var34.val=g;

6、设置启动位置,由于位置启动是沿信号,这里设置按下时写相应数据,弹起置零。

 

我们看指令,0x0037其实就是PA-55的寄存器地址,驱动器里P3-1(DI2)设置了28 

PA-55的位参数 从右往左数分别是DI1 DI2 DI3 DI4.....写2就相当于bit1写1,也就是启动了DI2位置触发信号

P3-2设置了27 位置暂停  PA-55写4相当于bit2写1    启动了DI3暂停

7、归零,也就是编码器清零,设置机械原点 0x0122写1 也就是按1抬0

8、点动以及设置位置1和位置2

正点动JOGN   负点动 JOGP 使用强制IO来实现  寄存器地址0x0111 具体看上节强制IO

位置1选择 位置2选择  寄存器地址0x01112写对应的位来选择位置

9、位置1和位置2是重点,该界面其他设置比较简单不做讲解。

点击位置1后面的 set 按钮  按下事件程序如下:

int wz1;
int aa;
int bb;
wz1=floatToInt(numf2.valf*1000);
aa=wz1/page0.var34.val;
bb=wz1%page0.var34.val;
modbusWrite(0x01,0x06,0x0202,aa,20);
modbusWrite(0x01,0x06,0x0203,bb,20);

全局变量var34把page0的一圈脉冲数 调用过来

输入的数据wz1对page0.var34.val进行除整,得到数据写入圈数里

输入的数据wz1对page0.var34.val进行除余,得到数据写入圈内脉冲数里

本伺服驱动器设置位置只有圈数和圈内脉冲数概念,所以输入一个整体数据,进行除整除余,然后传输到驱动器里。

int wz2;
int cc;
int dd;
wz2=floatToInt(numf3.valf*1000);
cc=wz2/page0.var34.val;
dd=wz2%page0.var34.val;
modbusWrite(0x01,0x06,0x0205,cc,20);
modbusWrite(0x01,0x06,0x0206,dd,20);

总结:本例串口屏485通讯程序比较简单,主要讲解了485通讯内部位置的思路,便于加深理解。

### 如何在 IntelliJ IDEA 中配置和使用 Swagger #### 添加 Maven 依赖 为了使 Swagger 能够工作,在 `pom.xml` 文件中需加入特定的依赖项。这可以通过编辑项目的构建文件来完成: ```xml <dependencies> <!-- swagger2 --> <dependency> <groupId>io.springfox</groupId> <artifactId>springfox-swagger2</artifactId> <version>2.8.0</version> </dependency> <!-- swagger ui --> <dependency> <groupId>io.springfox</groupId> <artifactId>springfox-swagger-ui</artifactId> <version>2.8.0</version> </dependency> </dependencies> ``` 这些依赖会引入必要的库用于生成 API 文档以及提供交互式的 UI 页面[^4]。 #### 创建 Swagger 配置类 接着创建一个新的 Java 类用来初始化并配置 Swagger 实例。通常命名为类似于 `SwaggerConfig.java` 的名称,并放置于合适的位置,比如 `config` 包内: ```java import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import springfox.documentation.builders.ApiInfoBuilder; import springfox.documentation.service.ApiInfo; import springfox.documentation.spi.DocumentationType; import springfox.documentation.spring.web.plugins.Docket; @Configuration public class SwaggerConfig { @Bean public Docket api() { return new Docket(DocumentationType.SWAGGER_2) .apiInfo(apiInfo()) .select() .build(); } private ApiInfo apiInfo(){ return new ApiInfoBuilder().title("API文档").description("").termsOfServiceUrl("") .contact(new Contact("", "", "")) .license("").licenseUrl("").version("1.0") .build(); } } ``` 这段代码定义了一个 Spring Bean 来设置 Swagger 的基本信息和其他选项。 #### 启动应用测试 当上述步骤完成后,启动应用程序即可访问默认路径 `/swagger-ui.html` 查看自动生成的 RESTful 接口文档界面。通过浏览器打开该链接可以浏览到所有已暴露出来的 HTTP 请求方法及其参数说明等信息。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值