写入Apache Camel OPC UA服务器失败,但返回良好的StatusCode

时间:2019-04-26 11:55:18

标签: java apache-camel milo

我正在开发一个Apache Camel路由,该路由应创建具有三个变量的OPC UA服务器。该路由还应该初始化这三个值。

我尝试按照官方Apache Camel文档中所述的方法进行操作。我可以使用任何OPC UA客户端连接到服务器,然后查看这些值。

这是我的路线的代码:

<route id="opcuaserver">
  <from uri="timer://runOnce?repeatCount=1&amp;delay=5000"/>
  <to uri="milo-server:velocity"/>
  <to uri="milo-server:laufmeter"/>
  <to uri="milo-server:lfm_reset"/>

  <!-- INITIALIZE OPCUA SERVER VARIABLES -->
  <setHeader headerName="serverUrl">
    <simple>opc.tcp://NBTC363:12685</simple>
  </setHeader>
  <setBody>
    <simple>
      ns=2;s=items-velocity?0
      ns=2;s=items-laufmeter?0
      ns=2;s=items-lfm_reset?0
    </simple>
  </setBody>
  <bean ref="OpcuaBean" method="doWriteOneOrMany"/>
  <log message="${body}"/>
  <to uri="mock:opcuaInitResult"/>
</route>

我的bean将标头和主体中的信息处理为与服务器的连接以及节点ID及其所需值的列表。然后使用该列表将所需的值最终写入服务器。写入过程完成后,bean将结果StatusCodes写入骆驼日志中。

我期望的结果是成功写入服务器,并带有如下的StatusCode消息:

[StatusCode{name=Good, value=0, quality=good}

但是实际上,服务器上的值继续为null,数据类型为null,从而导致此StatusCode:

[StatusCode{name=Good, value=0x00000000, quality=good}

我知道这表明我已经在客户端正确完成了所有操作,所以我想知道我在服务器端是否做了错什么。 我遵循了骆驼opc服务器组件的示例,找不到在本期中对我有用的任何选项或参数。

1 个答案:

答案 0 :(得分:0)

问题是我没有正确使用camel-milo组件。显然,你可以做

type UserOperation interface {
    Update(info *User) error
}

type UserFinder func(userName string) (*User, error)

type UserLogic struct {
    UserOperation
    FindByUsername UserFinder
}

//NewUser struct
func NewUser() *UserLogic { // return structs, accept interfaces!
    return &UserLogic{
        findByUsername: FindByUsername
    }
}

func (u *UserLogic) Update(info *User) error {
    userInfo, err := u.findByUsername(info.Username)
    if err != nil {
        return err
    }
    fmt.Println(userInfo.Username, userInfo.Password)
    fmt.Println("do some update logic !!!")
    return nil
}

func FindByUsername(userName string) (*User, error) {
    userInfo := &User{}
    var exist bool
    if userInfo, exist = dataStore[userName]; !exist {
        return nil, errors.New("user not found")
    }
    return userInfo, nil
}

要写入您的OPC UA服务器。