银河娱乐网平台

新闻动态
技术中心
技术中心
当前位置:银河娱乐网平台 >> 服务支持 >> 技术中心 >> 浏览文章
关于组态王读取非标准协议设备数据的应用
作者:技术部 小康 日期:2018年05月30日 来源:本站原创 浏览:

内容导读:    在我们使用组态软件进行数据采集时,一般都会使用软件自带的对应驱动来采集,但是在设备是非标准协议下,需要我们对非标准通讯协议组件进行接入。在斜沟锅炉房系统中需采集一台皮带秤的数据,而皮带秤积算仪的通讯协

    在我们使用组态软件进行数据采集时,一般都会使用软件自带的对应驱动来采集,但是在设备是非标准协议下,需要我们对非标准通讯协议组件进行接入。在斜沟锅炉房系统中需采集一台皮带秤的数据,而皮带秤积算仪的通讯协议为皮带秤产家自定义协议。
    该皮带秤是通过四台重量传感器与一台速度传感器将信号采集到皮带秤积算仪上,从而计算出皮带的速度、流量与累积,通讯方式是使用硬接线连接到工控机多串口卡,信号线A、B分别接多串口卡九针2、1针头,皮带秤积算仪通讯接口为RS-485。
    通过组态王软件定义组态王设备:智能模块→北京亚控→串口数据发送→COM,组态王设备地址、通讯参数与皮带秤积算仪地址、通讯参数一一对应。建立两个变量,变量pdc_fs使用WHDATA寄存器,将ASCII串转换成16进制数据,从COM发送;变量pdc_js使用RDDATA寄存器,从COM读的16进制数据,转换成字符串。注解如下:

点击浏览下一页
    注意:
    1)、寄存器字符串范围不能超过128个字符。
    2)、写: 将写的内容追加在缓冲区的末尾,如果缓冲区已经满,则丢弃时间最早的数据。必须保证字符的个数是偶数。
    3)、读:
    <1>如果缓冲区没有数据,则从串口读取数据。
    <2>如果缓冲区中数据少于127则全部取出。
    <3>从缓冲区取数据,如果缓冲区数据大于127,则只取127, 剩余数据仍然在缓冲区中。
    4)、读和写的缓冲区是分离的。
    5)、注意不要使RDATA,WDATA寄存器发生争夺数据的情况, 在一般情况下,一个应用中只使用其中一个寄存器。

    以下是在组态王应用程序命令语言中的脚本:
    \\本站点\pdc_fs="4D440180020000FEBD0D0A";
    StrASCII(\\本站点\pdc_fs);
    \\本站点\Input_string=StrMid(\\本站点\pdc_js,27,8);
    zhuanhua(\\本站点\Input_string, \\本站点\Get_result);

    1. 在这里我们需要用到两个命令语言函数,
    1). StrASCII  此函数返回某一指定的字符串变量首字符的ASCII值
    2). StrMid  此函数从指定的位置开始,从一个字符串变量中返回指定个数的字符。
    2.在脚本中"4D440180020000FEBD0D0A"为软件向设备发送的读取数据指令,在此之前我们需要使用串口调试软件测试硬件有无故障和通讯是否正常。
    3.变量Input_string为返回值中所需要的字符串,变量类型为内存字符串。
    4.需要自定义一个函数,可以将采集回来的字符串转换为长整数。
    long sLength=StrLen( aa);
    long Count=1;
    long Count_1;
    long Get_Value;
    string Get_str;
    long Result;
    long ASC_0=StrASCII( "0" );
    long ASC_9=StrASCII( "9" );
    long ASC_A=StrASCII( "A" );
    long ASC_F=StrASCII( "F" );
    long ASC_Get_str;

bb=0;//点击一次重新计算结果,否则会累加
while(Count<=sLength)
{
    Get_str=StrMid( aa, Count, 1 );//依次取出字符串的每一位
    ASC_Get_str=StrASCII(  Get_str );//然后转换出该位的ASC码

    if (ASC_0<= ASC_Get_str &&  ASC_Get_str <=ASC_9)//如果该位在0-9之间,则保持0-9
        Get_Value=StrASCII( Get_str )-ASC_0;

    if (ASC_A<= ASC_Get_str &&  ASC_Get_str <=ASC_F) //如果该位在A-F之间,则为10到15
        Get_Value=StrASCII( Get_str )-ASC_A+10;
   
    Result=Get_Value; //获取改位的值,然后乘以16的N次幂                
    Count_1=Count;
    while(Count_1<sLength)
    {
       Result=Result*16;
       Count_1=Count_1+1;
    }

    bb=bb+Result;
     Count=Count+1;
}
点击浏览下一页 
5.变量Get_result为我们所需要的数值,变量类型为整数。采集回来的数据和现场数据相比较,看采集回的数据有无误差,具体参考设备厂家提供的通讯协议。

上一篇文章:S7-300 DP通讯如何用软件判断从站是否通讯正常 下一篇文章:用通俗易懂的话说下hadoop是什么,能做什么
相关链接
发表评论
用户评论

银河产品

推荐产品

版权所有 山西银河娱乐网平台股份有限公司 晋ICP备09004627号    晋公网安备 14019202000008号