登录
首页 PLC论坛 PLC论坛
回帖 发帖
正文

主题:自己动手做一个西门子S7 200 PLC的数据记录仪

点击:1026 回复:1


西门子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... */
}

图片
查看大图

图片
查看大图

图片
查看大图

16-01-22 21:51
要是能开发 麻将机计算器,可能很有应用。就是麻将的东南西北四方,每方原始有50点,开始玩牌只要有一方胡牌,其他三方都要从50点中减一个数,都加到胡牌这一方,只要出现一方数字减为零,报警清零,都回50点
16-01-22 22:50

工控新闻

更多新闻资讯