使用Sqlsugar实现项目

本文详细介绍了如何在C#项目中利用Sqlsugar库进行数据库操作,涵盖了连接配置、实体映射、CRUD操作以及 LINQ 查询的使用方法,旨在提升开发效率并简化数据访问层的代码。
摘要由CSDN通过智能技术生成
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
using System.Windows.Forms;
using xktComm.Common;
using xktComm.DataConvert;
using xktNodeSettings;
using xktNodeSettings.Node.Modbus;
using xktNodeSettings.Node.Variable;

namespace CMStestMdbus
{
   
    public partial class FrmMain : Form
    {
   
        public FrmMain()
        {
   
            InitializeComponent();
            modbusTCPList = ModbusTCPCFG.LoadXmlFile(settingPath);
            SqlSugarService.SetConnectionStr("Data Source=" + Application.StartupPath + str2);
            InitialInfo();
            Communication();

        }

        string str2 = "\\config\\ZgTestData.db;Pooling=true;FailIfMissing=false";
        //配置文件路径
        private string settingPath = Application.StartupPath + "\\settings\\settingsss.xml";

        InsertDataSQLite objInsert = new InsertDataSQLite(10000);//10秒1次

        private string ipAddress = "127.0.0.1";
        private int port = 502;

        //private CancellationTokenSource cts = new CancellationTokenSource();



        /// <summary>
        /// 通讯函数
        /// </summary>
        private void Communication()
        {
   
            if (modbusTCPList.Count>0)//有modbusTCP节点
            {
   
                foreach (var dev in modbusTCPList) //遍历modbusTCP节点
                {
   
                    if (dev.IsActive)
                    {
   
                        dev.cts = new CancellationTokenSource();
                        Task.Run(async () =>
                        {
   
                            while (!dev.cts.IsCancellationRequested)//默认是false
                            {
   
                                if (dev.IsConnected) //放解析
                                {
   
                                    CommonMethods.TCPisConnected = dev.IsConnected;
                                    foreach (var gp in dev.ModbusTCPGroupList)//遍历每一个组
                                    {
   
                                        if (gp.IsActive)
                                        {
   
                                            //读取数据
                                            byte[] res = null;
                                            //线圈存储区
                                            if (gp.StoreArea == ModbusStoreArea.输入线圈 || gp.StoreArea == ModbusStoreArea.输出线圈)
                                            {
   
                                                //读取
                                                switch (gp.StoreArea)
                                                {
   
                                                    case ModbusStoreArea.输出线圈:
                                                        res = dev.modtcp.ReadOutputStatus(gp.Start, gp.Length);
                                                        break;
                                                    case ModbusStoreArea.输入线圈:
                                                        res = dev.modtcp.ReadInputStatus(gp.Start, gp.Length);
                                                        break;
                                                    default:
                                                        break;
                                                }

                                                //解析

                                                //判断
                                                if (res != null && res.Length == ((gp.Length % 8 == 0) ? gp.Length / 8 : gp.Length / 8 + 1))
                                                {
   
                                                    dev.ErrorTimes = 0;
                                                    foreach (var variable in gp.varList)
                                                    {
   
                                                        //验证地址并解析地址
                                                        if (VerifyModbusAddress(true, variable.VarAddress, out int start, out int offset))
                                                        {
   
                                                            //真正的地址偏移
                                                            start -= gp.Start;

                                                            switch (variable.VarType)
                                                            {
   
                                                                case DataType.Bool:
                                                                    variable.Value = BitLib.GetBitArrayFromByteArray(res, false)[start];
                                                                    break;
                                                                default:
                                                                    break;
                                                            }

                                                            //包含就替换,否则就添加
                                                            if (CommonMethods.CurrentPLCValue.ContainsKey(variable.Name))
                                                            {
   
                                                                CommonMethods.CurrentPLCValue[variable.Name] = variable.Value;
                                                            }
                                                            else
                                                            {
   
                                                                CommonMethods.CurrentPLCValue.Add(variable.Name, variable.Value);
                                                            }

                                                        }
                                                    }

                                                }
                                                else
                                                {
   
                                                    dev.ErrorTimes++;

                                                    if (dev.ErrorTimes >= dev.MaxErrorTimes)
                                                    {
   
                                                        dev.IsConnected = false;
                                                        CommonMethods.TCPisConnected = dev.IsConnected;
                                                    }

                                                }
                                            }

                                            //寄存器存储区
                                            else
                                            {
   
                                                //读取
                                                switch (gp.StoreArea)
                                                {
   
                                                    case ModbusStoreArea.保持寄存器:
                                                        res = dev.modtcp.ReadKeepReg(gp.Start, gp.Length);
                                                        break;
                                                    case ModbusStoreArea.输入寄存器:
                                                        res = dev.modtcp.ReadInputReg(gp.Start, gp.Length);
                                                        break;
                                                    default:
                                                        break;
                                                }


                                                if (res != null && res.Length == gp.Length * 2)
                                                {
   
                                                    dev.ErrorTimes = 0;
                                                    foreach (var variable in gp.varList)
                                                    {
   
                                                        if (VerifyModbusAddress(false, variable.VarAddress, out int start, out int offset))
                                                        {
   
                                                            start -= gp.Start;

                                                            start *= 2;

                                                            //2开始读取50个寄存器

                                                            //第一个变量地址是2,索引是0   (2-2)*2
                                                            //第二个变量地址是4,索引是4   (4-2)*2
                                                            //第三个变量地址是6,索引是8   (6-2)*2


                                                            switch (variable.VarType)
                                                            {
   
                                                                case DataType.Bool:
                                                                    variable.Value = BitLib.GetBitFrom2ByteArray(res, start, offset, true)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

潘诺西亚的火山

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值