发表于:2016/1/22 21:51:56
#0楼
西门子S7 200PLC可以查一个存储卡来记录数据,最大容量256K,做大记录条数65535,这对很多需求还说还是不够用的。使用单片机,从通讯口用Modbus协议读取内存区的数据,然后写到sd卡里去,这样就做成了一个简单的数据记录仪。这样的方法同样适用用其他Modbus设备。
所需要的模块有:485转TTL模块,单片机、SD卡模块。从淘宝可以很方便的买到这些元件。单片机我用的是Arduino Nano。这些都是很便宜的模块。总成本不过几十元。
从Aruino.cc下载单片机的编译环境,并下载sd卡读写和Modbus通讯两个函数库。具体的函数说明请见这两个库的帮助文件。唯一有一个需要注意的地方,Modbus通讯是按十六位寄存器读写的,而浮点数会占用两个寄存器。这样在读浮点数时,先分别读出浮点数的高十六位和第十六位,然后将它拼接成三十二位浮点数。写的时候相反。这个操作的函数如下:
union Pun {float f; uint32_t u;};
void encodeFloat(uint16_t *regs, float x)
{
union Pun pun;
pun.f = x;
regs[0] = (pun.u >> 16) & 0xFFFFU;
regs[1] = pun.u & 0xFFFFU;
}
float decodeFloat(const uint16_t *regs)
{
union Pun pun;
pun.u = ((uint32_t)regs[0] << 16) | regs[1];
return pun.f;
}
void Modbus_call()
{
/*reading of coil where i can succefully read value*/
encodeFloat(&au16data[ 0], Current_Value1[0]);
encodeFloat(&au16data[ 2], Current_Value1[1]);
encodeFloat(&au16data[ 4], Current_Value1[2]);
/* And so on... */
}