您现在所在的是:

PLC论坛

回帖:1个,阅读:1008 [上一页] [1] [下一页]
672
sayhier
文章数:14
年度积分:50
历史总积分:672
注册时间:2015/7/7
发站内信
发表于: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... */
}
图
图
图

此帖来自中华工控网工控博客
原文件地址:http://blog.gkong.com/more.asp?id=556583&Name=sayhier
11060
华星电仪
文章数:1574
年度积分:50
历史总积分:11060
注册时间:2008/9/9
发站内信
寻找英威腾(三)
发表于:2016/1/22 22:50:05
#1楼
要是能开发 麻将机计算器,可能很有应用。就是麻将的东南西北四方,每方原始有50点,开始玩牌只要有一方胡牌,其他三方都要从50点中减一个数,都加到胡牌这一方,只要出现一方数字减为零,报警清零,都回50点
学无止境!
由力而起,由善而达。
踏踏实实做人,实实在在做事!

关于我们 | 联系我们 | 广告服务 | 本站动态 | 友情链接 | 法律声明 | 非法和不良信息举报

工控网客服热线:0755-86369299
版权所有 工控网 Copyright©2025 Gkong.com, All Rights Reserved

46.8003