首页 > 其他分享 >ModbusTCP从站建立

ModbusTCP从站建立

时间:2024-02-27 23:58:11浏览次数:28  
标签:case 建立 32 16 break PLC ModbusDataType ModbusTCP

背景

  • 根据网络安全策略要求,无法程序作为主站进行PLC的读取
    • 解决方案:PLC作为主站,程序作为从站进行被动的数据火获取,后续根据数据变化值进行建立

解决方案

  • 使用NModbus4组件构建从站
  • 在同个程序中开启不同的端口区分不同的PLC信号写入
从站开启监听代码
    IPEndPoint iPEndPoint = new IPEndPoint(IPAddress.Parse(ModbusSlaveIP), int.Parse(InCVModbusSlavePort));
    TcpListener tcpListener = new TcpListener(iPEndPoint);
	
	 m_modbusInSlave = ModbusTcpSlave.CreateTcp(0x02, tcpListener);

                // 32 32 16 16分别代表不同地址的可以存储的位数,可自行调整
      m_modbusInSlave.DataStore = DataStoreFactory.CreateDefaultDataStore(32, 32, 16, 16);

		// 发生数据写入时的事件触发
		// 如值从0变为1执行对应的业务逻辑
      m_modbusInSlave.DataStore.DataStoreWrittenTo += new EventHandler<DataStoreEventArgs>(InCVHandle_wirte_data);
值修改事件触发
 /// <summary>
        /// 
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void OutCVHandle_wirte_data(object sender, DataStoreEventArgs e)
        {
//根据不同的寄存器类型触发修改事件
            switch (e.ModbusDataType)
            {
                case ModbusDataType.HoldingRegister:
                    {
                        update_holdingRegister();
                    }
                    break;
                case ModbusDataType.InputRegister:
                    {
                        //      update_inputRegister();
                    }
                    break;
                case ModbusDataType.Coil:
                    {

                    }
                    break;
                case ModbusDataType.Input:
                    {
                        //    update_input();
                    }
                    break;
                default:
                    break;
            }


        }

注意事项

  • 从站id需要唯一
  • 开启监听的IP需要为0.0.0.0,
  • 代码写入和读写的时候,需要区分从站地址

标签:case,建立,32,16,break,PLC,ModbusDataType,ModbusTCP
From: https://www.cnblogs.com/Anthoney/p/18036594

相关文章

  • MSSQL 建立链接服务器
     --建立Oracle数据库链接服务器EXECsp_addlinkedserver@server=N'POS',--要创建的链接服务器别名@srvproduct=N'Oracle',--产品名称@provider=N'OraOLEDB.Oracle',--OLEDB驱动名称@datasrc=N'192.168.1.240/gbpos'--数据源oracle"ora10g&qu......
  • 【深度学习】神经网络的建立与推理
    目录神经网络(neuralnetwork)的结构神经元中常用的激活函数(activationfunction)神经网络的表示神经网络的代码实现使用已学习完毕的神经网络进行推理(inference)源代码文件请点击此处!神经网络(neuralnetwork)的结构输入层(inputlayer):第0层(layer0)隐藏层(hiddenlayer):第1层(lay......
  • [20240219]建立完善sql_idx.sh脚本.txt
    [20240219]建立完善sql_idx.sh脚本.txt--//再次遇到sql_id的计算问题,该语句已经dba_hist相关视图无法查询.--//w3wp.exe程序里面的sql语句脚本带有^M符号(dos文本格式),执行时并不过滤.--//而我的计算sql_id脚本计算时过滤掉^M符号,导致计算错误.--//我修改完善如下:(注里面的^M......
  • 如何建立FTP站点
    如何建立FTP站点zbt发布:2023-11-0311:04:20原创1397人浏览过 通过选择ftp服务器、安装ftp服务软件、配置ssl证书、设置ftp站点等操作来建立ftp站点。 FTP(FileTransferProtocol,文件传输协议)是一种用于在Internet上进行文件传输的标准协议。FTP......
  • 开源免费的专注于建立大型个人知识库推荐-Trilium Notes
        TriliumNotes是一个分层的笔记应用程序,专注于建立大型个人知识库。支持相当丰富的markdown,包括mermaid和latex,而且即时渲染,和typora一样。支持代码类型的笔记,有高亮。 Trilium与其说是笔记软件,不如说是个人wiki。个人知识数据库、收藏夹、代码块、手账、思......
  • 目录遍历(建立目录树,记录目录属性)仅适用于小样本
    directory.h#pragmaonce#include<windows.h>#include<tchar.h>#include<stdio.h>#include<tchar.h>#include<string>#include<stack>#include<codecvt>#include<vector>#defineFILE_NOT_IN_NODE-1classDirTreeNode{p......
  • 剑指全球第一大癌症,中国学者建立乳腺癌预后评分系统 MIRS
    世界卫生组织国际癌症研究机构(IARC)发布的2020年全球最新癌症负担数据显示,2020年全世界乳腺癌新发病例数的快速增长达226万,首次正式取代肺癌成为全球第一大癌症。其中,我国女性新发乳腺癌病例数42万例,位居第一,远超女性其他癌症类型。由于具有高并发率和高死亡率的特点,乳......
  • 六大方法助您建立起完整的销售管理流程
    实施精细化销售过程管理的主要步骤包括:一、明确销售目标;二、建立客户数据库;三、制定销售策略;四、优化销售流程;五、建立绩效考核体系;六、持续改进和创新。通过这些步骤,企业可以提高销售效率,拓展市场份额,实现可持续发展。一、明确销售目标实施精细化销售过程管理的第一步是明确销......
  • 根据筛法规则对整数分类,建立树状结构
    筛法目前一般用来找整数序列中的素数,不是素数的元素被丢掉了。如果仅把筛法当成一种分类规则,把筛掉的元素和留下的元素算作不同的分类,并用每一类中的最小元素递归地执行筛法,那么能把所有正整数保留下来,并建立一个树状结构。例如,初始集合是正整数集,根据模最小元素p是否为0,可把所有......
  • 建立sftp连接
    使用端口进行连接sftp-Premote_portremote_user@remote_host从远程服务器拉取文件get/path/remote_file从远程服务器拉取文件夹到当前目录get-r/path/remote_file./上传本地文件到服务器putlocal_file查看远程服务器目录内容ls查看本地目录内容......