想要读取串口数据,modbus是一个很好用的第三方库。该库适用于windows和Linux,支持RTP、RTU等协议,基于Linux的开发较难一些,是我前段时间主要的研究方向。http://www.modbus.org/是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操作的全部过程,怎么样,很简单吧?

f6c9b6cc1d55f5f313568fea91453b70.png

2776d7fd19a830a9750c8f49fc290fad.png

Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐