用户中心
· 企业空间 首页 | 资讯 | 技术 | 产品 | 企业 | 直播 | 专题 | 智能制造 | 论坛| 在线研讨会
紫金桥软件技术有限公司
企业空间 > 案例应用 > 正文
  • 如何配置紫金桥WebService
  • 发布时间:2014/1/15 9:12:04   修改时间:2014/1/15 9:12:04 浏览次数:1237
  • 1、配置紫金桥WebService


    首先运行想支持WebService功能的工程,然后在紫金桥安装目录下找到RealDbWebServic.exe程序,运行它,可以看到如下图所示的运行界面。

    程序运行后上方是菜单,中间详细的列出了支持的各个函数被调用的次数,以及响应超时的次数。

    显示的信息的第一行为WebService在哪个端口提供服务,第二行为响应的询问的次数,超时的次数,以及发生严重错误的次数。这里的超时是指的和Db数据库通讯时的超时次数,严重错误是指的和Db数据库通讯时发生的严重错误次数。
    选择菜单,可以看到有文件和帮助两个子菜单,其中帮助菜单用来显示当前程序的版本号。文件菜单又有“属性设置”和“退出”两个选项,其中退出选项用来退出当前的WebService服务,属性设置用来更改Web服务所在的端口号。选择属性设置菜单,如下图所示:


    会弹出如下图所示的设置端口号对话框:


    可以在这里输入新的端口号,值得注意的是,更改端口号之后,并不能马上生效,只有当RealDbWebServic程序重启后,所做的更改才会生效。

    2、紫金桥WebService发布的方法

    1)取得实时数据

    bool GetRealData(string[] names, out string[] datas);
    调用此函数可以获得相应的位号的实时数据,其中names是输入参数,为字符串数组,每一个字符串为位号的名称比如“A1.PV”,注意这里需要包括参数名称。
    datas为输出参数,为字符串数组,它包含的字符串个数和输入参数names包括的字符串个数相同。
    如果函数返回true,那么就可以通过datas来获得相应位号的实时数据。

    2)设置实时数据
    bool SetRealData(string[] names, string[] datas);
    调用此函数可以修改实时数据库中相应位号的实时数据,names和datas都是输入参数,意义请参见GetRealData。
    如果函数返回true,那么实时数据库中的相应位号的实时数据被成功修改。

    3)取批量历史数据
    bool GetHisData(string name, DtTime startTime, double secondSpace, int nDataCount, out HisData[] datas);
    其中name是需要取批量历史数据的位号,比如“A1.PV”;startTime是取历史的起始时间;secondSpace是读取历史数据的间隔,单位秒;nDataCount是读取的历史数据个数;datas为输出数组参数,返回读取的所有历史数据。
    其中HisData的定位如下:
    public class DtTime
    {
    public DateTime time;
    public short millsec;
    }
    public class HisData
    {
    public DtTime time;
    public double data;
    }
    HisData由两个成员构成,一个为数据的时间time,一个为数据data
    数据的时间DtTime也由两个成员构成,一个为DateTime类型,一个为时间的毫秒数。

    4)取一段时间范围内的所有历史数据
    bool GetAllHisData(string name, DtTime startTime, int secondSpan, out HisData[] datas);
    其中name是需要取批量历史数据的位号,比如“A1.PV”;startTime是取历史的起始时间;secondSpan是读取历史数据的时间跨度,单位秒;datas为输出数组参数,返回读取的所有历史数据。HisData的定义请参见GetHisData。

    5)插入批量历史数据
    bool InsertHisData(string name, HisData[] datas);
    其中name是需要取批量历史数据的位号,比如“A1.PV”;datas为输入数组参数,传入需要插入的所有历史数据。HisData的定义请参见GetHisData。

    6)取得实时报警信息
    bool GetRealAlarm(int areaNo, int unitNo, out AlarmData[] alarms);
    areaNo为获取的实时报警的区域号,-1代表所有区域;unitNo为获取的实时报警的单元号,-1表示所有单元。alarms返回当前的符号条件的所有实时报警。AlarmData的定义如下:
    public class AlarmData
    {
    public string name;
    public string desc;
    public int type;
    public int prio;
    public int ack;
    public DtTime time;
    public double data;
    public double limit;
    public string eu;
    public int area;
    }
    其中参数的意义如下:
    name表示位号名称。
    desc表示点说明。
    type为报警的类型意义为0低低报,1低报,2高报,3高高报,4变化率,5偏差报警。
    prio是报警的优先级,0恢复,1低级,2高级,3紧急
    ack表示报警的确认状态,0没有确认,1确认,2恢复
    time是报警的时间,DtTime的定义请参考GetHisData。
    data是报警时刻的数据。
    limit是报警发生时的限值。
    eu是位号的工程单位。
    area是位号所在的区域号。

    7)取得历史报警信息
    bool GetHisAlarm(int areaNo, int unitNo, int day, out AlarmData[] alarms);
    areaNo为获取的实时报警的区域号,-1代表所有区域;unitNo为获取的实时报警的单元号,-1表示所有单元。day表示获取哪一天的报警历史,0表示是当天,-1表示前一天,其他类推。alarms返回当前的符号条件的所有历史报警信息。AlarmData的定义请参考GetRealAlarm。

    8)进行Sql查询
    bool SqlQuery(string sql, out string[] types, out string[][] result);
    参数sql是所查询的sql命令,types返回result中每一列的类型,字符型为“string”,整型为“int”,浮点类型为“real”。result是一个二维数组,返回查询的结果。

    3、在C#下调用紫金桥WebService


    使用C#调用紫金桥WebService的步骤主要有两步:
    1)根据WSDL文件产生调用WebService的接口
    打开VS进入C#开发环境,选择菜单“工具/Visual Studio Command Prompt”进入命令行模式:
     
    在命令行键入:
    wsdl /l:CS /o:x:/realDb.cs x:/realdb.wsdl
    上面的X:为紫金桥提供的realdb.wsdl文件所在的目录,也是输出realDb.cs的目录,可以根据具体情况灵活处理。
    执行命令后,就会生成realDb.cs文件,可以在C#项目中使用。

    2)在C#下编写代码调用接口访问WebService

    把realDb.cs加入到C#项目中,并调用相应的接口函数即可调用相应的WebService功能。注意在realDb.cs的前面有如下的代码:
    this.Url = "http://localhost:1997";
    这里是说当前WebService所在的机器为本机,端口号为1997,这里可以根据需要修改成合适的地址。
    取实时数据的示例代码:
    string[] names = new string[4];
    names[0] = "A1.PV";
    names[1] = "A2.PV";
    names[2] = "A3.PV";
    names[3] = "A4.DESC";

    string[] datas;
    Service s = new Service();
    s.GetRealData(names, out datas);
    int nCount = datas.GetUpperBound(0) + 1;
    realData.Text = "";
    for (int i = 0; i < nCount; ++i)
    {
    realData.Text += datas[i] + " ";
    }
    设置实时数据的示例代码:
    string[] names = new string[4];
    names[0] = "A1.PV";
    names[1] = "A2.PV";
    names[2] = "A3.PV";
    names[3] = "A4.DESC";
    string[] datas = new string[4];
    datas[0] = "1";
    datas[1] = "2";
    datas[2] = "3";
    datas[3] = "设置成功";
    Service s = new Service();
    s.SetRealData(names, datas);

    取历史数据的示例代码:
    Service s = new Service();
    DtTime dt = new DtTime();
    dt.time = new System.DateTime(2013, 11, 29, 15, 36, 0);
    dt.millsec = 0;
    HisData[] datas;
    s.GetHisData("A1.PV", dt, 1, 4, out datas);
    int nCount = datas.GetUpperBound(0) + 1;
    his_data_edit.Text = "";
    for (int i = 0; i < nCount; ++i)
    {
    his_data_edit.Text += datas[i].time.time.ToString() + " " + datas[i].data.ToString() + "\r\n";
    }
    插入历史数据的示例代码:
    Service s = new Service();
    DtTime dt = new DtTime();
    HisData[] datas = new HisData[4];
    datas[0] = new HisData();
    datas[0].time = new DtTime();
    datas[0].time.time = new System.DateTime(2013, 11, 29, 15, 36, 0);
    datas[0].data = 1;
    datas[1] = new HisData();
    datas[1].time = new DtTime();
    datas[1].time.time = new System.DateTime(2013, 11, 29, 15, 36, 1);
    datas[1].data = 12;
    datas[2] = new HisData();
    datas[2].time = new DtTime();
    datas[2].time.time = new System.DateTime(2013, 11, 29, 15, 36, 2);
    datas[2].data = 123;
    datas[3] = new HisData();
    datas[3].time = new DtTime();
    datas[3].time.time = new System.DateTime(2013, 11, 29, 15, 36, 3);
    datas[3].data = 1234;
    s.InsertHisData("A1.PV", datas);
    取得实时报警的示例代码如下:
    Service s = new Service();
    AlarmData[] alarms;
    s.GetRealAlarm(-1, -1, out alarms);
    int nCount = alarms.GetUpperBound(0) + 1;
    alarm_edit.Text = "";
    for (int i = 0; i < nCount; ++i)
    {
    alarm_edit.Text += alarms[i].time.time.ToString() + " " + alarms[i].data.ToString() + " " + alarms[i].name + " " + alarms[i].desc + " " + alarms[i].eu + " " + alarms[i].data.ToString() + " " + alarms[i].limit.ToString() + "\r\n";
    }

    4、在Java下调用紫金桥WebService



    在Java下可以使用Axis2来调用紫金桥的WebService,Axis2是Apache下的一个重量级WebService框架,准确说它是一个Web Services / SOAP / WSDL 的引擎,是WebService框架的集大成者,它能不但能制作和发布WebService,而且可以生成Java和其他语言版WebService客户端和服务端代码。

    Axis2的下载地址为:

    http://apache.dataguru.cn//axis/axis2/java/core/1.6.2/axis2-1.6.2-bin.zip
    下面着重介绍在Java下如何通过Axis2 调用紫金桥Web Service。

    使用Axis2调用紫金桥WebService的步骤主要有两步:

    1)根据WSDL文件产生调用WebService的接口
    Axis2提供了一个wsdl2java.bat命令,可以根据WSDL文件自动产生调用WebService的接口代码。在紫金桥安装目录下可以找到realdb.wsdl文件,通过wsdl2java.bat命令即可利用此文件生成相应的调用WebService的接口代码。
    wsdl2java.bat命令可以在/bin目录中找到。在使用wsdl2java.bat命令之前需要设置AXIS2_HOME环境变量,该变量值是。 
    在Windows控制台输出如下的命令行来生成调用WebService的代码:%AXIS2_HOME%\bin\wsdl2java -uri <紫金桥软件安装目录>/realdb.wsdl -p realdb -s -o realdb 
    其中-url参数指定了wsdl文件的路径,可以是本地路径,也可以是网络路径。
    -p参数指定了生成的Java类的包名,
    -o参数指定了生成的一系列文件保存的根目录。
    在执行完上面的命令后,在当前目录下多了个realdb目录,在realdb\src\realdb目录可以找到ServiceStub.java文件,该文件封装了调用WebService的方法,在程序中直接使用这个类.
    需要注意的是,wsdl2java.bat命令生成的ServiceStub类将WebService方法的参数都封装在了相应的类中,类名为方法名,例如,GetRealData方法的参数都封装在了GetRealData类中,要想调用GetRealData方法,必须先创建GetRealData类的对象实例。

    2)在java下调用接口访问紫金桥WebServcie
    下面将介绍通过Eclipse来编写java调用WebService的方法,使用其他编辑环境类似。
    解压eclipse-jee-helios-SR1-win32.zip文件,运行eclipse.exe出现下图界面:




    设置工作目录,这里采用默认配置,直接“OK”按钮,完成配置。
    在eclipse中新建 Java Project,在Project Name输入 
    RealDBServiceExample,点击Finish按钮完成工程创建。
    在工程中新建 class 类,画面如下图所示:
     
    输入类名RealDBWebService,选中 public static void main(String[] args)选项,点击Finish按钮完成类创建。
    将src目录下的realdb文件夹拷贝到工程目录下的src文件夹下。
    在Eclipse中编写Service调用代码,具体代码如下:
    引入工程所需 package。具体如下所示:
    import realdb.*;
    import java.rmi.RemoteException;
    import javax.xml.namespace.QName; 
    import org.apache.axis2.AxisFault;
    import org.apache.axis2.addressing.EndpointReference;
    import org.apache.axis2.client.Options; 
    import org.apache.axis2.rpc.client.RPCServiceClient; 

    在main函数中编写代码如下:

    ServiceStub realdb = new ServiceStub();
    ServiceStub.GetRealData getData = new ServiceStub.GetRealData();
    //定义GetRealData方法所需参数
    ServiceStub.ArrayOfString pointParameters 
    = new ServiceStub.ArrayOfString();
    pointParameters.addString("A1.PV");
    pointParameters.addString("A2.PV");
    pointParameters.addString("A3.PV");

    getData.setNames(pointParameters);
    ServiceStub.ArrayOfString pointValues 
    = realdb.getRealData(getData).getDatas();
    //输出参数与所回值
    String paraValue[] = pointValues.getString();
    String paraName[] = pointParameters.getString();
    for (int i = 0; i<3; ++i)
    {
    System.out.println(paraName[i] + " = " + paraValue[i]);
    }

    在Eclipse中加载axis2 libraries
    进入Java Project属性设置对话框,点击Java Build Path,选择Libraries标签页,如下图所示:
     
    点击 Add External JARs ... 对话框,在弹出对话框选择axis2 libraries,完成axis2 libraries加载。

    运行后结果如下图所示:

    A1.PV = 10000.990
    A2.PV = 20000.330
    A3.PV = 30000.230

    注意事项:

     Realdb.wsdl中的soap:address location和soap12:address location默认为localhost,端口号默认为1997。

    如何配置紫金桥WebService - dqzijinqiao - 紫金桥软件

      如果想让其他网络机器可以访问Web Service,需将localhost替换成本机IP,如本机IP为 192.168.0.1 替换后如下所示:

    如何配置紫金桥WebService - dqzijinqiao - 紫金桥软件

      替换完毕后,重新运行wsdl2java即可重新生成调用WebService的接口代码。

  • 企业介绍
紫金桥软件技术有限公司(RealSoft)是由中石油出资成立的专门从事计算机软件产品开发的高新技术企业,是中国石油天然气集团的软件开发基地。公司专注于自主知识产权软件产品“实时数据库系统”和“监控组态软件”的开发与推广工作,以为企业集团及客户…  更多>>
  • 联系方式

紫金桥软件技术有限公司

联系人:李磊

地址:黑龙江省大庆市高新区服务外包产业园C1-817室

邮编:163316

电话:400-6996-515

传真:0459-8151391-808

公司网址:http://www.realsoft.cc

  • 该空间手机版

扫描此二维码即可访问该空间手机版

  • 在线反馈
1.我有以下需求:



2.详细的需求:
姓名:
单位:
电话:
邮件:
您还没有登录,请登陆,
如果您还没有注册,点击这里注册.
  • 网友反馈
  • 戴永铁 在2024/6/11 14:51:00留言
  • 留言类型:贵公司产品销售人员联系我,贵公司技术支持人员联系我,
  • 详细留言:需要制药工业领域的实时库报表,包含矩阵配?、参数配方、数据(统计和历史)、曲线、事件、报警、审计追踪,这些内容可以组态化
  • 晓同 在2024/5/16 11:06:00留言
  • 留言类型:我让贵公司产品销售人员联系我,
  • 详细留言:紫金桥组态软件V6.5,512点授权
  • 在2023/10/21 16:03:00留言
  • 留言类型:贵公司技术支持人员联系我,
  • 详细留言:OPC
  • 郑鑫汶 在2023/6/1 14:58:00留言
  • 留言类型:我想得到贵公司产品详细资料,我想得到贵公司产品的价格信息,我让贵公司产品销售人员联系我,我让贵公司技术支持人员联系我,
  • 详细留言:需要咨询贵公司软件的价格功能
  • 吴吉校 在2023/3/15 7:45:00留言
  • 留言类型:我想得到贵公司产品详细资料,我想得到贵公司产品的价格信息,我让贵公司产品销售人员联系我,我让贵公司技术支持人员联系我,
  • 详细留言:组态软件咨询
更多请进入空间管理中心查看
关于我们 | 网站地图 | 联系我们
© 2003-2018    经营许可编号:京ICP证120335号
公安机关备案号:110102002318  服务热线:010-82053688
我要反馈