AB RsLogix5000 PLC第三方模块MVI56的编程开发

简介: 原来这个模块就是一个典型的嵌入式系统,相当一个带三个串口的386的电脑,操作系统为小型的DOS系统(TINY DOS),用C++为其开发程序。

在做济钢项目的时候遇到一个很大的挑战,第一济钢要求采用AB的RsLogix5000系列,第二该系统需要联入本公司自己生产的红外测位系统。由于我们的系统的通信协议是内部协议,而AB的PLC不像西门子的200系列的PLC可以对自由口编程,可以很方便的获取到数据,而AB的则不然,目前AB已经不在生产第三方接口的模块,而有其合作的ProSoft公司专门生产第三方模块。ProSoft生产的模块有很多种,由于没有经验,很不幸,我们选择的是MVI56的模块,而这个模块却是全部自由编程,不含有任何默认协议。去退货确要报价的30%作为补偿,八个模块要赔好几万,唉!... ...

剩下的事,只有研究了,花了五千银子,请了一个“专家”,对AB的产品非常熟。一星期后,终于有点眉目了,原来这个模块就是一个典型的嵌入式系统,相当一个带三个串口的386的电脑,操作系统为小型的DOS系统(TINY DOS),用C++为其开发程序。对DOS C我是非常熟的,可是如何与AB通信确不熟悉,幸好那个“专家”对此比较熟,我们二者一结合,果然成功了--效果出奇的好,不用AB PLC编一行代码,就可以实现把数据写入到变量区。下面是PLC的配置界面:

//基于 TINY DOS 的C++ 的核心通信程序

//*************************************************************************
//**函 数 名:Com_GetWHData
//**输    入:intAddr  - 红外标尺地址
//**        :intState - 标尺状态 0~9  -1 表示校验错误
//**输    出:无
//**功能描述:获取红外标尺的信息
//**全局变量:
//**调用模块:
//**作    者:叶帆
//**日    期:2004-11-24 16:56:57
//**修 改 人:
//**日    期:
//**版    本:V1.0.0
//*************************************************************************
void Com_GetWHData(WORD *intAddr,WORD *intState)
{
    BYTE ch;
    BYTE bytData[6];
    BYTE bytFlag=0;
    BYTE bytNum=0;

    while(bytNum<7)
    {
 if (MVIsp_Getch(Commport,&ch,1000) != MVI_SUCCESS)
 {
   *intAddr=0;
   *intState=9;
   return;
 }
 if(bytFlag==1)
 {
    bytData[bytNum++]=ch;
 }

 if(ch==0xAC && bytNum==0)
 {
   bytFlag=1;    //开始接收
 }

    }

    //正副本校验
    if(bytData[0]==bytData[1] && bytData[2]==bytData[3] && bytData[4]==bytData[5])
    {
 //地址信息
 *intAddr=(bytData[0]>>4)*(WORD)10000+(bytData[0] & 0x0f)*(WORD)1000+(bytData[2]>>4)*(WORD)100+(bytData[2] & 0x0f)*(WORD)10+(bytData[4]>>4);
 //状态信息
 *intState=(bytData[4] & 0x0f);
    }
    else
   {
 *intAddr=0;
 *intState=0xFF;
    }

}


//*************************************************************************
//**函 数 名:ProcessCommand
//**输    入:无
//**输    出:无
//**功能描述:命令处理
//**全局变量:
//**调用模块:
//**作    者:叶帆
//**日    期:2004-11-24 16:56:57
//**修 改 人:
//**日    期:
//**版    本:V1.0.0
//*************************************************************************
int ProcessCommand(void)
{
    WORD intAddr;
    WORD intState;
    WORD intData[2];

    //读取红外标尺信息
    Com_GetWHData (&intAddr,&intState);

   //MVIbp_SetUserLED(handle, MVI_LED_USER1, MVI_LED_STATE_OFF);

    //读取背板数据(注意,AB PLC在配置模块时,输出缓冲区的大小必须为0)
    if (MVI_SUCCESS == MVIbp_ReadOutputImage(handle, intData, 0, 2))
    {

     //数据改变或有效才写入数据
     if (intState!=0xFF && (intData[0]!=intAddr ||intData[1]!=intState))
     {
        intData[0]=intAddr;
        intData[1]=intState;

        if (MVI_SUCCESS !=  MVIbp_WriteInputImage(handle,intData, 0, 2))
        {
     return(0);     //原来为1,现改为0  2005年6月8日
        }

        //MVIbp_SetUserLED(handle, MVI_LED_USER1, MVI_LED_STATE_ON);
     }

    }
    return(0);
}
相关文章
|
机器学习/深度学习 人工智能 算法
【AAAI 2024】再创佳绩!阿里云人工智能平台PAI多篇论文入选
阿里云人工智能平台PAI发表的多篇论文在AAAI-2024上正式亮相发表。AAAI是由国际人工智能促进协会主办的年会,是人工智能领域中历史最悠久、涵盖内容最广泛的国际顶级学术会议之一,也是中国计算机学会(CCF)推荐的A类国际学术会议。论文成果是阿里云与浙江大学、华南理工大学联合培养项目等共同研发,深耕以通用人工智能(AGI)为目标的一系列基础科学与工程问题,包括多模态理解模型、小样本类增量学习、深度表格学习和文档版面此次入选意味着阿里云人工智能平台PAI自研的深度学习算法达到了全球业界先进水平,获得了国际学者的认可,展现了阿里云人工智能技术创新在国际上的竞争力。
|
自然语言处理 监控 前端开发
飞猪微前端实践:统一运营工作台的解决方案
解决痛点,效能提升,飞猪运营工作台微前端实践力求用技术给业务带来差异化的价值。
飞猪微前端实践:统一运营工作台的解决方案
|
4月前
|
人工智能 监控 算法
别再做SEO了!2025最新GEO优化公司排行榜,AI时代流量密码全揭秘!
2025年,生成式AI重塑流量格局,GEO(生成式引擎优化)正取代传统SEO。用户从“搜索”转向“对话”,信息由AI主动推荐。GEO通过结构化内容、信任信号构建与多平台适配,让品牌成为AI眼中的“权威专家”。选择服务商需关注技术透明度、行业理解与定制化能力。未来属于能被AI理解和信任的品牌。
|
10月前
|
机器学习/深度学习 存储 算法
Java 大视界 -- Java 大数据在智能农业无人机植保作业路径规划与药效评估中的应用(165)
本文围绕 Java 大数据在智能农业无人机植保作业路径规划与药效评估中的应用展开,剖析作业现状与挑战,阐述技术原理及应用方法,结合案例与代码,给出具有实操性的解决方案。
Java 大视界 -- Java 大数据在智能农业无人机植保作业路径规划与药效评估中的应用(165)
|
Web App开发 资源调度 网络协议
Linux系统之部署IP工具箱MyIP
【10月更文挑战第5天】使用Docker部署Radicale日历和联系人应用Linux系统之部署IP工具箱MyIP
811 1
Linux系统之部署IP工具箱MyIP
|
存储 安全 容器
【多线程面试题二十一】、 分段锁是怎么实现的?
这篇文章解释了分段锁的概念和实现方式,通过将数据分成多个段并在每段数据上使用独立锁,从而降低锁竞争,提高并发访问效率,举例说明了`ConcurrentHashMap`如何使用分段锁技术来实现高并发和线程安全。
【多线程面试题二十一】、 分段锁是怎么实现的?
|
存储 缓存 安全
Linux 设备驱动程序(三)(下)
Linux 设备驱动程序(三)
323 0
|
决策智能 Python
【运筹优化】(1) TSP 旅行商问题,Python + Gurobi 代码
TSP(旅行商问题)涉及寻找有向完全图中起点到所有其他点的最短回路。目标是最小化路径权重总和,保证每个节点仅访问一次。模型通过0-1决策变量表示边的存在,约束确保每个节点恰好一次作为起点和终点。为消除子圈,引入MTZ方法,添加辅助变量破坏环路。实验中,随机生成30个点,计算距离并应用MTZ模型求解,通过Gurobi库实现并展示结果。
1999 0
【运筹优化】(1) TSP 旅行商问题,Python + Gurobi 代码
|
监控 数据可视化 Java
Elasticsearch JVM 堆内存使用率飙升,怎么办?
Elasticsearch JVM 堆内存使用率飙升,怎么办?

热门文章

最新文章