2021-6-17 plc连接

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using HslCommunication;
using HslCommunication.ModBus;
using HslCommunication.Profinet.Omron;

namespace BatteryDetectWorkA
{
    public class HslPLC
    {
        private OmronFinsNet omronFinsNet;
        private bool isConnect = false;

        public bool connection()
        {
            isConnect = true;
            try
            {
                omronFinsNet = new OmronFinsNet(Config.App.PLCIP, int.Parse(Config.App.PLCPort));
                // omronFinsNet.LogNet = new HslCommunication.LogNet.LogNetSingle("omron.log.txt");
                omronFinsNet.SA1 = (byte)Convert.ToInt16(Config.App.PCNet); //0x0D; // PC网络号,PC的IP地址的最后一个数
                omronFinsNet.DA1 = (byte)Convert.ToInt16(Config.App.PLCNet);// 0x10; // PLC网络号,PLC的IP地址的最后一个数
                omronFinsNet.DA2 = 0x00; // PLC单元号,通常为0

                OperateResult connect = omronFinsNet.ConnectServer();
                if (connect.IsSuccess)
                {
                    isConnect = true;
                
                }
                else
                {
                    MessageBox.Show("PLC连接失败");
                    isConnect = false;
                }
            }
            catch (Exception ex)
            {
                isConnect = false;
            }
            return isConnect;
        }

        public bool GetPlcState()
        {
            return isConnect;
        }
        public bool isConnected()
        {
            if (isConnect) return true;
            OperateResult connect = omronFinsNet.ConnectServer();
            isConnect = connect.IsSuccess;
            return isConnect;
        }

        public void close()
        {
            omronFinsNet.ConnectClose();
            isConnect = false;
        }
        public string readString(string add)
        {
            if (!isConnect) return "PLC未连接";
            var ret = omronFinsNet.ReadString(add, 20);// 读取D100-D104组成的ASCII字符串数据
            isConnect = ret.IsSuccess;
            if (ret.IsSuccess)
            {
                byte[] returnBytes = Encoding.Default.GetBytes(ret.Content);
                for (int i = 0; i < returnBytes.Length; i = i + 2)
                {
                    byte buffer = returnBytes[i];
                    returnBytes[i] = returnBytes[i + 1];
                    returnBytes[i + 1] = buffer;
                }
                return Encoding.ASCII.GetString(returnBytes, 0, returnBytes.Length).Replace('\0', ' ').Trim();
            }
            else
            {
                return (ret.Message);
            }

        }

        public int readInt(string add)
        {
            if (!isConnect) return -99;
            var ret = omronFinsNet.ReadInt32(add);
            isConnect = ret.IsSuccess;
            if (ret.IsSuccess)
                return ret.Content;
            else
                return -99;
        }

        public bool writeString(string add, string v)
        {
            if (!isConnect) return false;
            omronFinsNet.Write(add, "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0");
            string strTemp = "";
            if (v.Length % 2 == 1)
                strTemp = v + "\0";
            else
                strTemp = v;
            byte[] writeByte = Encoding.Default.GetBytes(strTemp);
            for (int i = 0; i < writeByte.Length; i = i + 2)
            {
                byte buffer = writeByte[i];
                writeByte[i] = writeByte[i + 1];
                writeByte[i + 1] = buffer;
            }
            strTemp = Encoding.ASCII.GetString(writeByte, 0, writeByte.Length)/*.Replace('\0', ' ').Trim()*/;
            OperateResult result = omronFinsNet.Write(add, strTemp);// 写ASCII字符串
            return result.IsSuccess;
        }

        public bool writeInt(string add, int v)
        {
            if (!isConnect) return false;
            OperateResult result = omronFinsNet.Write(add, v);
            return result.IsSuccess;
        }
    }


    //Addr950    登录2/注销3
    //Addr952    账号     1操作员  2管理员  3工程师 
    //Addr962    密码     1(49),2(50),3(51)

    public class TourchHsl
    {
        private ModbusTcpNet modbusTcpNet;
        private bool isConnect = false;
        public bool connection()
        {
            isConnect = true;
            try
            {
                modbusTcpNet = new ModbusTcpNet(Config.App.TourchIp, Config.App.TourchPort,Convert.ToByte("1"));
                modbusTcpNet.AddressStartWithZero = Config.App.StartAddr;
                //modbusTcpNet = new ModbusTcpNet("127.0.0.1", Config.App.TourchPort);
                OperateResult connect = modbusTcpNet.ConnectServer();
                if (connect.IsSuccess)
                {
                    isConnect = true;
                   
                }
                else
                {
                    MessageBox.Show("触摸屏连接失败!");
                    isConnect = false;
                }
            }
            catch (Exception ex)
            {
                isConnect = false;
            }
            return isConnect;
        }
        public bool GetTourchState()
        {
            return isConnect;
        }

        public bool isConnected()
        {
            if (isConnect) return true;
            OperateResult connect = modbusTcpNet.ConnectServer();
            isConnect = connect.IsSuccess;
            return isConnect;
        }
        public bool writeInt(string add, ushort v)
        {
            if (!isConnect) return false;
            OperateResult result = modbusTcpNet.Write(add, v);
            return result.IsSuccess;
        }

        public bool writeCoil(string add, bool v)
        {
            if (!isConnect) return false;
            OperateResult result = modbusTcpNet.WriteCoil(add, v);
            return result.IsSuccess;
        }

        public int readInt16(string add)
        {
            if (!isConnect) return -99;
            var ret = modbusTcpNet.ReadInt16(add);
            isConnect = ret.IsSuccess;
            if (ret.IsSuccess)
                return ret.Content;
            else
                return -99;
        }
        public int readInt32(string add)
        {
            if (!isConnect) return -99;
            var ret = modbusTcpNet.ReadInt32(add);
            isConnect = ret.IsSuccess;
            if (ret.IsSuccess)
                return ret.Content;
            else
                return -99;
        }
        

    }
}

 

posted @ 2021-06-17 16:19  月长生  阅读(125)  评论(0)    收藏  举报