1500字范文,内容丰富有趣,写作好帮手!
1500字范文 > modbus软件开发linux Linux C开发之用modbus实现串口通讯

modbus软件开发linux Linux C开发之用modbus实现串口通讯

时间:2019-02-06 22:23:17

相关推荐

modbus软件开发linux Linux C开发之用modbus实现串口通讯

想要读取串口数据,modbus是一个很好用的第三方库。该库适用于windows和Linux,支持RTP、RTU等协议,基于Linux的开发较难一些,是我前段时间主要的研究方向。/是modbus的主页,有兴趣的朋友可以查看一下它的特性。

废话不多说,速度开始。首先,你需要安装modbus的第三方库,sudo apt-get install libmodbus-dev,然后你就可以在Linux C代码里面写上#include 了。

第二步:连接串口并做一些参数配置。

m_modbus = modbus_new_rtu("/dev/ttyS0"/*serialPort*/,9600/*baud*/,78,8/*dataBits */,1/*stopBits*/);//ttys0是Linux第一个串口,有的时候默认串口是ttys1,最好是枚举一下。在windows下,默认串口设备名为“COM1”

modbus_set_debug(m_modbus, 0);

第三步:设置等待时间,超过时间没连接上则报错。

struct timeval response_timeout;

response_timeout.tv_sec = 1;

response_timeout.tv_usec = 0;

modbus_set_response_timeout(m_modbus,&response_timeout);

第四步:从串口读取数据,一般是开关量数据,只有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值得是读取端口数量

第五步:关闭modbus连接。

if(m_modbus) {

modbus_close(m_modbus);

modbus_free(m_modbus);

m_modbus = NULL;

}

这就是modbus操作的全部过程,怎么样,很简单吧?

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。