数码之家

 找回密码
 立即注册
搜索
查看: 624|回复: 8

[软件] 封贴

[复制链接]
发表于 2023-2-8 15:27:47 | 显示全部楼层 |阅读模式

爱科技、爱创意、爱折腾、爱极致,我们都是技术控

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 bh4qix 于 2023-2-10 16:02 编辑

封贴...............

发表于 2023-2-8 15:48:15 | 显示全部楼层
PLC方面的这个论坛还是比较少人搞吧。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-2-8 21:37:55 | 显示全部楼层
辉煌哥哥 发表于 2023-2-8 15:48
PLC方面的这个论坛还是比较少人搞吧。

以前开发项目,都是同事把 PLC 变量定义好,我只要写和 OPC 服务器通讯部分上位机程序,就可以控制整个设备。这两天折腾了一下 S7-300, 顺便定义个变量玩玩。
回复 支持 反对

使用道具 举报

发表于 2023-2-8 22:07:54 | 显示全部楼层
竟然是C#代码
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-2-9 07:52:46 | 显示全部楼层

OPC 服务器是装在上位机上的,C# 和 OPC 服务器通讯。
回复 支持 反对

使用道具 举报

发表于 2023-2-9 07:54:41 | 显示全部楼层
18912334956 发表于 2023-2-9 07:52
OPC 服务器是装在上位机上的,C# 和 OPC 服务器通讯。

定义PtcOPC的库文件在哪儿找的,能分享出来吗老哥
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-2-9 08:33:22 | 显示全部楼层
wangxiangtan2 发表于 2023-2-9 07:54
定义PtcOPC的库文件在哪儿找的,能分享出来吗老哥

using System;
using System.Windows.Media;
using System.ComponentModel;

namespace WPF_Controlador
{
    public class PtcOpc : INotifyPropertyChanged
    {
        public event PropertyChangedEventHandler PropertyChanged;

        public void Notify(string propName)
        {
            if (PropertyChanged != null)
            {
                PropertyChanged(this, new PropertyChangedEventArgs(propName));
            }
        }

        public PtcOpc(string groupId, string channelName)
        {
            GroupId = groupId;
            ChannelName = channelName;

            switch(groupId)
            {
                case "01":
                    GroupName = "主试验台";
                    break;
                case "02":
                    GroupName = "副试验台";
                    break;
                case "03":
                    GroupName = "燃油供油系统";
                    break;
                case "04":
                    GroupName = "介质高低温系统";
                    break;
                case "05":
                    GroupName = "环境高低温系统";
                    break;
                case "06":
                    GroupName = "液压泵站";
                    break;
            }

            IsShown = true;

            MediaColor = Colors.Blue;

            RecordIsNeeded = true;
            DefaultValue = "";
        }

        public string GroupId { get; set; }
        public string GroupName { get; set; }

        public string ChannelName { get; set; }

        public string Name { get; set; }
        public string Address { get; set; }

        public string Description { get; set; }

        public EnumOpcType DataType { get; set; }
        public EnumOpcAccess Access { get; set; }

        private string _RawValue;
        public string RawValue
        {
            get { return _RawValue; }
            set
            {
                _RawValue = value;
                Notify("RawValue");

                switch (DataType)
                {
                    case EnumOpcType.Bool:
                        if (RawValue == "True")
                        {
                            BoolValue = true;
                        }
                        else
                        {
                            BoolValue = false;
                        }
                        break;
                    case EnumOpcType.Float:
                        FloatValue = Convert.ToSingle(RawValue);
                        break;
                    case EnumOpcType.Int:
                        IntValue = Convert.ToInt32(RawValue);
                        break;
                    case EnumOpcType.Byte:
                        ByteValue = Convert.ToByte(RawValue);
                        break;
                }
            }
        }

        private bool _BoolValue;
        public bool BoolValue
        {
            get { return _BoolValue; }
            set
            {
                _BoolValue = value;
                Notify("BoolValue");
            }
        }

        private float _FloatValue;
        public float FloatValue
        {
            get { return _FloatValue; }
            set
            {
                _FloatValue = value;
                Notify("FloatValue");
            }
        }

        private int _IntValue;
        public int IntValue
        {
            get { return _IntValue; }
            set
            {
                _IntValue = value;
                Notify("IntValue");
            }
        }

        private byte _ByteValue;
        public byte ByteValue
        {
            get { return _ByteValue; }
            set
            {
                _ByteValue = value;
                Notify("ByteValue");
            }
        }


        public string Url
        {
            get
            {
                return @"opc://localhost/National Instruments.NIOPCServers.V5/" + ChannelName + ".Device1." + GroupId + "." + Name;
            }
        }

        //------------------------------------------------------------------------------------

        private Color _MediaColor;
        public Color MediaColor
        {
            get { return _MediaColor; }
            set
            {
                _MediaColor = value;
                Notify("MediaColor");
            }
        }

        private bool _IsShown;
        public bool IsShown
        {
            get { return _IsShown; }
            set
            {
                _IsShown = value;
                Notify("IsShown");
            }
        }

        //------------------------------------------------------------------------------------

        public int IndexNo { get; set; }

        private bool _RecordIsNeeded;
        public bool RecordIsNeeded
        {
            get { return _RecordIsNeeded; }
            set
            {
                _RecordIsNeeded = value;
                Notify("RecordIsNeeded");
            }
        }


        private string _DefaultValue;
        public string DefaultValue
        {
            get { return _DefaultValue; }
            set
            {
                _DefaultValue = value;
                Notify("DefaultValue");
            }
        }

        public Brush Stroke
        {
            get
            {
                var c = new BrushConverter();
                return (SolidColorBrush)c.ConvertFromString(_MediaColor.ToString());
            }
        }

    }
}
以上是项目中完整的 PtcOpc 类定义代码,颜色等属性,是为 WPF 界面控件绑定服务的。还有 event ,用户程序可以注册该事件,OPC 变量发生变化时,用户可收到通知。有不清楚的,随时给我信息。谢谢!
回复 支持 反对

使用道具 举报

发表于 2023-2-9 11:24:43 | 显示全部楼层
18912334956 发表于 2023-2-9 08:33
using System;
using System.Windows.Media;
using System.ComponentModel;

无私奉献啊老哥~
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-2-9 11:29:44 | 显示全部楼层

能看懂的人是缘分。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

APP|手机版|小黑屋|关于我们|联系我们|法律条款|技术知识分享平台

闽公网安备35020502000485号

闽ICP备2021002735号-2

GMT+8, 2025-5-3 03:31 , Processed in 0.140401 second(s), 11 queries , Redis On.

Powered by Discuz!

© 2006-2025 MyDigit.Net

快速回复 返回顶部 返回列表