西门子Softnet驱动的成功开发

本文涉及的产品
可视分析地图(DataV-Atlas),3 个项目,100M 存储空间
数据可视化 DataV(企业版),20 个大屏 1 个月
简介: 前段时间用西门子提供的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变量不知为什么,读写失败。

相关实践学习
DataV Board用户界面概览
本实验带领用户熟悉DataV Board这款可视化产品的用户界面
阿里云实时数仓实战 - 项目介绍及架构设计
课程简介 1)学习搭建一个数据仓库的过程,理解数据在整个数仓架构的从采集、存储、计算、输出、展示的整个业务流程。 2)整个数仓体系完全搭建在阿里云架构上,理解并学会运用各个服务组件,了解各个组件之间如何配合联动。 3&nbsp;)前置知识要求 &nbsp; 课程大纲 第一章&nbsp;了解数据仓库概念 初步了解数据仓库是干什么的 第二章&nbsp;按照企业开发的标准去搭建一个数据仓库 数据仓库的需求是什么 架构 怎么选型怎么购买服务器 第三章&nbsp;数据生成模块 用户形成数据的一个准备 按照企业的标准,准备了十一张用户行为表 方便使用 第四章&nbsp;采集模块的搭建 购买阿里云服务器 安装 JDK 安装 Flume 第五章&nbsp;用户行为数据仓库 严格按照企业的标准开发 第六章&nbsp;搭建业务数仓理论基础和对表的分类同步 第七章&nbsp;业务数仓的搭建&nbsp; 业务行为数仓效果图&nbsp;&nbsp;
相关文章
|
前端开发
西门子S7-1200模块如何安装和拆卸
本文我们来学习西门子S7-1200模块如何安装和拆卸。西门子S7-1200模块的设计易于安装,尺寸较小,可以有效的利用空间。S7-1200可以安装在面板或标准导轨上,既可以水平安装,也可以垂直安装。
西门子S7-1200模块如何安装和拆卸
|
9月前
|
Unix Linux 编译器
Linux驱动设计(一):驱动是什么?
Linux驱动设计(一):驱动是什么?
75 0
|
存储 Ubuntu Linux
荔枝派Zero(全志V3S)驱动开发之hello驱动程序
字符设备驱动是占用篇幅最大的一类驱动,因为字符设备最多,从最简单的点灯到 I2C、SPI、音频等都属于字符设备驱动的类型。
230 1
|
算法 编译器 开发工具
国产MCU-CW32F030开发学习
国产MCU-CW32F030开发学习
218 0
国产MCU-CW32F030开发学习
西门子S7-1200与S7-200的区别有哪些?
今天我们主要来讲一下西门子S7-1200与S7-200的区别有哪些。
西门子S7-1200与S7-200的区别有哪些?
西门子S7-1200的功能与特点,应用范围有哪些
今天开始我们来学习西门子S7-1200,S7-1200是西门子公司新推出的一款面向离散自动化系统和独立自动化系统的低端PLC。
西门子S7-1200的功能与特点,应用范围有哪些
西门子1200与西门子S7-300的区别是什么?西门子1200与西门子S7-200的区别有哪些
西门子1200作为新推出的紧凑型控制器,其产品定位在原有的西门子S7-200和S7-300之间,它与S7-300和S7-200的区别主要体现在硬件、通信、工程、存储器、功能块、计数器、定时器、工艺功能等方面。
西门子1200与西门子S7-300的区别是什么?西门子1200与西门子S7-200的区别有哪些
|
Linux
嵌入式linux/鸿蒙开发板(IMX6ULL)开发(二十九)驱动进化之路:总线设备驱动模型
嵌入式linux/鸿蒙开发板(IMX6ULL)开发(二十九)驱动进化之路:总线设备驱动模型
198 0
嵌入式linux/鸿蒙开发板(IMX6ULL)开发(二十九)驱动进化之路:总线设备驱动模型
|
存储 数据采集 人工智能
西门子PLC开发笔记(一):PLC介绍,西门子S1200系列接线、编程、下载和仿真
西门子PLC开发笔记(一):PLC介绍,西门子S1200系列接线、编程、下载和仿真
西门子PLC开发笔记(一):PLC介绍,西门子S1200系列接线、编程、下载和仿真
S71200西门子PLC一个设计的接线图
S71200西门子PLC一个设计的接线图
313 0
S71200西门子PLC一个设计的接线图