0313界面对接
This commit is contained in:
@ -61,24 +61,36 @@ class SimpleOPCUAServer:
|
||||
"""创建OPC UA变量"""
|
||||
# 创建变量时显式指定数据类型和初始值
|
||||
#上料斗
|
||||
# 上料斗
|
||||
self.upper_weight = self.upper.add_variable(self.namespace, "upper_weight", ua.Variant(0.0, ua.VariantType.Float))
|
||||
self.upper_is_arch = self.upper.add_variable(self.namespace, "upper_is_arch", ua.Variant(False, ua.VariantType.Boolean))
|
||||
self.upper_door_closed = self.upper.add_variable(self.namespace, "upper_door_closed", ua.Variant(False, ua.VariantType.Boolean))
|
||||
self.upper_door_closed = self.upper.add_variable(self.namespace, "upper_door_closed", ua.Variant(False, ua.VariantType.Int16))
|
||||
self.upper_volume = self.upper.add_variable(self.namespace, "upper_volume", ua.Variant(0.0, ua.VariantType.Float))
|
||||
self.upper_door_position = self.upper.add_variable(self.namespace, "upper_door_position", ua.Variant(0, ua.VariantType.Int16))
|
||||
|
||||
#下料斗
|
||||
# 下料斗
|
||||
self.lower_weight = self.lower.add_variable(self.namespace, "lower_weight", ua.Variant(0.0, ua.VariantType.Float))
|
||||
self.lower_is_arch = self.lower.add_variable(self.namespace, "lower_is_arch", ua.Variant(False, ua.VariantType.Boolean))
|
||||
self.lower_angle = self.lower.add_variable(self.namespace, "lower_angle", ua.Variant(0.0, ua.VariantType.Float))
|
||||
|
||||
#模具车
|
||||
# 模具车
|
||||
self.mould_finish_weight = self.mould.add_variable(self.namespace, "mould_finish_weight", ua.Variant(0.0, ua.VariantType.Float))
|
||||
self.mould_need_weight = self.mould.add_variable(self.namespace, "mould_need_weight", ua.Variant(0.0, ua.VariantType.Float))
|
||||
self.mould_finish_ratio = self.mould.add_variable(self.namespace, "mould_finish_ratio", ua.Variant(0.0, ua.VariantType.Float))
|
||||
|
||||
self.mould_frequency = self.mould.add_variable(self.namespace, "mould_frequency", ua.Variant(230, ua.VariantType.Int32))
|
||||
self.mould_vibrate_status = self.mould.add_variable(self.namespace, "mould_vibrate_status", ua.Variant(False, ua.VariantType.Boolean))
|
||||
self.feed_status = self.mould.add_variable(self.namespace, "feed_status", ua.Variant(0, ua.VariantType.Int16))
|
||||
self.pd_data=self.pd.add_variable(self.namespace, "pd_data", ua.Variant("", ua.VariantType.String))
|
||||
self.pd_notify=self.pd.add_variable(self.namespace, "pd_notify", ua.Variant("", ua.VariantType.String))
|
||||
self.pd_set_mode=self.pd.add_variable(self.namespace, "set_mode", ua.Variant(0, ua.VariantType.Int16))
|
||||
self.pd_set_volume=self.pd.add_variable(self.namespace, "set_volume", ua.Variant("", ua.VariantType.String))
|
||||
|
||||
# 系统对象
|
||||
self.sys_set_mode=self.sys.add_variable(self.namespace, "set_mode", ua.Variant(0, ua.VariantType.Int16))
|
||||
self.sys_segment_refresh=self.sys.add_variable(self.namespace, "segment_refresh", ua.Variant(0, ua.VariantType.Int16))
|
||||
self.sys_pd_refresh=self.sys.add_variable(self.namespace, "pd_refresh", ua.Variant(0, ua.VariantType.Int16))
|
||||
|
||||
# 在创建变量后立即设置可写权限(不需要等待服务器启动)
|
||||
self.upper_weight.set_writable(True)
|
||||
self.lower_weight.set_writable(True)
|
||||
@ -93,64 +105,19 @@ class SimpleOPCUAServer:
|
||||
self.mould_vibrate_status.set_writable(True)
|
||||
self.feed_status.set_writable(True)
|
||||
self.pd_data.set_writable(True)
|
||||
self.pd_notify.set_writable(True)
|
||||
self.pd_set_mode.set_writable(True)
|
||||
self.pd_set_volume.set_writable(True)
|
||||
self.sys_set_mode.set_writable(True)
|
||||
self.mould_finish_ratio.set_writable(True)
|
||||
self.sys_segment_refresh.set_writable(True)
|
||||
self.sys_pd_refresh.set_writable(True)
|
||||
self.lower_angle.set_writable(True)
|
||||
|
||||
print("[变量创建] 变量创建完成,AccessLevel权限已设置")
|
||||
|
||||
# 验证并打印当前的AccessLevel属性
|
||||
# try:
|
||||
# al = self.upper_weight.get_attribute(ua.AttributeIds.AccessLevel)
|
||||
# ual = self.upper_weight.get_attribute(ua.AttributeIds.UserAccessLevel)
|
||||
# print(f"[变量创建] upper_weight AccessLevel: {al.Value.Value}, UserAccessLevel: {ual.Value.Value}")
|
||||
|
||||
# al2 = self.lower_weight.get_attribute(ua.AttributeIds.AccessLevel)
|
||||
# ual2 = self.lower_weight.get_attribute(ua.AttributeIds.UserAccessLevel)
|
||||
# print(f"[变量创建] lower_weight AccessLevel: {al2.Value.Value}, UserAccessLevel: {ual2.Value.Value}")
|
||||
|
||||
# except Exception as e:
|
||||
# print(f"[变量创建] 获取权限属性失败: {e}")
|
||||
|
||||
def setup_variable_permissions(self):
|
||||
"""设置变量权限 - 在服务器启动后调用"""
|
||||
try:
|
||||
# 重新设置变量为可写,确保权限生效
|
||||
self.upper_weight.set_writable(True)
|
||||
self.lower_weight.set_writable(True)
|
||||
print("[权限设置] 变量权限已重新设置")
|
||||
|
||||
# 验证权限
|
||||
try:
|
||||
al = self.upper_weight.get_attribute(ua.AttributeIds.AccessLevel)
|
||||
ual = self.upper_weight.get_attribute(ua.AttributeIds.UserAccessLevel)
|
||||
print(f"[权限设置] upper_weight AccessLevel: {al.Value.Value}, UserAccessLevel: {ual.Value.Value}")
|
||||
except Exception as e:
|
||||
print(f"[权限设置] 验证失败: {e}")
|
||||
|
||||
except Exception as e:
|
||||
print(f"[权限设置] 设置权限失败: {e}")
|
||||
print("[权限设置] 尝试强制设置...")
|
||||
|
||||
|
||||
# def setup_state_listeners(self):
|
||||
# """设置状态监听器 - 事件驱动更新"""
|
||||
# if hasattr(self.state, 'state_updated'):
|
||||
# self.state.state_updated.connect(self.on_state_changed)
|
||||
# print("状态监听器已设置 - 事件驱动模式")
|
||||
|
||||
# def on_state_changed(self, property_name, value):
|
||||
# """状态变化时的回调函数"""
|
||||
# try:
|
||||
# # 根据属性名更新对应的OPC UA变量
|
||||
# if property_name == "upper_weight":
|
||||
# self.upper_weight.set_value(value)
|
||||
# elif property_name == "lower_weight":
|
||||
# self.lower_weight.set_value(value)
|
||||
|
||||
# # 可以在这里添加更多状态映射
|
||||
# print(f"状态更新: {property_name} = {value}")
|
||||
|
||||
# except Exception as e:
|
||||
# print(f"状态更新错误: {e}")
|
||||
print("[变量创建] 变量创建完成")
|
||||
|
||||
|
||||
def start(self):
|
||||
"""启动服务器"""
|
||||
try:
|
||||
|
||||
Reference in New Issue
Block a user