在做的时候找了很多资料,关于SCPI协议,说了很多,但是没我关心的。

看完通信协议的说明,我最大懵逼的一点就是到底是基于UDP还是TCP,翻了很多,一个都没讲。手册上端口号也不说明一下,参数设置里也没有端口设置或者查看的选选项。。。

结论:UDP可以,TCP不行,RS232应该可以,没去试。

机器的默认ip为192.168.0.123,端口号为7000

下面贴一下代码和中间遇到的几个坑

首先,.net6.0,之前没怎么用过串口功能,写的时候发现using System.IO.Ports;不能用,应该为了跨平台,没集成进去,只要用nuget搜索安装一下就好了。

还有,N3600的默认协议是modbus,需要设置一下,我拿到的N3600电源屏幕是坏的,只能看到一般,啥的看不到,痛苦面具….N3410的话不用设置,而且好像也不能用modbus

还有,改完电源的ip记得重启!!!

下面贴一点示例的代码:

using System.Net.Sockets;
using System.Net;
using System.Text;


namespace _6589jk_cn
{
    internal class N3410_SCPI
    {
        public static string CMD_通道选择 = "*IDN?";

        static void Main(string[] args)
        {
            string ip = "192.168.0.123"; 
            int 端口 = 7000;
            int 通道 = 1;
            using (UdpClient 连接目标udp = new UdpClient())
            {
                try
                {
                    连接目标udp.Client.ReceiveTimeout = 3000;
                    连接目标udp.Connect(ip, 端口);
                }
                catch (Exception) { throw; }

                Console.WriteLine($"发送消息:{"CMD_通道选择 + " " + 通道.ToString() + "\r\n"}");
                var temp = Encoding.ASCII.GetBytes("CMD_通道选择 + " " + 通道.ToString() + "\r\n");
                连接目标udp.Send(temp, temp.Length);


                var t = (IPEndPoint)连接目标udp.Client.RemoteEndPoint;
                var receive = 连接目标udp.Receive(ref t);
                var mes = Encoding.ASCII.GetString(receive);


                连接目标udp.Close();
                Console.WriteLine($"接收消息:{mes}");
            }    
        }
    }
}

嘛,总之几个注意点就是询问的话是INST:NSEL? 没有空格,设置的话 INST:NSEL 1 要加空格,手册上虽然看起来确实有空格,但是复制的时候就没有空格…就很迷惑

还有就是要加上\r\n换行

最后,吐槽一个点,感觉现在的厂家越来越不做人了,啥手册软件官网都不全,要手册软件还得打电话找客服

选型广告一应俱全,价格不写,开发资料不全,过期,甚至没有…

真的烦,哎,好久没用MCGS,现在竟然连MCGS的官网都没有软件下载了…

坏起来了

分类: 未分类

0 条评论

发表回复

Avatar placeholder

您的电子邮箱地址不会被公开。 必填项已用 * 标注