西门子Softnet驱动的成功开发

简介: 前段时间用西门子提供的Prodave5.5开发了基于YFIOServer的驱动程序,很可惜以太网方式它不支持,所以只好用西门子的softnet来开发相应的驱动了

前段时间用西门子提供的Prodave5.5开发了基于YFIOServer的驱动程序,很可惜以太网方式它不支持,所以只好用西门子的softnet来开发相应的驱动了。
image.png
SoftNet的服务程序

目前采用的是同步方式的读写,可支持自恢复功能。

(采用异步方式初次读写可以成功,下次在读写时却失败,不是很明白!)

读写核心代码:

int fix_field_read(int Addr,int intNum,BYTE *bDataValue,long lngMode,int blockno)
{
 struct S7_READ_PARA read_para;
 int32 iRet;
 ord16 orderid=0;
 long lngTimeNum=0;
 long lngOK=1;
    
 read_para.access=S7_ACCESS_SYMB_ADDRESS;
    switch(lngMode)
 {
 case MODE_I: 
  sprintf(read_para.var_name,"IB%d,%d",Addr,intNum);
  break;
 case MODE_Q: 
  sprintf(read_para.var_name,"QB%d,%d",Addr,intNum);
  break;
 case MODE_M: 
  sprintf(read_para.var_name,"MB%d,%d",Addr,intNum);
  break;
 case MODE_DB:
        sprintf(read_para.var_name,"DB%d,B%d,%d",blockno,Addr,intNum);  
  break;
 }
 //IOF->ShowMessage(1,1,read_para.var_name,"--");
         
 iRet=s7_read_req(cp_descr,cp_cref,0,&read_para);
    if(iRet!=S7_OK)
 {
  //IOF->ShowMessage(1,1,read_para.var_name,"s7_read_req");
        return 1000;
 }    
 do
 { 
  iRet=s7_receive(cp_descr,&cp_cref,&orderid);
  switch(iRet)
  {
   case S7_READ_CNF:
    { 
     //--------------------------------              
     if(s7_get_read_cnf(( void *)0,(ord16 *)&intNum,(void *)bDataValue)!=S7_OK)
     {
      return 1001;
     }
                    lngTimeNum=IOD->Overtime+1;
     //----------------------------------
     lngOK=0;
    }
       break;
   default:
    Sleep(1);   //等待1ms
    break;
  }
    
 } while(lngTimeNum++<IOD->Overtime && iRet!=S7_ABORT_IND);
    
 return lngOK;
}

int fix_field_write(int Addr,int intNum,BYTE *bDataValue,long lngMode,int blockno)
{
    
 struct S7_WRITE_PARA write_para;
 int32 iRet;
 ord16 orderid=0;
 long lngTimeNum=0;
 long lngOK=1,i;
    
 write_para.access=S7_ACCESS_SYMB_ADDRESS;
    switch(lngMode)
 {
 case MODE_I: 
  return 999;
  break;
 case MODE_Q: 
  sprintf(write_para.var_name,"QB%d,%d",Addr,intNum);
  break;
 case MODE_M: 
  sprintf(write_para.var_name,"MB%d,%d",Addr,intNum);
  break;
 case MODE_DB:
        sprintf(write_para.var_name,"DB%d,B%d,%d",blockno,Addr,intNum);
     //IOF->ShowMessage(1,1,write_para.var_name,"fix_field_write");
  break;
 }
    write_para.var_length=intNum;
    for(i=0;i<intNum;i++)
 {
       write_para.value[i]=bDataValue[i]; 
 }
         
 iRet=s7_write_req(cp_descr,cp_cref,0,&write_para,(void *)0);
    if(iRet!=S7_OK)
 {
        //IOF->ShowMessage(1,1,"Error:s7_write_req","fix_field_write");
        return 1000;
 }    
 do
 { 
  iRet=s7_receive(cp_descr,&cp_cref,&orderid);
  switch(iRet)
  {
   case S7_WRITE_CNF:
    { 
     //--------------------------------              
     if(s7_get_write_cnf()!=S7_OK)
     {
      return 1001;
     }
                    lngTimeNum=IOD->Overtime+1;
     //----------------------------------
     lngOK=0;
    }
       break;
   default:
    Sleep(1);   //等待1ms
    break;
  }
    
 } while(lngTimeNum++<IOD->Overtime && iRet!=S7_ABORT_IND);
    
 return lngOK;
}

注意:I和Q变量不知为什么,读写失败。

相关实践学习
基于Hologres轻松玩转一站式实时仓库
本场景介绍如何利用阿里云MaxCompute、实时计算Flink和交互式分析服务Hologres开发离线、实时数据融合分析的数据大屏应用。
阿里云实时数仓实战 - 项目介绍及架构设计
课程简介 1)学习搭建一个数据仓库的过程,理解数据在整个数仓架构的从采集、存储、计算、输出、展示的整个业务流程。 2)整个数仓体系完全搭建在阿里云架构上,理解并学会运用各个服务组件,了解各个组件之间如何配合联动。 3&nbsp;)前置知识要求 &nbsp; 课程大纲 第一章&nbsp;了解数据仓库概念 初步了解数据仓库是干什么的 第二章&nbsp;按照企业开发的标准去搭建一个数据仓库 数据仓库的需求是什么 架构 怎么选型怎么购买服务器 第三章&nbsp;数据生成模块 用户形成数据的一个准备 按照企业的标准,准备了十一张用户行为表 方便使用 第四章&nbsp;采集模块的搭建 购买阿里云服务器 安装 JDK 安装 Flume 第五章&nbsp;用户行为数据仓库 严格按照企业的标准开发 第六章&nbsp;搭建业务数仓理论基础和对表的分类同步 第七章&nbsp;业务数仓的搭建&nbsp; 业务行为数仓效果图&nbsp;&nbsp;
相关文章
|
2月前
|
搜索推荐 大数据 Android开发
移动应用与系统:未来技术的驱动力量
随着科技的飞速发展,移动应用和操作系统已经成为我们日常生活中不可或缺的一部分。本文将深入探讨移动应用开发的最新趋势,移动操作系统的核心原理,以及它们如何塑造我们的数字生活。我们将从技术角度出发,分析移动应用和系统的未来发展方向,并探讨它们如何推动技术创新和社会进步。
|
前端开发
西门子S7-1200模块如何安装和拆卸
本文我们来学习西门子S7-1200模块如何安装和拆卸。西门子S7-1200模块的设计易于安装,尺寸较小,可以有效的利用空间。S7-1200可以安装在面板或标准导轨上,既可以水平安装,也可以垂直安装。
西门子S7-1200模块如何安装和拆卸
|
11月前
|
传感器 算法 编译器
国产MCU-CW32F030开发学习
国产MCU-CW32F030开发学习
132 0
国产MCU-CW32F030开发学习
西门子S7-1200的功能与特点,应用范围有哪些
今天开始我们来学习西门子S7-1200,S7-1200是西门子公司新推出的一款面向离散自动化系统和独立自动化系统的低端PLC。
西门子S7-1200的功能与特点,应用范围有哪些
EMQ
|
存储 SQL Prometheus
v2.2发布,CNC Fanuc、QnA 1E驱动即将到来
九月Neuron发布2.2版本,新增Beckhoff ADS、OPC DA、NONA11驱动等,本月将专注于数据统计以及事件告警系统的搭建,完善在Neuron使用过程中对其及其所连接设备的监控管理。
EMQ
102 0
|
大数据 5G 云计算
技术驱动与工程师发展
技术驱动与工程师发展
71 0
技术驱动与工程师发展
|
物联网 Linux 芯片
启明云端分享:基于工业级嵌入式核心板卡制作而成的核心模块
WT-ARM9X25-S2 核心模块是基于 ATMEL AT91SAM9X25 ARM9 处理器的工业级嵌入式核心板卡,采用表贴式邮票口封装, 4cm X 4cm 超小尺寸, 108 引脚。该产品主要面向工业控制,仪表仪器,医疗电子,物联网网关等应用, 可以帮助客户快速开发高可靠性产品。
169 0
启明云端分享:基于工业级嵌入式核心板卡制作而成的核心模块
|
传感器 机器学习/深度学习 安全