我正在开发一个Apache Camel路由,该路由应创建具有三个变量的OPC UA服务器。该路由还应该初始化这三个值。
我尝试按照官方Apache Camel文档中所述的方法进行操作。我可以使用任何OPC UA客户端连接到服务器,然后查看这些值。
这是我的路线的代码:
<route id="opcuaserver">
<from uri="timer://runOnce?repeatCount=1&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服务器组件的示例,找不到在本期中对我有用的任何选项或参数。
答案 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服务器。