C#通过继电器接收PD132地感设备信号

场景模拟,为了捕捉到叉车是进门还是出门的动作,我们安装了两个地感设备,门前门后,进行接收两个地感信号的值,通过值接收的先后顺序可以知道是进门还是出门

设备:两个PD132加上地感线圈,一个网口的六路继电器

C#通过继电器接收PD132地感设备信号_第1张图片

设备线路连接

通过网口连接六路继电器,六路继电器和地感设备接线连接

X1   01 02 02 FE FF B9 98  绿灯亮 X2绿灯灭
X1   01 02 02 FF FF B8 08  灯全灭
X2   01 02 02 FF FF B8 08  灯全灭
X2  01 02 02 FD FF B9 68  绿灯亮 X1绿灯灭


地感接线方式:
220V输入电源
1火线
2零线
注意区分零线火线

控制器接线方式:
12V输入电源
根据说明接入正负极电源

信号输入:
X1-X4 4路
GND一路

电源线
蓝色-零线
棕色-火线
黄色-接地

软件层面:

持续发送数据

private void Recive()
{
    while (true)
    {
        fast_send1();
        Thread.Sleep(50);
    }
}
private void fast_send1()
{
    this.BeginInvoke(new Action(() =>
    {
        byte[] byte1 = new byte[8];
        int crc16;
        //byte1[0] = (byte)int.Parse(comboBox1.Text);
        byte1[0] = (byte)int.Parse("1");
        byte1[1] = 0x02;
        byte1[2] = 0x00;
        byte1[3] = 0x00;
        byte1[4] = 0x00;
        byte1[5] = 0x10;
        crc16 = modbus_crc(byte1, 6);
        byte1[6] = (byte)(crc16 & 0x00FF);
        byte1[7] = (byte)((crc16 >> 8) & 0xFF);

        readerCamera.ServerSendMessage(byte1);
    }), null);
}
private int modbus_crc(byte[] data, byte leng)
{
    int i, j;
    int crc16 = 0xFFFF;
    for (i = 0; i < leng; i++)
    {
        crc16 ^= data[i];
        for (j = 0; j < 8; j++)
        {
            if ((crc16 & 0x01) == 1)
            {
                crc16 = (crc16 >> 1) ^ 0xA001;

            }
            else
            {
                crc16 = crc16 >> 1;
            }
        }
    }
    return crc16;
}

连接六路继电器,持续发送采集信息,发送采集信息后进行接收反馈信号。
当闲置时,没有一个设备感应,收到的反馈信号数组为   01  02  02  FF  B8  08

当1号线圈感应到,收到的反馈信号数组为  01  02  02  FB  BA  C8

当2号线圈感应到,收到的反馈信号数组为  01  02  02  F7  BF  C8

你可能感兴趣的:(TCP,Serial通讯,接收继电器信号)