> 백엔드 개발 > C#.Net 튜토리얼 > 루프 제어 인스턴스를 형성하기 위해 터미널 제어 센서 또는 장치를 공유합니다.

루프 제어 인스턴스를 형성하기 위해 터미널 제어 센서 또는 장치를 공유합니다.

零下一度
풀어 주다: 2017-06-23 15:58:22
원래의
1870명이 탐색했습니다.

21.1 개요

ServerSuperIO의 이전 작업은 점차적으로 서비스 커넥터 및 장치 드라이버 커넥터의 개발 및 적용과 같은 루프 제어 또는 캐스케이드 제어 형성의 기반을 마련했습니다. 즉, 클라우드는 현장이나 모니터링 지점의 센서를 제어하고, 앱이나 기타 단말은 센서를 제어하며, 센서에서 수집한 데이터를 기반으로 다른 센서를 제어하기 위해 다양한 형태로 명령을 내린다. .

다음은 클라우드, 앱 또는 기타 터미널이 센서 장치를 제어하는 ​​방법을 설명합니다(센서 제어 센서는 유사합니다. 12. 서비스 인터페이스 개발 및 클라우드와의 양방향 상호 작용). 통신 프로토콜에 따르면 구조화된 솔루션은 해당 기능을 완료하는 데 너무 많은 코드가 필요하지 않습니다. 효과는 다음과 같습니다.

21.2 구조 다이어그램

제어 터미널은 제어 명령을 시작하고 ServerSuperIO 서비스 인터페이스를 사용하여 간단한 프록시 서비스를 개발하며 서비스 커넥터 IServiceConnector를 통해 장치 드라이버와 상호 작용합니다. 인터페이스를 통해 디바이스 드라이버는 제어 명령이 디바이스나 센서로 전송되고, 컨트롤이 반환하는 확인 메시지를 기다린 후 원래 경로를 통해 제어 터미널로 돌아옵니다.

21.3 통신 프로토콜

MQTT 프로토콜이 왜 다른 장치 및 센서의 프로토콜과 호환될 수 있는지 묻는 사람들이 있습니다. 중국의 실제 상황에 따르면, 경제 여건이 좋지 않은 경우 기업이 원래 하드웨어 장비를 교체하는 데 투자하는 것은 통일된 표준 수준에 도달할 수 없다는 것이 분명합니다. 또한 프로토콜 독립성을 달성하기 위한 ServerSuperIO 설계 원칙을 따르지 않으며 모든 표준 또는 비표준 프로토콜이 통합될 수 있습니다. 강을 건너려면 다리를 수리하고, 로프웨이를 설치하고, 배를 정리해야 합니다... 어떻게 강을 건너는지는 당신의 몫입니다.

누군가 ServerSuperIO가 어떤 프로토콜과 통합되어 있는지 물었습니다. 대답은 위에서 주어졌으며, 제가 말하고 싶은 것은 어떤 프레임워크도 모든 문제를 해결할 수 없다는 것입니다. 반대 관점에서 생각하면, 구성처럼 프로토콜이 추가되면 기업은 P2P 교환에 얼마나 많은 가치를 부여하기를 원하므로 프로토콜 드라이버는 모든 사람이 스스로 작성하도록 남겨집니다.

우리가 시연한 프로토콜은 다음과 같습니다.

21.4 제어 터미널

제어 터미널에는 여러 유형이 포함됩니다. 클라우드는 하위 수준에 제어 명령을 보내고, 앱 또는 PC 소프트웨어는 서비스에 연결하여 제어 명령을 보냅니다. , 등. 아래와 같이 제어 명령을 보냅니다.

21.5 프록시 서비스(SSIO 서비스 인터페이스)

프록시 서비스는 ServerSuperIO의 IService 인터페이스를 통해 구현됩니다. 프록시 서비스는 ServerSuperIO 프레임워크 자체의 싱글톤 모드를 사용하여 개발됩니다. 상속 클래스입니다. 코드는 다음과 같습니다:

public override void StartService()
        {
            string devId = "ControlDeviceService";
            Driver dev = new Driver();
            dev.ReceiveRequestInfos += Dev_ReceiveRequestInfos;
            dev.DeviceParameter.DeviceName = "控制设备驱动器";
            dev.DeviceParameter.DeviceAddr = 0;
            dev.DeviceParameter.DeviceID = devId;
            dev.DeviceParameter.DeviceCode = "";
            dev.DeviceDynamic.DeviceID = devId;
            dev.DeviceParameter.NET.RemoteIP = "127.0.0.1";
            dev.DeviceParameter.NET.RemotePort = 9600;
            dev.DeviceParameter.NET.ControllerGroup = "LocalGroup";
            dev.CommunicateType = CommunicateType.NET;
            dev.Initialize(devId);

            IServer server = new ServerManager().CreateServer(new ServerConfig()
            {
                ServerName = "控制设备服务",
                ListenPort=6670,
                ComReadTimeout = 1000,
                ComWriteTimeout = 1000,
                NetReceiveTimeout = 1000,
                NetSendTimeout = 1000,
                ControlMode = ControlMode.Singleton,
                SocketMode = SocketMode.Tcp,
                StartReceiveDataFliter = false,
                ClearSocketSession = false,
                StartCheckPackageLength = false,
                CheckSameSocketSession = false,
            });

            server.AddDeviceCompleted += server_AddDeviceCompleted;
            server.DeleteDeviceCompleted += server_DeleteDeviceCompleted;
            server.SocketConnected += server_SocketConnected;
            server.SocketClosed += server_SocketClosed;
            server.Start();

            server.AddDevice(dev);
        }
로그인 후 복사

dev.ReceiveRequestInfos 이벤트는 제어 드라이버가 ServerSuperIO 프레임워크의 RunDevice 드라이버 클래스 확장에서 상속하는 이벤트 인터페이스입니다. ServerSuperIO 싱글톤 모드는 프로토콜 표준을 충족하면 데이터 정보가 드라이버로 피드백됩니다. 통신 인터페이스입니다. ReceiverRequestInfos 이벤트는 프록시 서비스가 이 이벤트를 구독하는 Dev_ReceiveRequestInfos 함수에 전달됩니다. 코드는 아래와 같습니다.

프록시 서비스의 Dev_ReceiveRequestInfos 함수는 서비스 커넥터 인터페이스 IServiceConnector를 통해 DeviceCode(addr)에 따라 해당 장치 드라이버에 정보를 전달합니다. 코드는 아래와 같습니다.

프록시 서비스는 ServiceConnectorCallback 및 ServiceConnectorCallbackError 함수 인터페이스를 통해 장치 드라이버가 피드백한 결과 정보를 수신합니다. 만약 중간에 예외가 발생하면 ServiceConnectorCallbackError가 호출됩니다. 정상적으로 ServiceConnectorCallback 함수가 호출되면 기록된 해당 명령을 기반으로 IO 채널과 통신한 다음 결과를 제어 측으로 보냅니다. ServiceConnectorCallback 코드는 아래와 같습니다.

여기서 주의할 점은 장치 드라이버가 지정된 시간 내에 제어 명령의 확인 정보를 피드백하지 않는다는 것, 즉 센서가 피드백하지 않는다는 것입니다. 해당 정보. 이 경우 타이밍 감지 서비스를 추가해야 합니다. 타임아웃 이후 피드백 정보가 없으면 해당 메시지가 제어 측으로 전송됩니다. 코드는 아래와 같습니다.

21.6 장치 드라이버

이 장치 드라이버는 센서에 해당하며 데이터에서 서로 상호 작용합니다. 디바이스 드라이버의 RunServiceConnector 인터페이스는 프록시 서비스 Dev_ReceiveRequestInfos(OnServiceConnector) 함수가 전달한 명령 정보를 수신하는 역할을 합니다. 코드는 아래와 같습니다:

두 가지 설명이 있습니다. 1. 명령 데이터를 받은 후 즉시 OnSendData 함수를 통해 데이터 정보를 보낼 수 있으며 설정된 IP를 사용하여 해당 IO 채널을 찾을 수 있습니다. 자동 제어 모드에 적합합니다. 2. 명령 데이터를 수신한 후 this.Protocol.SendCache 프로토콜 캐시에 배치하고 명령이 실행될 때까지 기다립니다. 이는 폴링 및 동시 모드에 적합합니다.

반환된 결과 개체 ServiceConnectorCallbackResult의 isAsyn 매개 변수에 대해 true인 경우 AsyncServiceConnectorCallback 콜백을 통해 결과 정보가 반환된다는 의미이므로 센서가 확인 정보를 반환할 때까지 기다려야 하며 장치는 드라이버는 이를 수신한 후 프록시 서비스에 피드백합니다. 거짓인 경우 지침은 즉시 프록시 서비스에 피드백되며 센서와의 상호 작용 성공 여부에 관계없이 데이터 정보를 전달하는 데 적합합니다.

이 함수에 콜백 매개변수를 임시로 저장하고 센서가 확인 정보를 반환할 때까지 기다린 다음 통신 함수에서 프록시 서비스에 대한 비동기 콜백을 트리거할 수 있습니다. 코드는 다음과 같습니다.

21.7 데모 지침

두 개의 TestDevice 프로그램을 엽니다. 하나는 장치 센서로, 다른 하나는 제어 터미널로 사용됩니다. TestDeviceDriver는 장치 드라이버이며 로드됩니다. 내가 사용하는 서비스 인스턴스. 자체 제어 모드에서는 TestSelfMain 프로젝트를 사용합니다. ControlDeviceService는 프록시 서비스이며 TestSelfMain에 로드됩니다. 자세한 내용은 프로젝트 코드를 참조하세요: .

참고: 향후 당사의 빅 데이터 플랫폼은 이 모드를 통해 사이트에 제어 명령을 내릴 수도 있습니다.


1. "C# 통신(직렬 포트 및 네트워크) 프레임워크 설계 및 구현"

2. [오픈 소스] C# 크로스 플랫폼 IoT 통신 프레임워크 ServerSuperIO(SSIO) 소개

2 . SuperIO(SIO) 및 오픈 소스 크로스 플랫폼 IoT 프레임워크인 ServerSuperIO(SSIO)를 적용하여 전체 시스템 솔루션 구축

3.C# 산업용 IoT 및 통합 시스템 솔루션(데이터 소스, 데이터 수집, 데이터 업로드 및 리셉션, ActiveMQ, Mongodb, WebApi, 모바일 앱)

5. ServerSuperIO 오픈 소스 주소:

Internet of Things & Integrated Technology (.NET) QQ 그룹: 54256083

다운로드 주소:


1.C# 크로스 플랫폼 사물 인터넷 통신 프레임워크 ServerSuperIO(SSIO) 소개

"직렬 | 사물 인터넷 프레임워크 ServerSuperIO 튜토리얼" 1.4 통신 모드 메커니즘.

"Serial | Internet of Things Framework ServerSuperIO Tutorial" 2. 서비스 인스턴스 구성 매개변수 설명

"Serial | Internet of Things Framework ServerSuperIO Tutorial" - 3. 장치 드라이버 소개

"Serial | Internet of Things Framework ServerSuperIO Tutorial" - 4. 직렬 포트와 네트워크 통신을 모두 지원하는 장치 드라이버 세트를 개발하십시오.

"직렬 | 사물 인터넷 프레임워크 ServerSuperIO 튜토리얼" - 5. 폴링 통신 모드 개발 및 주의사항.

"Serial | Internet of Things Framework ServerSuperIO Tutorial" - 6. 동시 통신 모드 개발 및 주의사항

"Serial | Internet of Things Framework ServerSuperIO Tutorial" - 7. 자체 제어 통신 모드 개발 및 주의사항

"Serial | Internet of Things Framework ServerSuperIO Tutorial》- 8. 싱글톤 통신 모드 개발 및 주의사항

《Serial | Internet of Things Framework ServerSuperIO Tutorial》- 9. 다중 패킷, 끈적한 패킷 및 중복 데이터 문제를 해결하기 위한 프로토콜 필터

《Serial | 사물 인터넷 프레임워크 서버SuperIO 튜토리얼" - 10. 대용량 데이터 스트림(예: 파일)을 지속적으로 전송하는 두 가지 방법

"직렬화 | 사물 인터넷 프레임워크 서버SuperIO 튜토리얼" - 11. 장치(드라이버)와 장치(드라이버) 상호 작용 구현 계단식 제어.

"Serial | Internet of Things Framework ServerSuperIO Tutorial" - 12. 서비스 인터페이스 개발 및 클라우드와의 양방향 상호 작용

"Serial | Internet of Things Framework ServerSuperIO Tutorial" - 13. 다양한 디스플레이 요구 사항을 충족하는 사용자 정의 뷰 디스플레이 인터페이스 개발

"직렬 | 사물 인터넷 프레임워크 서버SuperIO 튜토리얼" - 14. 구성 도구 소개, 장치 드라이버 마운트, 드라이버 보기 및 서비스 인스턴스

"직렬 | 사물 인터넷 프레임워크 서버SuperIO 튜토리얼" - 15. 데이터 지속성 인터페이스 사용

"Serial | IoT Framework ServerSuperIO Tutorial" - 16. OPC 서버 사용 단계

"Serial | IoT Framework ServerSuperIO Tutorial" - 17. 실시간 데이터베이스 지원, 측정 포인트 데이터 저장을 위한 높은 동시성

"직렬 | 사물 인터넷 프레임워크 ServerSuperIO 튜토리얼" - 18. OPC 클라이언트 통합 및 사용 단계

"직렬 | 사물 인터넷 프레임워크 서버SuperIO 튜토리얼"-19. 장치 드라이버 및 OPC 클라이언트는 mysql, oracle, sqlite, sqlserver

"사물 인터넷 프레임워크 서버SuperIO 튜토리얼"의 지속성을 지원합니다. 20. 네트워크 통신 컨트롤러는 대화형 로드 밸런싱 기능을 향상시키기 위해 그룹화됩니다. v3.6.6 버전 출시

위 내용은 루프 제어 인스턴스를 형성하기 위해 터미널 제어 센서 또는 장치를 공유합니다.의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

관련 라벨:
원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿