在线时间1020 小时
UID299704
注册时间2011-6-18
NXP金币2187
TA的每日心情 | 开心 2024-4-10 22:38 |
---|
签到天数: 1335 天 [LV.10]以坛为家III
版主
- 积分
- 9049
- 最后登录
- 2024-4-13
|
[飞凌RT1052] Modbus我来了 本次试用主要以日常的开发与使用相关,平时使用最多的就是工业通讯最常用的Modbus通讯协议了。现在我们就将modbus协议移植到我们飞凌RT1052开发板上。
第一步、我们肯定是要安装交叉编译环境,大家参考网友 Angel_YY 的帖子[原创] 飞凌RT1052+ 5 Linux软件的开发 进行操作,帖子写得非常详细,非常实用。
第二步、我们安装Modbus第三方库 sudo apt-get install libmodbus-dev,安装完毕后我们就可以在Linux C代码里面写上#include <modbus.h>了。
第三步、需要我们在程序里做移植修改:
1.串口参数配置
- m_modbus = modbus_new_rtu("/dev/ttyS0"/*serialPort*/,9600/*baud*/,78,8/*dataBits */,1/*stopBits*/);//ttys0是Linux第一个串口,有的时候默认串口是ttys1
- modbus_set_debug(m_modbus, 0);
复制代码 2.设置等待时间,超过时间没连接上则报错:
- struct timeval response_timeout;
- response_timeout.tv_sec = 1;
- response_timeout.tv_usec = 0;
- modbus_set_response_timeout(m_modbus,&response_timeout);
复制代码 3.从串口读取数据,一般是开关量数据,只有0、1两态。
- int i;
- if(m_modbus == NULL)
- {
- printf("No connection,check your device!\n");
- return;
- }
- uint8_t dest[1024]; //setup memory for data
- uint16_t * dest16 = (uint16_t *) dest;
- memset(dest, 0, 1024);
- int ret = -1; //return value from read functions
- int is16Bit = 0;
- modbus_set_slave(m_modbus, slave);
- ret = modbus_read_input_bits(m_modbus, 0/*startAddress*/, 24/*noOfItems*/, dest);//24值得是读取端口数量
复制代码 4.关闭modbus连接
- if(m_modbus) {
- modbus_close(m_modbus);
- modbus_free(m_modbus);
- m_modbus = NULL;
- }
复制代码 OK, 这就是modbus操作的全部过程,怎么样,还算简单吧?
|
|