根据欧姆龙技术论坛提供的590.pdf里一个在unix环境下编写的c++程序,我把它改成了支持windows,但是读写PLC数据不知道怎么实现,数据不知道读到那里去了,写数据的格式不知道是什么?请教各位兄弟们!

解决方案 »

  1.   

    自己UP,汗!
    我写了个vb例子,我把自己改的哪个vc写plc寄存器中DM区域内容的命令搬到vb里面,vb项目运行后可以修改DM里的值,为什么我的VC项目里这条命令就不行呢??
      

  2.   

    #include <Winsock2.h>
    #include <stdio.h>
    #include <stdlib.h>void main()
    {
    WORD wVersionRequested;
    WSADATA wsaData;
    int err;

    wVersionRequested = MAKEWORD( 1, 1 );

    err = WSAStartup( wVersionRequested, &wsaData );
    if ( err != 0 ) {
    return;
    }
    if ( LOBYTE( wsaData.wVersion ) != 1 ||
            HIBYTE( wsaData.wVersion ) != 1 ) {
    WSACleanup( );
    return; 
    }
    //SOCKET sockClient=socket(AF_INET,SOCK_STREAM, 0);
    SOCKET sockClient=socket(AF_INET,SOCK_STREAM, IPPROTO_TCP);//IPPROTO_TCP
    SOCKADDR_IN addrSrv;
    addrSrv.sin_addr.S_un.S_addr=inet_addr("172.17.109.19");
    addrSrv.sin_family=AF_INET;
    addrSrv.sin_port=htons(9600); int result = connect(sockClient,(SOCKADDR*)&addrSrv,sizeof(SOCKADDR)); //8000020013000011001301028227100000019911
    BYTE chSendData[20];
    chSendData[0] = 0x80;
    chSendData[1] = 0x00;
    chSendData[2] = 0x02;
    chSendData[3] = 0x00;
    chSendData[4] = 0x13;
    chSendData[5] = 0x00; chSendData[6] = 0x00;
    chSendData[7] = 0x11;
    chSendData[8] = 0x00;
    chSendData[9] = 0x13;
    chSendData[10] = 0x01; chSendData[11] = 0x02;
    chSendData[12] = 0x82;
    chSendData[13] = 0x27;
    chSendData[14] = 0x10;
    chSendData[15] = 0x00; chSendData[16] = 0x00;
    chSendData[17] = 0x01;
    chSendData[18] = 0x99;
    chSendData[19] = 0x11; int  nLen = send(sockClient, (const char *)chSendData, 20, 0); char recvBuf[100];
    memset(recvBuf, 0, 100);
    int nLenRecv = recv(sockClient,recvBuf,100,0);
    //46 49 4E 53 00 00 00 10 00 00 00 01
    //00 00 00 01 00 01 99 11 00 00 00 13
    printf("%s\n",recvBuf); closesocket(sockClient);
    WSACleanup(); system("pause");
    }
    这个是测试程序,运行后弹出的提示是:FINS请按任意键继续...
      

  3.   

    上面的程序有谁知道错在那里吗?为什么不能修改PLC里DM的值
      

  4.   

    呵呵!!以前做过的通过网络和串口往PLC写都可以的
    现在都忘了
    你可以看欧姆龙的手册啊!!
    我记得是好像是英文的可以看得懂的!!
      

  5.   

    是PLC硬件的问题,要首先利用cx-programmer工具把程序写到PLC里面去,UDP通信搞定了,可以读写数据了,现在就是换用TCP通信发放实现起来麻烦,不知道那里出了问题.
      

  6.   


    最近在研究欧姆龙PLC的通讯,主要是基于FINS的TCP或者UDP方式,想咨询一下,怎么来监听PLC里面的数据变化?哪位有这方面的Demo啊?meteormeng,有基于FINS的TCP或者UDP方式通讯的Demo 吗??