登录
首页 » Others » C#和PLC利用modbus通信实例

C#和PLC利用modbus通信实例

于 2020-12-05 发布
0 419
下载积分: 1 下载次数: 4

代码说明:

最近公司有一项目,就是采集客户设备在生产过程中的数据,并保存到SQL数据库中。硬件上采用PLC,软件使用C#编写上位机程序。本来是想利用TCP/IP协议,但后来发现公司采购的PLC属于低端产品,需要OPC服务,为了简便,所以就采用modbus协议。

下载说明:请别用迅雷下载,失败请重下,重下不扣分!

发表评论

0 个回复

  • 漂亮的GridView样式
    Here is another gridview theme I have been playing around with this weekend based on a general CNET GameSpot style. The CSS for the gridview has been put into its own file for this series of posts, so that I can change the look of a gridview quickly without changing the class names that have been as
    2020-12-05下载
    积分:1
  • 8位ALU运算器(VHDL语言)
    (1)按照实验要求设计简单ALU,能执行8种操作,分别为:1)加、减、增1、减1等4种8位算术运算;2)与、或、非、异或等4种8位逻辑运算。实现上,可以用一位M 作为进行算术运算或逻辑运算的控制位,M=0 时进行算术运算,M=1 时进行逻辑运算。另外用2位来表示4种操作。(2)实现一些基本的PSW标志位:1)进位/借位的输出标志位C;2) 运算结果为零的输出标志位Z;3) 运算结果为溢出的输出标志位V;4) 运算结果为负数的输出标志位N。(3)加减必须用最基本的1位全加器fa作为基础,可以采用直接由8次1位运算得到8位的操作;也可以先构造4位加法器,再进一步实现8位加减运
    2020-12-06下载
    积分:1
  • 极大似然估计(MLE)
    文中将极大似然估计方法讲得很详细,给出了极大似然的原理、算法、程序实现以及应用实例。
    2020-05-31下载
    积分:1
  • 基础水文数据库V3.0
    增加了部分字段
    2020-12-04下载
    积分:1
  • 2018最新weblogic反序列化漏洞补丁包
    在p27395085_1036_Generic补丁的基础上再打上27453773_1036_Gener,解决CVE-2016-0638、CVE-2016-3510、CVE-2017-3248、CVE-2018-2628
    2020-12-04下载
    积分:1
  • 模拟退火算法解决TSP问题MATLAB代码
    这段代码使用了模拟退火的思想解决TSP问题。在这个仿真实验中解决了自定义的20个城市的TSP问题,在设定合适参数后每次的运行中都能得到一个比较理想的结果。Main.m文件是程序入口。Data_file.m文件设置自定义的城市数据。Swapcities.m文件中包含随机交换两个城市的函数。Plotcities.m文件中包含将城市数据在二维平面上表示的函数。Distance.m文件中包含计算城市距离的函数,用来解决旅行商问题。Simulatedannealing.m文件中包含模拟退火算法。这部分是程序的主体,我参考了许多讨论关于模拟退火算法方面的论文。
    2021-05-06下载
    积分:1
  • STM32+MQTT+SIM800使用AT指令实现
    STM32+MQTT+SIM800使用AT指令实现;通过自建服务器测试完成,支持连接、订阅、发布、心跳保持;全部使用AT指令控制;
    2020-12-05下载
    积分:1
  • 内存乒乓缓存机制和消息分发机制的C代码实现
    用C代码实现乒乓内存缓冲机制,具体实用价值,帮助您提高内存响应速度与及时数据的处理。unsigned long writeunsigned long greadunsigned long overflowST TWTMSG QUEUE:/ Helper macros for accessing Msg queues. *#define tWt QUEUE EMPty(a)(((g->write==(q)->gread)? 1: 0)#define twt_ QUeUe full(a)(((((q)->qwrite +1% TIMEWEIGHT TASKQUEUE SIZED)==(q)->gread)?1: 0)米 generate a Msg entity*正常返回消息体的指针,异常返回NULLT TWTMSG* generateMsg(tT-TWTMSG* pmSg=nULL,if(NULL =-(ptMsg malloc(sizeof(T TWTMSG)))return NULL;memset(ptMsg, 0, sizeof(T TWTMSG)return pmSg;destroy a Msgvoid destroy Msg(t TWTMSG ptMsgif(NULL ptMsg->pfDestroyMsg)pt Msg->pfDestroy Msg(ptMsg->pvMsg)if (NULL != pt Msg)free(pmSgfree a Msg Queuevoid freeTWTMsg Que(T TWTMSG QUEUE* ptMsgQif(NULL =ptMsg Afree(ptMsg Q);Init a Msg QT TWTMSG QUEUE* initTWTMsg QueoT TWTMSG QUEUE pmSg Q= NULlif (NULL ==(ptMsgQ malloc(sizeof(T_ TWTMSG QUeue)goto ErrRetmemset(ptMsgQ, 0, sizeof(T TWTMSG QUEUE))return pmSg Q;Errretprintf( initTWTMsg Que Fail! ")freeTWTMsgQue(ptMsg Q)return nullPop a pvMsg packet from a msg packet queues param g is the packet queue from which to pop the pbuf@return pointer to pvMsg packet if available, NULl otherwiseT TWTMSG* TWTMsg Get(T_ TWTMSG QUEUE aT TWTMSG*//*加锁if(TWT_ QUEUE_ EMPTY(a))iReturn a NUll pointer if the queue is emptypmSg=NULL;else is The queue is not empty so return the next frame from itand adjust the read pointer accordinglypmSg=g->pvMsglq >greadg->gread =((q->gread +1)% TIMEWEIGHT_TASKQUEUE_ SIZE)/*解锁return(pmSg);Push a pmSg packet onto a pvMsg packet queue@param p is the pmsg to push onto the packet queue@param g is the packet queue.W @return 0 if successful, -1 if q is fullnt TWTMsg Send(T tWTMSg*p, T TWTMSG QUEUE *qint ret/if(!TWT_ QUEUE FULL(al)iThe queue isn t full so we add the new frame at the currentw write position and move the write pointer.g->pvMsgla->write]=pg- >write =((q->qwrite+1)% TIMEWEIGHT TASKQUEUE SIZE;ret =oThe stack is full so we are throwing away this value. Keep trackof the number of times this happensg->overflow++ret =-1://*解锁return(ret)**米**米来米***来米*半米*米*半米*米求***半*米米求半**米求半**半求半和*米*//消息分发机制//*算法是//*正常返回0,出错返回-1水米米******水*米*水**米*半*水米米冰半**水水*水米米半米冰水*米水水*水*米水水extern int RecToFile MsgProc(T_ MSG_ REC2 FILE* ptMsg);int DispatchMsg(T TWTMSG *ptMsgitif(NULl = ptMsg goto ErrRet/*dispatch msg*/switch(ptMsg->en Msg Type)case TWT PINgPoNgBuff recRecTo File Msg Procl(TMSG_REC2FE) (pmSg->pMsg);/*处理消息*/destroy Msg( pmSg;/*消毁消息breakdefault.printf("Dispatch Msg Msgtype Error! n")break.return 0ErrRetprintf("Dispatch Msg Fail! ";return-1./*buff size*/#defineP| NGPONG_ BUFF BSIZE0X20000//10*1024*1024/*10M*/*ping pong buff*///chargacPINGBUFF[PINGPONG BUFF BSIZE]; /* Ping Buff*///chargacPONGBUFF[PINGPONG_ BUFF BSIZE] *Pong Buff*/水米米*********米*水**米*半*水米米水**冰水*水米米半半水半米冰水*米水水*水*米米//*释放 ping pong buff/必然成功//*无返回木***木*水****本**水*水水*水****本水**水水****水水***本***米*水void Destroy Ping Pong Butt(T PINGPONGBUFF USE DES ptPing Pong Butt)nLoopif (NULL = pt Ping pong buffreturnfor (nLoop=0; nLooptIng BuffUse[nLoop]. pcHeadAddr)free(ptPing Pong ->t Ping BuffUse[nLoop]. pcHeadAddr)free(pt Ping pong Buff)/初始化 ping pong buff返回 pign pong buff的描述指针//*正常返回0,出错返回-1水水水水水水水水水木水木水水水水水木水木水水水水水水水水本水水水水水水水水水本水水水水水水水水水水水水水T PINGPONGBUFF USE DES InitPing Pong Buff(unsigned int n BuffSizeT PINGPONGBUFF USE DES* ptBuffDes=NULLintnLoop/*获取buf描述*if NULL==(ptBuffDes=malloc(sizeof(T PINGPONGBUFF USE DES))))goto ErrRetmemset(pt BuffDes, 0, sizeof(T_PINGPONGBUFF USE_ DES));/*分别初始化ping和pong*/for(nLoop=0; nLooptIng BuffUsenLoop pcHeadAddr =malloc n BuffSize))goto Err Ret;ptBuffDes->tIng BuffUselnLoop] nBuffSize nBuffsizeptBuffDes->tPing BuffUse[nLoop]. oFfsetptBuffDes->tPing BuffUsenLoop) eUseStatus-=BUFF WRITEABLE;pt BuffDes->eCurUseIDBUFF PINGreturn pt BuffDesErrretprintf("lnitPing Pong Buff Fail!");DestroyIng Pong Buff(pt BuffDes)turn null平**米**米*米***来米米*米*米*半米*米米米来*半米平**米米求*来*半求半来*米求*和*米*/*Reset ping pong buff//*正常返回0,出错返回-1米米米米水冰米*米米水**米米冰*米水米米米米水米水*水米米来米米x米来米米水冰来来宋来水米来米来冰#define ResetBuffUse(ptBuffuse)pt BuffUse->oFfset0pt BuffUse->eUseStatus BUFF WRITEABLEgenerate a file rec msg*正常返回消息体的指针,异常返回NULLT_MSG_REC2lGK SenFRMSB(T_BUFF_USE_DES *ptBuffUse, REC_FILE_DESLIST *ptFileListRT MSG REC2FILE KE* ptRFMsg= NULL;if(NULL ==(ptRFMsg malloc(sizeof(T_ MSG REC2 FILE)return nUllptRFMsg- >pt BuffUse pt BuffUseptRFMsg->pt Filelist ptFilelist;return ptRFMsg
    2020-12-03下载
    积分:1
  • KB4474419+KB4490628(X64)+补丁包下载地址.zip
    【实例简介】在重装window7较早版本的时候,会因为必要补丁包的缺少导致一些问题。我遇到的问题是在KB4474419+KB4490628(X64)两个补丁包缺少的情况下,安装独显的驱动会提示无法继续安装,该文件压缩包包含两个补丁包和补丁包下载地址,补丁包解压即可用,经过测试两个补丁包没有问题。
    2021-11-01 00:33:59下载
    积分:1
  • 信号互相关仿真,计算时延差
    利用互相关计算两个信号的时延差,附程序注释。
    2020-12-03下载
    积分:1
  • 696516资源总数
  • 106914会员总数
  • 0今日下载